get_fortran.F

get_fortran.F How to get values through the key names.

00001 C Copyright 2005-2016 ECMWF
00002 C This software is licensed under the terms of the Apache Licence Version 2.0
00003 C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
00004 C 
00005 C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
00006 C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
00007 C
00008 C  Fortran 77  Implementation: get_fortran
00009 C
00010 C  Description: how to get values using keys.
00011 C
00012 C  Author: Enrico Fucile
00013 C
00014 C
00015 C
00016       program get
00017       implicit none
00018       integer maxNumberOfValues
00019       parameter( maxNumberOfValues = 10000 )
00020       include 'grib_api_f77.h'
00021       integer ifile
00022       integer iret
00023       integer igrib
00024       integer i
00025       real*8 latitudeOfFirstPointInDegrees
00026       real*8 longitudeOfFirstPointInDegrees
00027       real*8 latitudeOfLastPointInDegrees
00028       real*8 longitudeOfLastPointInDegrees
00029       real*8 jDirectionIncrementInDegrees
00030       real*8 iDirectionIncrementInDegrees
00031       integer*4 numberOfPointsAlongAParallel
00032       integer*4 numberOfPointsAlongAMeridian
00033       real*8 values(maxNumberOfValues)
00034       integer*4 numberOfValues
00035       real*8 average
00036       character*256 error
00037       integer*4 size
00038 
00039       size=maxNumberOfValues
00040       ifile=5
00041 
00042       iret=grib_open_file(ifile
00043      X,'../../data/regular_latlon_surface.grib1','r')
00044       call grib_check(iret)
00045 
00046 C     a new grib message is loaded from file
00047 C     igrib is the grib id to be used in subsequent calls
00048       call grib_check( grib_new_from_file(ifile,igrib) )
00049 
00050 C     get as a integer
00051       call grib_check(grib_get_int(igrib,'numberOfPointsAlongAParallel'
00052      X,numberOfPointsAlongAParallel) )
00053       write(*,*) 'numberOfPointsAlongAParallel='
00054      X,numberOfPointsAlongAParallel
00055 
00056 C     get as a integer
00057       call grib_check( grib_get_int(igrib,'numberOfPointsAlongAMeridian'
00058      X,numberOfPointsAlongAMeridian) )
00059       write(*,*) 'numberOfPointsAlongAMeridian='
00060      X,numberOfPointsAlongAMeridian
00061 
00062 C     get as a real8
00063       call grib_check( grib_get_real8(igrib
00064      X,'latitudeOfFirstGridPointInDegrees'
00065      X,latitudeOfFirstPointInDegrees) )
00066        write(*,*) 'latitudeOfFirstGridPointInDegrees='
00067      X,latitudeOfFirstPointInDegrees
00068 
00069 C     get as a real8
00070       call grib_check( grib_get_real8(igrib
00071      X,'longitudeOfFirstGridPointInDegrees'
00072      X,longitudeOfFirstPointInDegrees) )
00073        write(*,*) 'longitudeOfFirstGridPointInDegrees='
00074      X,longitudeOfFirstPointInDegrees
00075 
00076 C     get as a real8
00077       call grib_check( grib_get_real8(igrib
00078      X,'latitudeOfLastGridPointInDegrees'
00079      X,latitudeOfLastPointInDegrees) )
00080        write(*,*) 'latitudeOfLastGridPointInDegrees='
00081      X,latitudeOfLastPointInDegrees
00082 
00083 C     get as a real8
00084       call grib_check( grib_get_real8(igrib
00085      X,'longitudeOfLastGridPointInDegrees'
00086      X,longitudeOfLastPointInDegrees) )
00087       write(*,*) 'longitudeOfLastGridPointInDegrees='
00088      X,longitudeOfLastPointInDegrees
00089 
00090 C     get as a real8
00091       call grib_check( grib_get_real8(igrib
00092      X,'jDirectionIncrementInDegrees'
00093      X,jDirectionIncrementInDegrees) )
00094       write(*,*) 'jDirectionIncrementInDegrees='
00095      X,jDirectionIncrementInDegrees
00096 
00097 C     get as a real8
00098       call grib_check( grib_get_real8(igrib
00099      X,'iDirectionIncrementInDegrees'
00100      X,iDirectionIncrementInDegrees) )
00101       write(*,*) 'iDirectionIncrementInDegrees='
00102      X,iDirectionIncrementInDegrees
00103 
00104 C     get the size of the values array
00105       call grib_check(grib_get_size(igrib,'values',numberOfValues))
00106       write(*,*) 'numberOfValues=',numberOfValues
00107 
00108 C     get data values
00109       call grib_check(grib_get_real8_array(igrib,'values',values,size))
00110       if ( size .ne. numberOfValues ) then
00111         write(*,*) 'ERROR: wrong numberOfValues'
00112         stop
00113       endif
00114 
00115       average = 0
00116       do i=1,numberOfValues
00117         average = average + values(i);
00118       enddo
00119 
00120       average =average / numberOfValues
00121 
00122       write(*,*)'There are ',numberOfValues
00123      X,' average is ',average
00124 
00125       call grib_check(grib_release(igrib))
00126 
00127       call grib_check(grib_close_file(ifile))
00128 
00129       end

Generated on Tue Sep 22 15:18:21 2009 for grib_api by  doxygen 1.5.3