grib_api: get_fortran.F

- Main Page
- Modules
- Files
- Related Pages
- Examples

# get_fortran.F

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

    00001 C Copyright 2005-2015 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