00001 ! Copyright 2005-2007 ECMWF 00002 ! 00003 ! Licensed under the GNU Lesser General Public License which 00004 ! incorporates the terms and conditions of version 3 of the GNU 00005 ! General Public License. 00006 ! See LICENSE and gpl-3.0.txt for details. 00007 ! 00008 ! 00009 ! Description: how to get values using keys. 00010 ! 00011 ! Author: Enrico Fucile 00012 ! 00013 ! 00014 program get 00015 use grib_api 00016 implicit none 00017 00018 integer :: ifile 00019 integer :: iret 00020 integer :: igrib 00021 real :: latitudeOfFirstPointInDegrees 00022 real :: longitudeOfFirstPointInDegrees 00023 real :: latitudeOfLastPointInDegrees 00024 real :: longitudeOfLastPointInDegrees 00025 integer :: numberOfPointsAlongAParallel 00026 integer :: numberOfPointsAlongAMeridian 00027 real, dimension(:), allocatable :: values 00028 integer :: numberOfValues 00029 real :: average,min_val, max_val 00030 00031 call grib_open_file(ifile, & 00032 '../../data/regular_latlon_surface.grib1','r') 00033 00034 ! Loop on all the messages in a file. 00035 00036 ! a new grib message is loaded from file 00037 ! igrib is the grib id to be used in subsequent calls 00038 call grib_new_from_file(ifile,igrib, iret) 00039 00040 LOOP: DO WHILE (iret /= GRIB_END_OF_FILE) 00041 00042 ! get as a integer 00043 call grib_get(igrib,'numberOfPointsAlongAParallel', & 00044 numberOfPointsAlongAParallel) 00045 write(*,*) 'numberOfPointsAlongAParallel=', & 00046 numberOfPointsAlongAParallel 00047 00048 ! get as a integer 00049 call grib_get(igrib,'numberOfPointsAlongAMeridian', & 00050 numberOfPointsAlongAMeridian) 00051 write(*,*) 'numberOfPointsAlongAMeridian=', & 00052 numberOfPointsAlongAMeridian 00053 00054 ! get as a real 00055 call grib_get(igrib, 'latitudeOfFirstGridPointInDegrees', & 00056 latitudeOfFirstPointInDegrees) 00057 write(*,*) 'latitudeOfFirstGridPointInDegrees=', & 00058 latitudeOfFirstPointInDegrees 00059 00060 ! get as a real 00061 call grib_get(igrib, 'longitudeOfFirstGridPointInDegrees', & 00062 longitudeOfFirstPointInDegrees) 00063 write(*,*) 'longitudeOfFirstGridPointInDegrees=', & 00064 longitudeOfFirstPointInDegrees 00065 00066 ! get as a real 00067 call grib_get(igrib, 'latitudeOfLastGridPointInDegrees', & 00068 latitudeOfLastPointInDegrees) 00069 write(*,*) 'latitudeOfLastGridPointInDegrees=', & 00070 latitudeOfLastPointInDegrees 00071 00072 ! get as a real 00073 call grib_get(igrib, 'longitudeOfLastGridPointInDegrees', & 00074 longitudeOfLastPointInDegrees) 00075 write(*,*) 'longitudeOfLastGridPointInDegrees=', & 00076 longitudeOfLastPointInDegrees 00077 00078 00079 ! get the size of the values array 00080 call grib_get_size(igrib,'values',numberOfValues) 00081 write(*,*) 'numberOfValues=',numberOfValues 00082 00083 allocate(values(numberOfValues), stat=iret) 00084 ! get data values 00085 call grib_get(igrib,'values',values) 00086 call grib_get(igrib,'min',min_val) ! can also be obtained through minval(values) 00087 call grib_get(igrib,'max',max_val) ! can also be obtained through maxval(values) 00088 call grib_get(igrib,'average',average) ! can also be obtained through maxval(values) 00089 00090 write(*,*)'There are ',numberOfValues, & 00091 ' average is ',average, & 00092 ' min is ', min_val, & 00093 ' max is ', max_val 00094 00095 call grib_release(igrib) 00096 00097 call grib_new_from_file(ifile,igrib, iret) 00098 00099 end do LOOP 00100 00101 call grib_close_file(ifile) 00102 00103 deallocate(values) 00104 end program get