Examples: cleanup

This commit is contained in:
Shahram Najm 2021-11-30 13:01:07 +00:00
parent 53a870d67b
commit 25b20cec5f
34 changed files with 91 additions and 121 deletions

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 Implementation: bufr_attributes
!
! Description: How to read attributes of keys in BUFR messages.
!
@ -25,8 +24,8 @@ program bufr_attributes
call codes_open_file(ifile, '../../data/bufr/syno_multi.bufr', 'r')
! the first BUFR message is loaded from file
! ibufr is the BUFR id to be used in subsequent calls
! the first BUFR message is loaded from file
! ibufr is the BUFR id to be used in subsequent calls
call codes_bufr_new_from_file(ifile, ibufr, iret)
do while (iret /= CODES_END_OF_FILE)
@ -38,8 +37,8 @@ program bufr_attributes
! i.e. unpack the data values
call codes_set(ibufr, "unpack", 1);
! ----------------------------------------------------------------
! We will read the value and all the attributes available for
! the 2m temperature.
! We will read the value and all the attributes available for
! the 2m temperature.
! ----------------------------------------------------------------
! Get the element's value as as real
@ -67,9 +66,9 @@ program bufr_attributes
write (*, *) ' airTemperatureAt2M->width:', iVal
! -------------------------------------------------------------------
! The 2m temperature data element in this message has an associated
! field: percentConfidence. Its value and attributes can be accessed
! in a similar manner as was shown above for 2m temperature.
! The 2m temperature data element in this message has an associated
! field: percentConfidence. Its value and attributes can be accessed
! in a similar manner as was shown above for 2m temperature.
! -------------------------------------------------------------------
! Get the element's value as as real

View File

@ -6,7 +6,6 @@
! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
! FORTRAN 90 implementation: bufr_clone
!
! Description: How to create a new BUFR message by cloning
! an existing message.

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 implementation: bufr_copy_data
!
! Description: How to copy all the values in the data section that are present in the same
! position in the data tree and with the same number of values to the output handle

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 Implementation: bufr_expanded
!
! Description: How to read all the expanded data values from BUFR messages.
!

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 Implementation: bufr_get_keys
!
! Description: How to read values of different type of keys from BUFR messages.
!

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 Implementation: bufr_get_string_array
!
! Description: How to get an array of strings from a BUFR message.

View File

@ -7,8 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 implementation: bufr_keys_iterator
!
!
! Description: How to use keys_iterator functions and the
! codes_bufr_keys_iterator structure to get all the available

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 implementation: bufr_read_header
!
! Description: How to read the header of BUFR messages.
!

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 Implementation: bufr_read_scatterometer
!
! Description: How to read data for a given beam from scatterometer BUFR messages.
!

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 Implementation: bufr_read_synop
!
! Description: How to read SYNOP BUFR messages.

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 Implementation: bufr_read_temp
!
! Description: How to read levels from TEMP BUFR messages.
!

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 Implementation: bufr_read_tropical_cyclone
!
! Description: How to read data for a tropical cyclone BUFR message.
!

View File

@ -6,7 +6,6 @@
! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
! FORTRAN 90 implementation: bufr_set_keys
!
! Description: How to set different type of keys in BUFR messages.
!

View File

@ -7,8 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 implementation: bufr_subset
!
! Description: how to read data values from a given subset of a BUFR message.
!
!
@ -22,7 +20,7 @@ program bufr_subset
integer(kind=4) :: numberOfSubsets
integer(kind=4) :: blockNumber, stationNumber
character(100) :: key
!real(kind=8) :: t2m
!real(kind=8) :: t2m
call codes_open_file(ifile, '../../data/bufr/synop_multi_subset.bufr', 'r')

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 Implementation: get_product_kind
!
! Description: how to process a file containing a mix of messages
! and print the kind of product (e.g. GRIB, BUFR etc)

View File

@ -7,8 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! FORTRAN 90 Implementation: grib_clone
!
! Description: How to create a new GRIB message by cloning
! an existing message.
!

View File

