Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Description

This example shows: How to decode

...

GRIB2 multi-field messages. Try to turn on and off multi support to see the difference. Default is OFF. For all the tools default is multi support ON.

Source code

Tabs Container
directionhorizontal


Tabs Page
titleFortran 90


Code Block
languagenone
titlegrib_multi.f90
linenumbersfalse
! Copyright 2005-2018 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.
!
!
!  Description: How to decode GRIB2 GRIBmulti-field messages containing multiple.
!               fields. Try to turn on and off multi support to
!               see the difference. Default is OFF.
!               For all the tools default is multi support ON.
!
!
program multi
  use eccodes
  implicit none

  integer              :: iret
  integer(kind = 4)    :: step
  integer              :: ifile,igrib

  call codes_open_file(ifile, '../../data/multi_created.grib2','r')

  !     turn on support for multi fields messages */
  call codes_grib_multi_support_on()

  !     turn off support for multi fields messages */
  !call codes_grib_multi_support_off()

  call codes_grib_new_from_file(ifile,igrib, iret)
  !     Loop on all the messages in a file.

  write(*,*) 'step'
  do while (iret /= CODES_END_OF_FILE)

     call codes_get(igrib,'step', step)
     write(*,'(i3)') step

     call codes_grib_new_from_file(ifile,igrib, iret)

  end do
  call codes_close_file(ifile)

end program multi



Tabs Page
titleC


Code Block
languagecpp
titlegrib_multi.c
linenumbersfalse
/*
 * Copyright 2005-2018 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.
 */

/*
 * C Implementation: grib_multi
 *
 * Description: How to decode GRIBGRIB2 multi-field messages containing multiple.
 *              fields. Try to turn on and off multi support to
 *              see the difference. Default is OFF.
 *              For all the tools defalut is multi support ON.
 *
 */
#include <stdio.h>
#include <stdlib.h>

#include "eccodes.h"

int main(int argc, char** argv)
{
    int err = 0;
    long parameterCategory=0,parameterNumber=0,discipline=0;
    FILE* in = NULL;
    const char* filename = "../../data/multi.grib2";
    codes_handle *h = NULL;

    /* turn on support for multi fields messages */
    codes_grib_multi_support_on(0);

    /* turn off support for multi fields messages */
    /* codes_multi_support_off(0); */

    in = fopen(filename,"r");
    if(!in) {
        printf("ERROR: unable to open file %s\n",filename);
        return 1;
    }

    while ((h = codes_handle_new_from_file(0, in, PRODUCT_GRIB, &err)) != NULL ) {

        CODES_CHECK(err,0);

        CODES_CHECK(codes_get_long(h,"discipline",&discipline),0);
        printf("discipline=%ld\n",discipline);

        CODES_CHECK(codes_get_long(h,"parameterCategory",&parameterCategory),0);
        printf("parameterCategory=%ld\n",parameterCategory);

        CODES_CHECK(codes_get_long(h,"parameterNumber",&parameterNumber),0);
        printf("parameterNumber=%ld\n",parameterNumber);

        if ( discipline == 0 && parameterCategory==2) {
            if (parameterNumber == 2) printf("-------- u -------\n");
            if (parameterNumber == 3) printf("-------- v -------\n");
        }
        codes_handle_delete(h);
    }

    fclose(in);
    return 0;
}



...