Tabs Page |
---|
| Code Block |
---|
language | cppnone |
---|
title | grib_get_keys.cf90 |
---|
linenumbers | false |
---|
| /*
! * Copyright 2005-2015 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_get_keys
*
* !
! Description: how to get values using keys from GRIB messages
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "eccodes.h"
int main(int argc, char** argv)
{
int err = 0;
double *values = NULL;
size_t values_len= 0;
size_t i = 0, len = 0;
double latitudeOfFirstGridPointInDegrees;
double longitudeOfFirstGridPointInDegrees;
double latitudeOfLastGridPointInDegrees;
double longitudeOfLastGridPointInDegrees;
double jDirectionIncrementInDegrees;
double iDirectionIncrementInDegrees;
long numberOfPointsAlongAParallel;
long numberOfPointsAlongAMeridian;
double average = 0;
char* packingType = NULL;
FILE* in = NULL;
const char* filename = "../../data/regular_latlon_surface.grib1";
codes_handle *h = NULL;
in = fopen(filename,"r");
if(!in) {
!
!
program grib_get_keys
use eccodes
implicit none
integer :: ifile
integer :: iret
integer :: igrib
real printf("ERROR:: unable tolatitudeOfFirstPointInDegrees
open file %s\n",filename);
real return 1;
}
/* create new handle from a message in a file*/
h:: = codes_handle_new_from_file(0, in, PRODUCT_GRIB, &err);
longitudeOfFirstPointInDegrees
real if (h == NULL) {
printf("Error: unable to create handle from:: file %s\n",filename); latitudeOfLastPointInDegrees
real }
/* Store the filename in the key "file" for this handle */
len = strlen(filename);
CODES_CHECK(codes_set_string(h, "file", filename, &len), 0);
:: longitudeOfLastPointInDegrees
integer /* get as a long*/
CODES_CHECK(codes_get_long(h,"Ni",&numberOfPointsAlongAParallel),0);
printf("numberOfPointsAlongAParallel=%ld\n",numberOfPointsAlongAParallel);
/* get as a long*/
CODES_CHECK(codes_get_long(h,"Nj",&numberOfPointsAlongAMeridian),0);
printf("numberOfPointsAlongAMeridian=%ld\n",numberOfPointsAlongAMeridian);
:: numberOfPointsAlongAParallel
integer /* get as a double*/
CODES_CHECK(codes_get_double(h,"latitudeOfFirstGridPointInDegrees",&latitudeOfFirstGridPointInDegrees),0);
printf("latitudeOfFirstGridPointInDegrees=%g\n",latitudeOfFirstGridPointInDegrees);
/* get as:: a double*/numberOfPointsAlongAMeridian
real, CODES_CHECK(codes_get_double(h,"longitudeOfFirstGridPointInDegrees",&longitudeOfFirstGridPointInDegrees),0);
printf("longitudeOfFirstGridPointInDegrees=%g\n",longitudeOfFirstGridPointInDegrees);
dimension(:), allocatable :: values
integer /* get as a double*/
CODES_CHECK(codes_get_double(h,"latitudeOfLastGridPointInDegrees",&latitudeOfLastGridPointInDegrees),0);
printf("latitudeOfLastGridPointInDegrees=%g\n",latitudeOfLastGridPointInDegrees);
:: /*numberOfValues
get asreal a double*/
CODES_CHECK(codes_get_double(h,"longitudeOfLastGridPointInDegrees",&longitudeOfLastGridPointInDegrees),0);
printf("longitudeOfLastGridPointInDegrees=%g\n",longitudeOfLastGridPointInDegrees);
/* get as a double*/
CODES_CHECK(codes_get_double(h,"jDirectionIncrementInDegrees",&jDirectionIncrementInDegrees),0);
printf("jDirectionIncrementInDegrees=%g\n",jDirectionIncrementInDegrees);
/* get:: as a double*/ average,min_val, max_val
CODES_CHECK(codes_get_double(h,"iDirectionIncrementInDegrees",&iDirectionIncrementInDegrees),0);
integer printf("iDirectionIncrementInDegrees=%g\n",iDirectionIncrementInDegrees);
/* get as string */
CODES_CHECK(codes_get_length(h, "packingType", &len), 0);
:: packingTypeis_missing
= (char*)malloc(len*sizeof(char));
call codes_getopen_stringfile(hifile, "packingType", packingType, &len);
printf("packingType=%s\n", packingType);
free(packingType);
/* get the size of the values array*/
CODES_CHECK(codes_get_size(h,"values",&values_len),0);
values = (double*)malloc(values_len*sizeof(double));
/* get data values*/
CODES_CHECK(codes_get_double_array(h,"values",values,&values_len),0);
average = 0;
for(i = 0; i < values_len; i++)
average += values[i];
average /=(double)values_len;
free(values);
printf("There are %d values, average is %g\n",(int)values_len,average);
{
int eq = 0;
/* Now retrieve the value of the key "file" */ &
'../../data/reduced_latlon_surface.grib1','r')
! Loop on all the messages in a file.
! a new grib message is loaded from file
! igrib is the grib id to be used in subsequent calls
call codes_grib_new_from_file(ifile,igrib, iret)
LOOP: DO WHILE (iret /= CODES_END_OF_FILE)
! For debugging
call grib_dump(igrib)
!check if the value of the key is MISSING
is_missing=0;
call codes_is_missing(igrib,'Ni',is_missing);
if ( is_missing /= 1 ) then
! get as a integer
call codes_get(igrib,'Ni',numberOfPointsAlongAParallel)
char file[256]={0,};write(*,*) 'numberOfPointsAlongAParallel=', &
CODES_CHECK(codes_get_length(h, "file", &len),0);
numberOfPointsAlongAParallel
assert(len == 1+strlen(filename));
else
codes_get_string(h, "file", file, &len);write(*,*) 'numberOfPointsAlongAParallel is missing'
endif eq = strcmp(file, filename);
! assert( eqget ==as 0a );integer
}
call codes_handle_delete(h);get(igrib,'Nj',numberOfPointsAlongAMeridian)
fclosewrite(in);*,*) 'numberOfPointsAlongAMeridian=', &
return 0;
}
|
| Tabs Page |
---|
| Code Block |
---|
language | none |
---|
title | grib_get_keys.f90 |
---|
linenumbers | false |
---|
| ! Copyright 2005-2015 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 get values using keys from GRIB messages
!
!
program grib_get_keys
use eccodes
implicit none
integer :: ifile
integer numberOfPointsAlongAMeridian
! get as a real
call codes_get(igrib, 'latitudeOfFirstGridPointInDegrees', &
latitudeOfFirstPointInDegrees)
write(*,*) 'latitudeOfFirstGridPointInDegrees=', &
latitudeOfFirstPointInDegrees
! get as a real
call codes_get(igrib, 'longitudeOfFirstGridPointInDegrees', &
longitudeOfFirstPointInDegrees)
write(*,*) 'longitudeOfFirstGridPointInDegrees=', &
longitudeOfFirstPointInDegrees
! get as a real
call codes_get(igrib, 'latitudeOfLastGridPointInDegrees', &
latitudeOfLastPointInDegrees)
write(*,*) 'latitudeOfLastGridPointInDegrees=', &
:: iretlatitudeOfLastPointInDegrees
integer ! get as a real
call codes_get(igrib, 'longitudeOfLastGridPointInDegrees', &
longitudeOfLastPointInDegrees) :: igrib
real write(*,*) 'longitudeOfLastGridPointInDegrees=', &
longitudeOfLastPointInDegrees
! get the size of the :: latitudeOfFirstPointInDegreesvalues array
real call codes_get_size(igrib,'values',numberOfValues)
write(*,*) 'numberOfValues=',numberOfValues
allocate(values(numberOfValues), stat=iret)
! get data values
:: longitudeOfFirstPointInDegreescall codes_get(igrib,'values',values)
real call codes_get(igrib,'min',min_val) ! can also be obtained through minval(values)
call codes_get(igrib,'max',max_val) ! can also be obtained through maxval(values)
call codes_get(igrib,'average',average) ! can ::also be latitudeOfLastPointInDegrees
obtained realthrough maxval(values)
deallocate(values)
write(*,*)'There are ',numberOfValues, &
:: ' longitudeOfLastPointInDegrees
average is integer ',average, &
' min is ', min_val, &
' ::max is numberOfPointsAlongAParallel
', integermax_val
call codes_release(igrib)
:: numberOfPointsAlongAMeridian
real, dimension(:), allocatable :: values
integer :: numberOfValues
real :: average,min_val, max_val
integer :: is_missing
call codes_open_file(ifile, &
call codes_grib_new_from_file(ifile,igrib, iret)
end do LOOP
call codes_close_file(ifile)
end program grib_get_keys
|
|
Tabs Page |
---|
| Code Block |
---|
language | python |
---|
title | grib_get_keys.py |
---|
linenumbers | false |
---|
| # Copyright 2005-2015 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.
import traceback
import sys
from eccodes import *
INPUT = '../../data/reduced_latlon_surface.grib1'
VERBOSE = 1 # verbose error reporting
def example():
f = open(INPUT)
keys = [
'Ni',
'../../data/reduced_latlon_surface.grib1Nj','r')
! Loop on all the'latitudeOfFirstGridPointInDegrees',
messages in a file.
! 'longitudeOfFirstGridPointInDegrees',
a new grib message is loaded from file
! 'latitudeOfLastGridPointInDegrees',
'longitudeOfLastGridPointInDegrees',
igrib]
is the gribwhile id1:
to be used in subsequent calls
callgid = codes_grib_new_from_file(ifile,igrib, iret)
f)
LOOP: DO WHILE (iret /= CODES_END_OF_FILE)
!check if the value of the key is MISSING
is_missing=0; if gid is None:
break
call codes_is_missing(igrib,'Ni',is_missing);
for ifkey ( is_missing /= 1 ) then
in keys:
!try:
get as a integer
call codes_get(igrib,'Ni',numberOfPointsAlongAParallel)
write(*,*) 'numberOfPointsAlongAParallel=', &print ' %s: %s' % (key, codes_get(gid, key))
except numberOfPointsAlongAParallel
elseCodesInternalError, err:
write(*,*) 'numberOfPointsAlongAParallel is missing'
endif print 'Error with
!key="%s" : %s' % (key, err.msg)
get as a integer
print 'There are call codes_get(igrib,'Nj',numberOfPointsAlongAMeridian)
write(*,*) 'numberOfPointsAlongAMeridian=', &
numberOfPointsAlongAMeridian
!%d values, average is %f, min is %f, max is %f' % (
get as a real
call codes_get_size(igribgid, 'latitudeOfFirstGridPointInDegreesvalues'), &
latitudeOfFirstPointInDegrees)
write(*,*) 'latitudeOfFirstGridPointInDegrees=', &
codes_get(gid, 'average'),
latitudeOfFirstPointInDegrees
codes_get(gid, 'min'),
! get as a real
call codes_get(igribgid, 'longitudeOfFirstGridPointInDegreesmax', &)
)
longitudeOfFirstPointInDegrees)
write(*,*) 'longitudeOfFirstGridPointInDegrees=', &codes_release(gid)
f.close()
def main():
longitudeOfFirstPointInDegrees
try:
! example()
get as a real except CodesInternalError, err:
call codes_get(igrib, 'latitudeOfLastGridPointInDegrees', &
if VERBOSE:
latitudeOfLastPointInDegrees)
write(*,*) 'latitudeOfLastGridPointInDegrees=', &traceback.print_exc(file=sys.stderr)
else:
latitudeOfLastPointInDegrees
! get as a realprint >>sys.stderr, err.msg
call codes_get(igrib, 'longitudeOfLastGridPointInDegrees', &
return 1
if __name__ longitudeOfLastPointInDegrees) == "__main__":
write(*,*) 'longitudeOfLastGridPointInDegrees=', &
longitudeOfLastPointInDegrees
! get the size of the values array
call codes_get_size(igrib,'values',numberOfValues)
write(*,*) 'numberOfValues=',numberOfValues
allocate(values(numberOfValues), stat=iret)
! get data values
call codes_get(igrib,'values',values)
call codes_get(igrib,'min',min_val) ! can also be obtained through minval(values)
call codes_get(igrib,'max',max_val) ! can also be obtained through maxval(values)
call codes_get(igrib,'average',average) ! can also be obtained through maxval(values)
deallocate(values)
write(*,*)'There are ',numberOfValues, &
' average is ',average, &
' min is ', min_val, &
' max is ', max_val
call codes_release(igrib)
call codes_grib_new_from_file(ifile,igrib, iret)
end do LOOP
call codes_close_file(ifile)
end program grib_get_keys
sys.exit(main())
|
|
Tabs Page |
---|
| Code Block |
---|
language | cpp |
---|
title | grib_get_keys.c |
---|
linenumbers | false |
---|
| /*
* Copyright 2005-2015 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_get_keys
*
* Description: how to get values using keys from GRIB messages
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "eccodes.h"
int main(int argc, char** argv)
{
int err = 0;
double *values = NULL;
size_t values_len= 0;
size_t i = 0, len = 0;
double latitudeOfFirstGridPointInDegrees;
double longitudeOfFirstGridPointInDegrees;
double latitudeOfLastGridPointInDegrees;
double longitudeOfLastGridPointInDegrees;
double jDirectionIncrementInDegrees;
double iDirectionIncrementInDegrees;
long numberOfPointsAlongAParallel;
long numberOfPointsAlongAMeridian;
double average = 0;
char* packingType = NULL;
FILE* in = NULL;
const char* filename = "../../data/regular_latlon_surface.grib1";
codes_handle *h = NULL;
in = fopen(filename,"r");
if(!in) {
printf("ERROR: unable to open file %s\n",filename);
return 1;
}
/* create new handle from the first message in the file*/
h = codes_handle_new_from_file(0, in, PRODUCT_GRIB, &err);
if (h == NULL) {
printf("Error: unable to create handle from file %s\n",filename);
return 1;
}
fclose(in);
/* Store the filename in the key "file" for this handle */
len = strlen(filename);
CODES_CHECK(codes_set_string(h, "file", filename, &len), 0);
/* get as a long*/
CODES_CHECK(codes_get_long(h,"Ni",&numberOfPointsAlongAParallel),0);
printf("numberOfPointsAlongAParallel=%ld\n",numberOfPointsAlongAParallel);
/* get as a long*/
CODES_CHECK(codes_get_long(h,"Nj",&numberOfPointsAlongAMeridian),0);
printf("numberOfPointsAlongAMeridian=%ld\n",numberOfPointsAlongAMeridian);
/* get as a double*/
CODES_CHECK(codes_get_double(h,"latitudeOfFirstGridPointInDegrees",&latitudeOfFirstGridPointInDegrees),0);
printf("latitudeOfFirstGridPointInDegrees=%g\n",latitudeOfFirstGridPointInDegrees);
/* get as a double*/
CODES_CHECK(codes_get_double(h,"longitudeOfFirstGridPointInDegrees",&longitudeOfFirstGridPointInDegrees),0);
printf("longitudeOfFirstGridPointInDegrees=%g\n",longitudeOfFirstGridPointInDegrees);
/* get as a double*/
CODES_CHECK(codes_get_double(h,"latitudeOfLastGridPointInDegrees",&latitudeOfLastGridPointInDegrees),0);
printf("latitudeOfLastGridPointInDegrees=%g\n",latitudeOfLastGridPointInDegrees);
/* get as a double*/
CODES_CHECK(codes_get_double(h,"longitudeOfLastGridPointInDegrees",&longitudeOfLastGridPointInDegrees),0);
printf("longitudeOfLastGridPointInDegrees=%g\n",longitudeOfLastGridPointInDegrees);
/* get as a double*/
CODES_CHECK(codes_get_double(h,"jDirectionIncrementInDegrees",&jDirectionIncrementInDegrees),0);
printf("jDirectionIncrementInDegrees=%g\n",jDirectionIncrementInDegrees);
/* get as a double*/
CODES_CHECK(codes_get_double(h,"iDirectionIncrementInDegrees",&iDirectionIncrementInDegrees),0);
printf("iDirectionIncrementInDegrees=%g\n",iDirectionIncrementInDegrees);
/* get as string */
CODES_CHECK(codes_get_length(h, "packingType", &len), 0);
packingType = (char*)malloc(len*sizeof(char));
codes_get_string(h, "packingType", packingType, &len);
printf("packingType=%s\n", packingType);
free(packingType);
/* get the size of the values array*/
CODES_CHECK(codes_get_size(h,"values",&values_len),0);
values = (double*)malloc(values_len*sizeof(double));
/* get data values*/
CODES_CHECK(codes_get_double_array(h,"values",values,&values_len),0);
average = 0;
for(i = 0; i < values_len; i++)
average += values[i];
average /=(double)values_len;
free(values);
printf("There are %d values, average is %g\n",(int)values_len,average);
{ |
| Tabs Page |
---|
| Code Block |
---|
language | python |
---|
title | grib_get_keys.py |
---|
linenumbers | false |
---|
| # Copyright 2005-2015 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.
import traceback
import sys
from eccodes import *
INPUT='../../data/reduced_latlon_surface.grib1'
VERBOSE=1 # verbose error reporting
def example():
f = open(INPUT)
keys = [
'Ni',
'Nj',
'latitudeOfFirstGridPointInDegrees',
'longitudeOfFirstGridPointInDegrees',
'latitudeOfLastGridPointInDegrees',
'longitudeOfLastGridPointInDegrees',
]
while 1:
gid = codes_grib_new_from_file(f)
if gid is None: break
for key in keys:
try:
print ' %s: %s' % (key,codes_get(gid,key))
except CodesInternalError,err:
print 'Error with key="%s" : %s' % (key,err.msg)
print 'There are %d values, average is %f, min is %f, max is %f' % (
codes_get_size(gid,'values'),
codes_get(gid,'average'),
codes_get(gid,'min'),
int eq codes_get(gid,'max')= 0;
)
/* Now retrieve the value of the codes_release(gid)
key "file" */
f.close()
def main():
try:char file[256]={0,};
example()
except CodesInternalError,err:CODES_CHECK(codes_get_length(h, "file", &len),0);
if VERBOSE:assert(len == 1+strlen(filename));
codes_get_string(h, "file", traceback.print_exc(file=sys.stderr)
file, &len);
else:
eq = strcmp(file, filename);
print >>sys.stderr,err.msg
assert( eq == 0 );
return 1}
if __name__ == "codes__main__":handle_delete(h);
sys.exit(main())return 0;
}
|
|
|