@ -36,7 +36,7 @@ program get
allocate (igrib(n))
igrib = -1
! Load the messages from the file.
! load the messages from the file.
DO i = 1, n
call codes_grib_new_from_file(ifile, igrib(i), iret)
END DO
@ -44,49 +44,49 @@ program get
! we can close the file
call codes_close_file(ifile)
! Loop on all the messages in memory
! loop on all the messages in memory
DO i = 1, n
write (*, *) 'processing message number ', i
! get as a integer
! get as a integer
call codes_get(igrib(i), 'Ni', numberOfPointsAlongAParallel)
write (*, *) 'numberOfPointsAlongAParallel=', &
numberOfPointsAlongAParallel
! get as a integer
! get as a integer
call codes_get(igrib(i), 'Nj', numberOfPointsAlongAMeridian)
write (*, *) 'numberOfPointsAlongAMeridian=', &
numberOfPointsAlongAMeridian
! get as a real
! get as a real
call codes_get(igrib(i), 'latitudeOfFirstGridPointInDegrees', &
latitudeOfFirstPointInDegrees)
write (*, *) 'latitudeOfFirstGridPointInDegrees=', &
latitudeOfFirstPointInDegrees
! get as a real
! get as a real
call codes_get(igrib(i), 'longitudeOfFirstGridPointInDegrees', &
longitudeOfFirstPointInDegrees)
write (*, *) 'longitudeOfFirstGridPointInDegrees=', &
longitudeOfFirstPointInDegrees
! get as a real
! get as a real
call codes_get(igrib(i), 'latitudeOfLastGridPointInDegrees', &
latitudeOfLastPointInDegrees)
write (*, *) 'latitudeOfLastGridPointInDegrees=', &
latitudeOfLastPointInDegrees
! get as a real
! get as a real
call codes_get(igrib(i), 'longitudeOfLastGridPointInDegrees', &
longitudeOfLastPointInDegrees)
write (*, *) 'longitudeOfLastGridPointInDegrees=', &
longitudeOfLastPointInDegrees
! get the size of the values array
! get the size of the values array
call codes_get_size(igrib(i), 'values', numberOfValues)
write (*, *) 'numberOfValues=', numberOfValues
allocate (values(numberOfValues), stat=iret)
! get data values
! get data values
call codes_get(igrib(i), 'values', values)
call codes_get(igrib(i), 'min', min_val) ! can also be obtained through minval(values)
call codes_get(igrib(i), 'max', max_val) ! can also be obtained through maxval(values)

View File

@ -20,16 +20,13 @@ program get_data
integer(4) :: numberOfPoints
logical :: is_missing_value
integer :: count1 = 0, count2 = 0, bitmapPresent = 0, bmp_len = 0
! Message identifier.
integer :: igrib
integer :: igrib ! message identifier
ifile = 5
call codes_open_file(ifile, &
'../../data/reduced_latlon_surface.grib1', 'R')
call codes_open_file(ifile, '../../data/reduced_latlon_surface.grib1', 'r')
! Loop on all the messages in a file.
! loop on all the messages in a file.
call codes_grib_new_from_file(ifile, igrib, iret)
do while (iret /= CODES_END_OF_FILE)
@ -51,12 +48,12 @@ program get_data
call codes_grib_get_data(igrib, lats, lons, values)
do i = 1, numberOfPoints
! Consult bitmap to see if the i'th value is missing
! consult bitmap to see if the i'th value is missing
is_missing_value = .false.
if (bitmapPresent == 1 .and. bitmap(i) == 0) then
is_missing_value = .true.
end if
! Only print non-missing values
! only print non-missing values
if (.not. is_missing_value) then
print *, lats(i), lons(i), values(i)
count2 = count2 + 1

View File

