...
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 (e.g., grib_ls etc) multi support is ON.
Source code
Tabs Container |
---|
|
Tabs Page |
---|
|
Code Block |
---|
language | none |
---|
title | grib_multi.f90 |
---|
linenumbers | false |
---|
| ! (C) Copyright 2005- 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 multi-field messages.
! Try to turn on and off multi support to
! see the difference. Default is OFF.
! For all the tools (e.g., grib_ls etc) multi support is 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 |
---|
|
Code Block |
---|
language | cpp |
---|
title | grib_multi.c |
---|
linenumbers | false |
---|
| /*
* (C) Copyright 2005- 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 GRIB2 multi-field messages.
* Try to turn on and off multi support to
* see the difference. Default is OFF.
* For all the tools (e.g., grib_ls etc) multi support is 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(NULL);
/* turn off support for multi fields messages */
/* codes_multi_support_off(NULL); */
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;
}
|
|
|
...