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 00009 C Fortran 77 Implementation: multi_fortran 00010 C 00011 C Description: How to decode grib messages containing multiple 00012 C fields. Try to turn on and off multi support to 00013 C see the difference. Default is OFF. 00014 C For all the tools defalut is multi support ON. 00015 C 00016 C 00017 C Author: Enrico Fucile 00018 C 00019 C 00020 C 00021 program multi 00022 implicit none 00023 include 'grib_api_f77.h' 00024 integer iret 00025 character*256 error 00026 integer*4 parameterCategory,parameterNumber,discipline 00027 integer ifile,igrib 00028 00029 call grib_check( grib_open_file(ifile 00030 X,'../../data/multi.grib2','r')) 00031 00032 C turn on support for multi fields messages */ 00033 call grib_check(grib_multi_support_on()) 00034 00035 C turn off support for multi fields messages */ 00036 C call grib_check(grib_multi_support_off()) 00037 00038 C Loop on all the messages in a file. 00039 10 iret=grib_new_from_file(ifile,igrib) 00040 if (igrib .eq. -1 ) then 00041 if (iret .ne.0) then 00042 call grib_check(iret) 00043 endif 00044 stop 00045 endif 00046 00047 C get as a integer*4 00048 call grib_check(grib_get_int(igrib,'discipline',discipline)) 00049 write(*,*) 'discipline=',discipline 00050 00051 C get as a integer*4 00052 call grib_check(grib_get_int(igrib,'parameterCategory' 00053 X,parameterCategory)) 00054 write(*,*) 'parameterCategory=',parameterCategory 00055 00056 C get as a integer*4 00057 call grib_check(grib_get_int(igrib,'parameterNumber' 00058 X,parameterNumber)) 00059 write(*,*) 'parameterNumber=',parameterNumber 00060 00061 if ( discipline .eq. 0 .and. parameterCategory .eq. 2) then 00062 if (parameterNumber .eq. 2) then 00063 write(*,*) "-------- u -------" 00064 endif 00065 if (parameterNumber .eq. 3) then 00066 write(*,*) "-------- v -------" 00067 endif 00068 endif 00069 00070 goto 10 00071 00072 call grib_check(grib_release(igrib)) 00073 00074 call grib_check(grib_close_file(ifile)) 00075 00076 end 00077