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",¶meterCategory),0); printf("parameterCategory=%ld\n",parameterCategory); CODES_CHECK(codes_get_long(h,"parameterNumber",¶meterNumber),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; }