@ -29,22 +29,21 @@ program grib_get_keys
integer :: is_missing
character(len=10) :: open_mode = 'r'
call codes_open_file(ifile, &
'../../data/reduced_latlon_surface.grib1', open_mode)
call codes_open_file(ifile, '../../data/reduced_latlon_surface.grib1', open_mode)
! Loop on all the messages in a file.
! loop on all the messages in a file.
! A new GRIB message is loaded from file
! a new GRIB message is loaded from file
! igrib is the grib id to be used in subsequent calls
call codes_grib_new_from_file(ifile, igrib, iret)
LOOP: DO WHILE (iret /= CODES_END_OF_FILE)
! Check if the value of the key is MISSING
! check if the value of the key is MISSING
is_missing = 0;
call codes_is_missing(igrib, 'Ni', is_missing);
if (is_missing /= 1) then
! Key value is not missing so get as an integer
! key value is not missing so get as an integer
call codes_get(igrib, 'Ni', numberOfPointsAlongAParallel)
write (*, *) 'numberOfPointsAlongAParallel=', &
numberOfPointsAlongAParallel
@ -52,41 +51,41 @@ program grib_get_keys
write (*, *) 'numberOfPointsAlongAParallel is missing'
end if
! Get as an integer
! get as an integer
call codes_get(igrib, 'Nj', numberOfPointsAlongAMeridian)
write (*, *) 'numberOfPointsAlongAMeridian=', &
numberOfPointsAlongAMeridian
! Get as a real
! get as a real
call codes_get(igrib, 'latitudeOfFirstGridPointInDegrees', &
latitudeOfFirstPointInDegrees)
write (*, *) 'latitudeOfFirstGridPointInDegrees=', &
latitudeOfFirstPointInDegrees
! Get as a real
! get as a real
call codes_get(igrib, 'longitudeOfFirstGridPointInDegrees', &
longitudeOfFirstPointInDegrees)
write (*, *) 'longitudeOfFirstGridPointInDegrees=', &
longitudeOfFirstPointInDegrees
! Get as a real
! get as a real
call codes_get(igrib, 'latitudeOfLastGridPointInDegrees', &
latitudeOfLastPointInDegrees)
write (*, *) 'latitudeOfLastGridPointInDegrees=', &
latitudeOfLastPointInDegrees
! Get as a real
! get as a real
call codes_get(igrib, 'longitudeOfLastGridPointInDegrees', &
longitudeOfLastPointInDegrees)
write (*, *) 'longitudeOfLastGridPointInDegrees=', &
longitudeOfLastPointInDegrees
! Get the size of the values array
! get the size of the values array
call codes_get_size(igrib, 'values', numberOfValues)
write (*, *) 'numberOfValues=', numberOfValues
allocate (values(numberOfValues), stat=iret)
! Get data values
! get data values
call codes_get(igrib, 'values', values)
call codes_get(igrib, 'min', min_val) ! can also be obtained through minval(values)
call codes_get(igrib, 'max', max_val) ! can also be obtained through maxval(values)

View File

@ -18,8 +18,7 @@ program grib_get_pv
integer :: PVPresent, nb_pv
real, dimension(:), allocatable :: pv
call codes_open_file(infile, &
'../../data/reduced_gaussian_model_level.grib1', 'r')
call codes_open_file(infile, '../../data/reduced_gaussian_model_level.grib1', 'r')
! A new grib message is loaded from file
! igrib is the grib id to be used in subsequent calls

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
!
! Description: How to create a multi-field message in memory and write
! it to a file. The multi-field messages can be created
! only in GRIB edition 2.

View File

@ -7,8 +7,7 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
! Description: How to control decimal precision when packing fields.
!
! Description: How to control decimal precision when packing GRIB fields.
!
!
!
@ -30,34 +29,33 @@ program precision
call codes_open_file(outfile, &
'../../data/regular_latlon_surface_prec.grib1', 'w')
! a new grib message is loaded from file
! igrib is the grib id to be used in subsequent calls
! a new grib message is loaded from file
! igrib is the grib id to be used in subsequent calls
call codes_grib_new_from_file(infile, igrib)
! bitsPerValue before changing the packing parameters
! bitsPerValue before changing the packing parameters
call codes_get(igrib, 'bitsPerValue', bitsPerValue1)
! get the size of the values array
! get the size of the values array
call codes_get_size(igrib, "values", size1)
allocate (values1(size1), stat=iret)
allocate (values2(size1), stat=iret)
! get data values before changing the packing parameters*/
! get data values before changing the packing parameters*/
call codes_get(igrib, "values", values1)
! setting decimal precision=2 means that 2 decimal digits
! are preserved when packing.
! setting decimal precision=2 means that 2 decimal digits
! are preserved when packing.
decimalPrecision = 2
call codes_set(igrib, "changeDecimalPrecision", &
decimalPrecision)
call codes_set(igrib, "changeDecimalPrecision", decimalPrecision)
! bitsPerValue after changing the packing parameters
! bitsPerValue after changing the packing parameters
call codes_get(igrib, "bitsPerValue", bitsPerValue2)
! get data values after changing the packing parameters
! get data values after changing the packing parameters
call codes_get(igrib, "values", values2)
! computing error
! computing error
maxa = 0
maxr = 0
maxv = values2(1)
@ -80,7 +78,7 @@ program precision
write (*, *) "old number of bits per value=", bitsPerValue1
write (*, *) "new number of bits per value=", bitsPerValue2
! write modified message to a file
! write modified message to a file
call codes_write(igrib, outfile)
call codes_release(igrib)

