00001 ! Copyright 2005-2015 ECMWF
00002 ! This software is licensed under the terms of the Apache Licence Version 2.0
00003 ! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
00004 !
00005 ! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
00006 ! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
00007 !
00008 !
00009 ! Description: how to get lat/lon/values.
00010 !
00011 !
00012 ! Author: Enrico Fucile
00013 !
00014 !
00015 program get_data
00016 use grib_api
00017 implicit none
00018 integer :: ifile
00019 integer :: iret,i
00020 real(kind=8),dimension(:),allocatable :: lats,lons,values
00021 integer(4) :: numberOfPoints
00022 real(8) :: missingValue=9999
00023 integer :: count=0
00024 character(len=256) :: filename
00025
00026 ! Message identifier.
00027 integer :: igrib
00028
00029 ifile=5
00030
00031 call grib_open_file(ifile, &
00032 '../../data/reduced_latlon_surface.grib1','R')
00033
00034 ! Loop on all the messages in a file.
00035
00036 call grib_new_from_file(ifile,igrib,iret)
00037
00038 do while (iret/=GRIB_END_OF_FILE)
00039 count=count+1
00040 print *, "===== Message #",count
00041 call grib_get(igrib,'numberOfPoints',numberOfPoints)
00042 call grib_set(igrib,'missingValue',missingValue)
00043
00044 allocate(lats(numberOfPoints))
00045 allocate(lons(numberOfPoints))
00046 allocate(values(numberOfPoints))
00047
00048 call grib_get_data(igrib,lats,lons,values)
00049
00050 do i=1,numberOfPoints
00051 if (values(i) /= missingValue) then
00052 print *, lats(i),lons(i),values(i)
00053 end if
00054 enddo
00055
00056 deallocate(lats)
00057 deallocate(lons)
00058 deallocate(values)
00059
00060 call grib_release(igrib)
00061 call grib_new_from_file(ifile,igrib, iret)
00062
00063 end do
00064
00065
00066 call grib_close_file(ifile)
00067
00068 end program