You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

Description

This example shows: How to decode GRIB 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.

Source code

grib_multi.f90
! Copyright 2005-2016 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 GRIB 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
grib_multi.c
/*
 * Copyright 2005-2016 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 GRIB 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;
    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;
}
  • No labels