View File

@ -10,7 +10,6 @@
! Description: Prints all the data contained in a GRIB file
!
!
!
program print_data
use eccodes
implicit none
@ -24,17 +23,16 @@ program print_data
real(kind=8) :: the_max
real(kind=8) :: the_min
call codes_open_file(ifile, &
'../../data/constant_field.grib1', 'r')
call codes_open_file(ifile, '../../data/constant_field.grib1', 'r')
! A new GRIB message is loaded from file
! a new GRIB message is loaded from file
! igrib is the grib id to be used in subsequent calls
call codes_grib_new_from_file(ifile, igrib)
! Get the size of the values array
! get the size of the values array
call codes_get_size(igrib, 'values', numPoints)
! Get data values
! get data values
print *, 'number of points ', numPoints
allocate (values(numPoints), stat=iret)

View File

@ -28,13 +28,13 @@ program print_data
'../../data/regular_latlon_surface_constant.grib1', 'r')
! A new GRIB message is loaded from file
! igrib is the grib id to be used in subsequent calls
! igrib is the GRIB id to be used in subsequent calls
call grib_new_from_file(ifile, igrib)
! Get the size of the values array
! get the size of the values array
call grib_get_size(igrib, 'values', numPoints)
! Get data values
! get data values
print *, 'number of points ', numPoints
call grib_get(igrib, 'values', values_static)

View File

@ -20,7 +20,7 @@ program grib_read_from_file_example
99186, 97517, 97466, 99307, 98460, 101491, 99361, 100292, 96838, &
91093, 83247, 78244, 74872, 72663, 69305, 69881, 68572/)
! Get the grib message length using two different interfaces
! get the GRIB message length using two different interfaces
call read_using_size_t()
call read_using_integer()
print *, 'Passed'

View File

@ -20,16 +20,16 @@ program grib_read_message
call codes_open_file(ifile, '../../data/index.grib', 'r')
call codes_open_file(ofile, 'out.readmsg.grib', 'w')
! a grib message is read from file into buffer
! a GRIB message is read from file into buffer
len1 = size(buffer)*4
call codes_read_from_file(ifile, buffer, len1, iret)
do while (iret /= CODES_END_OF_FILE)
! a new grib message is created from buffer
! a new GRIB message is created from buffer
call codes_new_from_message(igrib, buffer)
! get as a integer
! get as a integer
call codes_get(igrib, 'step', step)
write (*, *) 'step=', step
@ -40,7 +40,7 @@ program grib_read_message
call codes_write_bytes(ofile, buffer, len1)
! a grib message is read from file into buffer
! a message is read from file into buffer
len1 = size(buffer)*4
call codes_read_from_file(ifile, buffer, len1, iret)

View File

@ -29,7 +29,7 @@ program sample
indicatorOfParameter = 61
decimalPrecision = 2
! A new grib message is loaded from an existing sample.
! a new GRIB message is loaded from an existing sample.
! Samples are searched in a default sample path (use codes_info
! to see where that is). The default sample path can be changed by
! setting the environment variable ECCODES_SAMPLES_PATH

View File

@ -7,7 +7,6 @@
! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
!
!
!
! Description: How to set a bitmap in a GRIB message
! to encode missing values in the data
!
@ -34,11 +33,11 @@ program set_bitmap
call codes_open_file(outfile, 'out.set_bitmap_f.grib', 'w')
! A new grib message is loaded from file
! igrib is the grib id to be used in subsequent calls
! a new GRIB message is loaded from file
! igrib is the GRIB id to be used in subsequent calls
call codes_grib_new_from_file(infile, igrib)
! The missingValue is not coded in the message.
! the missingValue is not coded in the message.
! It is a value we define as a placeholder for a missing value
! at a point in the grid.
! It should be chosen so that it cannot be confused

View File

