<pre style='color:#000000;background:#ffffff;'><span style='color:#696969; '>!</span>
<span style='color:#696969; '>!Copyright 2005-2015 ECMWF.</span>
<span style='color:#696969; '>!</span>
<span style='color:#696969; '>! This software is licensed under the terms of the Apache Licence Version 2.0</span>
<span style='color:#696969; '>!which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span>
<span style='color:#696969; '>!</span>
<span style='color:#696969; '>! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by</span>
<span style='color:#696969; '>! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.</span>
<span style='color:#696969; '>!</span>
<span style='color:#696969; '>!</span>
<span style='color:#696969; '>! FORTRAN 90 Implementation: bufr_read_temp</span>
<span style='color:#696969; '>!</span>
<span style='color:#696969; '>! Description: how to read levels from TEMP BUFR messages.</span>
<span style='color:#696969; '>!</span>
<span style='color:#696969; '>! Please note that TEMP reports can be encoded in various ways in BUFR. Therefore the code</span>
<span style='color:#696969; '>! below might not work directly for other types of TEMP messages than the one used in the</span>
<span style='color:#696969; '>! example. It is advised to use bufr_dump first to understand the structure of these messages.</span>
<span style='color:#800000; font-weight:bold; '>program</span> bufr_read_temp
<span style='color:#800000; font-weight:bold; '>use</span> eccodes
<span style='color:#800000; font-weight:bold; '>implicit</span> none
<span style='color:#800000; font-weight:bold; '>integer</span> <span style='color:#808030; '>::</span> ifile
<span style='color:#800000; font-weight:bold; '>integer</span> <span style='color:#808030; '>::</span> iret<span style='color:#808030; '>,</span>ierr
<span style='color:#800000; font-weight:bold; '>integer</span> <span style='color:#808030; '>::</span> ibufr
<span style='color:#800000; font-weight:bold; '>integer</span> <span style='color:#808030; '>::</span> i<span style='color:#808030; '>,</span> count<span style='color:#808030; '>=</span><span style='color:#008c00; '>0</span>
<span style='color:#800000; font-weight:bold; '>integer</span><span style='color:#808030; '>(</span>kind<span style='color:#808030; '>=</span><span style='color:#008c00; '>4</span><span style='color:#808030; '>)</span><span style='color:#808030; '>,</span><span style='color:#800000; font-weight:bold; '>dimension</span><span style='color:#808030; '>(</span>:<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span> <span style='color:#800000; font-weight:bold; '>allocatable</span> <span style='color:#808030; '>::</span> timePeriod<span style='color:#808030; '>,</span>extendedVerticalSoundingSignificance
<span style='color:#800000; font-weight:bold; '>integer</span><span style='color:#808030; '>(</span>kind<span style='color:#808030; '>=</span><span style='color:#008c00; '>4</span><span style='color:#808030; '>)</span> <span style='color:#808030; '>::</span> blockNumber<span style='color:#808030; '>,</span>stationNumber<span style='color:#808030; '>,</span>numberOfLevels
<span style='color:#800000; font-weight:bold; '>character</span><span style='color:#808030; '>(</span>len<span style='color:#808030; '>=</span><span style='color:#008c00; '>30</span><span style='color:#808030; '>)</span> <span style='color:#808030; '>::</span> str
<span style='color:#800000; font-weight:bold; '>real</span><span style='color:#808030; '>(</span>kind<span style='color:#808030; '>=</span><span style='color:#008c00; '>8</span><span style='color:#808030; '>)</span><span style='color:#808030; '>,</span><span style='color:#800000; font-weight:bold; '>dimension</span><span style='color:#808030; '>(</span>:<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span> <span style='color:#800000; font-weight:bold; '>allocatable</span> <span style='color:#808030; '>::</span> pressure<span style='color:#808030; '>,</span>airTemperature<span style='color:#808030; '>,</span>dewpointTemperature
<span style='color:#800000; font-weight:bold; '>real</span><span style='color:#808030; '>(</span>kind<span style='color:#808030; '>=</span><span style='color:#008c00; '>8</span><span style='color:#808030; '>)</span><span style='color:#808030; '>,</span><span style='color:#800000; font-weight:bold; '>dimension</span><span style='color:#808030; '>(</span>:<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span> <span style='color:#800000; font-weight:bold; '>allocatable</span> <span style='color:#808030; '>::</span> geopotentialHeight<span style='color:#808030; '>,</span>latitudeDisplacement<span style='color:#808030; '>,</span>longitudeDisplacement
<span style='color:#800000; font-weight:bold; '>real</span><span style='color:#808030; '>(</span>kind<span style='color:#808030; '>=</span><span style='color:#008c00; '>8</span><span style='color:#808030; '>)</span><span style='color:#808030; '>,</span><span style='color:#800000; font-weight:bold; '>dimension</span><span style='color:#808030; '>(</span>:<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span> <span style='color:#800000; font-weight:bold; '>allocatable</span> <span style='color:#808030; '>::</span> windDirection<span style='color:#808030; '>,</span>windSpeed
<span style='color:#800000; font-weight:bold; '>character</span><span style='color:#808030; '>(</span>len<span style='color:#808030; '>=</span><span style='color:#008c00; '>128</span><span style='color:#808030; '>)</span> <span style='color:#808030; '>::</span> keyName
<span style='color:#800000; font-weight:bold; '>call</span> codes_open_file<span style='color:#808030; '>(</span>ifile<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'PraticaTemp.bufr'</span><span style='color:#808030; '>,</span><span style='color:#0000e6; '>'r'</span><span style='color:#808030; '>)</span>
<span style='color:#696969; '>!call codes_open_file(ifile,'temp.bufr','r')</span>
<span style='color:#696969; '>! the first bufr message is loaded from file</span>
<span style='color:#696969; '>! ibufr is the bufr id to be used in subsequent calls</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_bufr_new_from_file<span style='color:#808030; '>(</span>ifile<span style='color:#808030; '>,</span>ibufr<span style='color:#808030; '>,</span>iret<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>do</span> <span style='color:#800000; font-weight:bold; '>while</span> <span style='color:#808030; '>(</span>iret<span style='color:#808030; '>/</span><span style='color:#808030; '>=</span>CODES_END_OF_FILE<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>write</span><span style='color:#808030; '>(</span><span style='color:#808030; '>*</span><span style='color:#808030; '>,</span><span style='color:#808030; '>*</span><span style='color:#808030; '>)</span> <span style='color:#0000e6; '>'message: '</span><span style='color:#808030; '>,</span>count
<span style='color:#800000; font-weight:bold; '>call</span> codes_set<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'unpack'</span><span style='color:#808030; '>,</span><span style='color:#008c00; '>1</span><span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_get<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'timePeriod'</span><span style='color:#808030; '>,</span>timePeriod<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_get<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'pressure'</span><span style='color:#808030; '>,</span>pressure<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_get<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'extendedVerticalSoundingSignificance'</span><span style='color:#808030; '>,</span>extendedVerticalSoundingSignificance<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_get<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'geopotentialHeight'</span><span style='color:#808030; '>,</span>geopotentialHeight<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_get<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'latitudeDisplacement'</span><span style='color:#808030; '>,</span>latitudeDisplacement<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_get<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'longitudeDisplacement'</span><span style='color:#808030; '>,</span>longitudeDisplacement<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_get<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'airTemperature'</span><span style='color:#808030; '>,</span>airTemperature<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_get<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'dewpointTemperature'</span><span style='color:#808030; '>,</span>dewpointTemperature<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_get<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'windDirection'</span><span style='color:#808030; '>,</span>windDirection<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_get<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'windSpeed'</span><span style='color:#808030; '>,</span>windSpeed<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_get<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'blockNumber'</span><span style='color:#808030; '>,</span>blockNumber<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_get<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>,</span><span style='color:#0000e6; '>'stationNumber'</span><span style='color:#808030; '>,</span>stationNumber<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>print</span> <span style='color:#808030; '>*</span><span style='color:#808030; '>,</span><span style='color:#0000e6; '>'station'</span><span style='color:#808030; '>,</span>blockNumber<span style='color:#808030; '>,</span>stationNumber
<span style='color:#800000; font-weight:bold; '>print</span> <span style='color:#808030; '>*</span><span style='color:#808030; '>,</span>'timePeriod pressure geopotentialHeight latitudeDisplacement &
&longitudeDisplacement airTemperature windDirection windSpeed significance'
<span style='color:#800000; font-weight:bold; '>do</span> i<span style='color:#808030; '>=</span><span style='color:#008c00; '>1</span><span style='color:#808030; '>,</span>size<span style='color:#808030; '>(</span>windSpeed<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>write</span><span style='color:#808030; '>(</span><span style='color:#808030; '>*</span><span style='color:#808030; '>,</span><span style='color:#0000e6; '>'(I5,6X,F9.1,2X,F9.2,10X,F8.2,14X,F8.2,16X,F8.2,6X,F8.2,4X,F8.2,4X,I0)'</span><span style='color:#808030; '>)</span> timePeriod<span style='color:#808030; '>(</span>i<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span>pressure<span style='color:#808030; '>(</span>i<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span>&
&geopotentialHeight<span style='color:#808030; '>(</span>i<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span>latitudeDisplacement<span style='color:#808030; '>(</span>i<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span>&
&longitudeDisplacement<span style='color:#808030; '>(</span>i<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span>airTemperature<span style='color:#808030; '>(</span>i<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span>windDirection<span style='color:#808030; '>(</span>i<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span>windSpeed<span style='color:#808030; '>(</span>i<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span>extendedVerticalSoundingSignificance<span style='color:#808030; '>(</span>i<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>enddo</span>
<span style='color:#696969; '>! free arrays </span>
<span style='color:#800000; font-weight:bold; '>deallocate</span><span style='color:#808030; '>(</span>timePeriod<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>deallocate</span><span style='color:#808030; '>(</span>pressure<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>deallocate</span><span style='color:#808030; '>(</span>geopotentialHeight<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>deallocate</span><span style='color:#808030; '>(</span>latitudeDisplacement<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>deallocate</span><span style='color:#808030; '>(</span>longitudeDisplacement<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>deallocate</span><span style='color:#808030; '>(</span>airTemperature<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>deallocate</span><span style='color:#808030; '>(</span>dewpointTemperature<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>deallocate</span><span style='color:#808030; '>(</span>windDirection<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>deallocate</span><span style='color:#808030; '>(</span>windSpeed<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>deallocate</span><span style='color:#808030; '>(</span>extendedVerticalSoundingSignificance<span style='color:#808030; '>)</span>
<span style='color:#696969; '>! release the bufr message</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_release<span style='color:#808030; '>(</span>ibufr<span style='color:#808030; '>)</span>
<span style='color:#696969; '>! load the next bufr message</span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_bufr_new_from_file<span style='color:#808030; '>(</span>ifile<span style='color:#808030; '>,</span>ibufr<span style='color:#808030; '>,</span>iret<span style='color:#808030; '>)</span>
count<span style='color:#808030; '>=</span>count<span style='color:#808030; '>+</span><span style='color:#008c00; '>1</span>
<span style='color:#800000; font-weight:bold; '>end</span> <span style='color:#800000; font-weight:bold; '>do</span>
<span style='color:#696969; '>! close file </span>
<span style='color:#800000; font-weight:bold; '>call</span> codes_close_file<span style='color:#808030; '>(</span>ifile<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>end</span> <span style='color:#800000; font-weight:bold; '>program</span> bufr_read_temp
</pre> |