@ -25,15 +25,15 @@ program set_data
call getarg(1, outfile_name)
call codes_open_file(outfile, outfile_name, 'w')
! Note: the full name of the sample file is "regular_ll_pl_grib1.tmpl"
! Sample files are stored in the samples directory (use codes_info to
! see where that is). The default sample path can be changed by
! note: the full name of the sample file is "regular_ll_pl_grib1.tmpl"
! sample files are stored in the samples directory (use codes_info to
! see where that is). The default sample path can be changed by
! setting the environment variable ECCODES_SAMPLES_PATH
call codes_grib_new_from_samples(igrib, 'regular_ll_pl_grib1')
! Here we're changing the data values only, so the number of values
! here we're changing the data values only, so the number of values
! will be the same as the sample GRIB.
! But if your data array has a different size, then specify the grid geometry
! but if your data array has a different size, then specify the grid geometry
! (e.g. keys Ni, Nj etc) and set the correct number of data values
call codes_get_size(igrib, 'values', numberOfValues)

View File

@ -24,13 +24,13 @@ program set
call codes_grib_new_from_file(infile, igrib)
! Individual ensemble forecast
! individual ensemble forecast
call codes_set(igrib, 'productDefinitionTemplateNumber', 11)
! Select level type as Generalized Vertical Height Coordinate
! select level type as Generalized Vertical Height Coordinate
call codes_set(igrib, 'typeOfLevel', 'generalVertical')
! Now set keys specific to this level type
! now set keys specific to this level type
call codes_set(igrib, 'nlev', 12.21)
call codes_set(igrib, 'numberOfVGridUsed', 13.55)

View File

@ -23,20 +23,20 @@ program set
call codes_open_file(infile, '../../data/regular_latlon_surface_constant.grib1', 'r')
call codes_open_file(outfile, 'out.set.grib1', 'w')
! A new GRIB message is loaded from file
! igrib is the grib id to be used in subsequent calls
! a new GRIB message is loaded from file
! igrib is the GRIB id to be used in subsequent calls
call codes_grib_new_from_file(infile, igrib)
call codes_set(igrib, 'dataDate', date1)
call codes_set(igrib, 'type', marsType)
! set centre as a integer */
! set centre as a integer */
call codes_set(igrib, 'centre', centre)
! Check if it is correct in the actual GRIB message
! check if it is correct in the actual GRIB message
call check_settings(igrib)
! Write modified message to a file
! write modified message to a file
call codes_write(igrib, outfile)
call codes_release(igrib)

View File

@ -34,7 +34,7 @@ program set
call codes_set_missing(igrib, 'scaleFactorOfFirstFixedSurface')
call codes_set_missing(igrib, 'scaledValueOfFirstFixedSurface')
! See GRIB-490
! see GRIB-490
call codes_get(igrib, 'Ni', Ni)
call codes_is_missing(igrib, 'Ni', is_missing)
if (is_missing == 0) then

View File

@ -63,7 +63,7 @@ program grib_set_pv
! write modified message to a file
call codes_write(igrib, outfile)
! Free memory
! free memory
call codes_release(igrib)
deallocate (pv)

View File

@ -28,34 +28,34 @@ program precision
call codes_open_file(outfile, &
'../../data/regular_latlon_surface_prec.grib1', 'w')
! a new grib message is loaded from file
! igrib is the grib id to be used in subsequent calls
! a new grib message is loaded from file
! igrib is the grib id to be used in subsequent calls
call codes_grib_new_from_file(infile, igrib)
! bitsPerValue before changing the packing parameters
! bitsPerValue before changing the packing parameters
call codes_get(igrib, 'bitsPerValue', bitsPerValue1)
! get the size of the values array
! get the size of the values array
call codes_get_size(igrib, "values", size)
allocate (values1(size), stat=iret)
allocate (values2(size), stat=iret)
! get data values before changing the packing parameters*/
! get data values before changing the packing parameters*/
call codes_get(igrib, "values", values1)
! setting decimal precision=2 means that 2 decimal digits
! are preserved when packing.
! setting decimal precision=2 means that 2 decimal digits
! are preserved when packing.
decimalPrecision = 2
call codes_set(igrib, "setDecimalPrecision", &
decimalPrecision)
! bitsPerValue after changing the packing parameters
! bitsPerValue after changing the packing parameters
call codes_get(igrib, "bitsPerValue", bitsPerValue2)
! get data values after changing the packing parameters
! get data values after changing the packing parameters
call codes_get(igrib, "values", values2)
! computing error
! computing error
maxa = 0
maxr = 0
maxv = values2(1)
@ -78,7 +78,7 @@ program precision
write (*, *) "old number of bits per value=", bitsPerValue1
write (*, *) "new number of bits per value=", bitsPerValue2
! write modified message to a file
! write modified message to a file
call codes_write(igrib, outfile)
call codes_release(igrib)