diff --git a/.appveyor.yml b/.appveyor.yml index f3d062de1..bc8a8826f 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -52,7 +52,7 @@ install: m2w64-ntldd-git # get deps. Drop libnetcdf - - cmd: conda install -c conda-forge cmake + - cmd: conda install -c conda-forge cmake libaec #---------------------------------# # build configuration # @@ -64,6 +64,9 @@ platform: before_build: - cmd: call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 +# Building with libaec fails. When any executable runs, we get: +# error while loading shared libraries: ?: cannot open shared object file: No such file or directory +# So we have to disable AEC build_script: - cmd: cd %ECCODES_SRC% - cmd: mkdir build && cd build diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index d114942b6..082dab058 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -69,6 +69,8 @@ jobs: secrets: url_debian_11: ${{ secrets.NEXUS_TEST_REPO_NIGHTLY_URL_DEBIAN_11 }} token_debian_11: ${{ secrets.NEXUS_TEST_REPO_UPLOAD_TOKEN }} + url_debian_12: ${{ secrets.NEXUS_TEST_REPO_URL_DEBIAN_12 }} + token_debian_12: ${{ secrets.NEXUS_TEST_REPO_UPLOAD_TOKEN }} url_centos_7: ${{ secrets.NEXUS_TEST_REPO_NIGHTLY_URL_CENTOS_7 }} token_centos_7: ${{ secrets.NEXUS_TEST_REPO_UPLOAD_TOKEN }} url_rocky_8: ${{ secrets.NEXUS_TEST_REPO_NIGHTLY_URL_ROCKY_8 }} diff --git a/AUTHORS b/AUTHORS index c0f36b955..1d3efe675 100755 --- a/AUTHORS +++ b/AUTHORS @@ -4,6 +4,8 @@ Enrico Fucile Pedro Maciel Sandor Kertesz Sebastien Villaume +Robert Osinski +Matthew Griffith Florian Rathgeber Baudouin Raoult Cristian Codorean diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e5290fa0..05bd33688 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,16 @@ cmake_minimum_required( VERSION 3.12 FATAL_ERROR ) -find_package( ecbuild 3.7 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild) +find_package( ecbuild 3.7 HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild) +if(NOT ecbuild_FOUND) + message(STATUS "Fetching ecbuild...") + include(FetchContent) + FetchContent_Populate(ecbuild + GIT_REPOSITORY https://github.com/ecmwf/ecbuild.git + GIT_TAG 3.8.5 + ) + find_package( ecbuild 3.7 REQUIRED HINTS ${ecbuild_SOURCE_DIR}) +endif() # Initialise project project( eccodes LANGUAGES CXX ) @@ -425,7 +434,10 @@ endforeach() ### include directories -include_directories( ${ECCODES_INCLUDE_DIRS} ${ECCODES_EXTRA_INCLUDE_DIRS} ) +include_directories( + ${ECCODES_INCLUDE_DIRS} + ${ECCODES_EXTRA_INCLUDE_DIRS} + ) add_subdirectory( definitions ) # must be before memfs add_subdirectory( memfs ) @@ -508,11 +520,8 @@ ecbuild_info(" | ecCodes version ${eccodes_VERSION} |") ecbuild_info(" +--------------------------+") ecbuild_info("") -ecbuild_info(" +--------------------------------------+") -ecbuild_info(" | Please note: |") -ecbuild_info(" | For Python3 support, first install |") -ecbuild_info(" | ecCodes and then install the Python |") -ecbuild_info(" | bindings from PyPI with: |") -ecbuild_info(" | $ pip3 install eccodes |") -ecbuild_info(" +--------------------------------------+") +ecbuild_info("Please note:") +ecbuild_info(" For Python3 support, you must install the Python bindings.") +ecbuild_info(" See:") +ecbuild_info(" https://confluence.ecmwf.int/display/ECC/ecCodes+installation") ecbuild_info("") diff --git a/VERSION b/VERSION index c94fd315f..cde8adf34 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.37.0 +2.39.0 diff --git a/data/bitmap.diff b/data/bitmap.diff index 918301a75..b6c80dc1b 100644 --- a/data/bitmap.diff +++ b/data/bitmap.diff @@ -16,7 +16,6 @@ GRIB { subCentre = 0; paramId = 130; #-READ ONLY- cfName = air_temperature; - #-READ ONLY- cfVarName = t; #-READ ONLY- units = K; #-READ ONLY- name = Temperature; decimalScaleFactor = 0; @@ -40,6 +39,7 @@ GRIB { perturbationNumber = 0; numberOfForecastsInEnsemble = 0; shortName = t; + #-READ ONLY- cfVarName = t; GDSPresent = 1; bitmapPresent = 1; numberOfVerticalCoordinateValues = 184; diff --git a/data/no_bitmap.diff b/data/no_bitmap.diff index f8d8ae331..a8a705eef 100644 --- a/data/no_bitmap.diff +++ b/data/no_bitmap.diff @@ -16,7 +16,6 @@ GRIB { subCentre = 0; paramId = 130; #-READ ONLY- cfName = air_temperature; - #-READ ONLY- cfVarName = t; #-READ ONLY- units = K; #-READ ONLY- name = Temperature; decimalScaleFactor = 0; @@ -40,6 +39,7 @@ GRIB { perturbationNumber = 0; numberOfForecastsInEnsemble = 0; shortName = t; + #-READ ONLY- cfVarName = t; GDSPresent = 1; bitmapPresent = 0; numberOfVerticalCoordinateValues = 184; diff --git a/definitions/boot.def b/definitions/boot.def index bb8991382..25b3f895d 100644 --- a/definitions/boot.def +++ b/definitions/boot.def @@ -12,7 +12,8 @@ constant internalVersion=30 : hidden; meta checkInternalVersion check_internal_version(internalVersion) : hidden; # ECC-806: Local concepts precedence order -transient preferLocalConcepts = 0 : hidden; +preferLocalConceptsEnvVar = getenv("ECCODES_GRIB_PREFER_LOCAL_CONCEPTS","0") : hidden; +transient preferLocalConcepts = preferLocalConceptsEnvVar : hidden; constant defaultTypeOfLevel="unknown" : hidden; diff --git a/definitions/bufr/rdb_key.def b/definitions/bufr/rdb_key.def index eea896d3e..a32343acb 100644 --- a/definitions/bufr/rdb_key.def +++ b/definitions/bufr/rdb_key.def @@ -1,4 +1,5 @@ # RDB stands for REPORT DATA BASE +# See https://confluence.ecmwf.int/pages/viewpage.action?pageId=24316441 unsigned[1] rdbType : dump; unsigned[1] oldSubtype: dump; diff --git a/definitions/bufr/section.3.def b/definitions/bufr/section.3.def index d223bbbb2..56fa58ad1 100644 --- a/definitions/bufr/section.3.def +++ b/definitions/bufr/section.3.def @@ -50,7 +50,7 @@ unsigned[1] reservedSection3 = 0; unsigned[2] numberOfSubsets : dump; alias ls.numberOfSubsets=numberOfSubsets; -if (section2Present && bufrHeaderCentre==98 && section2Length==52) { +if (section2Present && bufrHeaderCentre == 98 && section2Length == 52) { if ( rdbType == 2 || rdbType == 3 || rdbType == 8 || rdbType == 12 || rdbType == 30 ) { transient isSatelliteType=1; } else { @@ -69,10 +69,11 @@ if (section2Present && bufrHeaderCentre==98 && section2Length==52) { meta localLatitude2 bits(keyMore,32,25,-9000000,100000) : dump,no_copy; # This rule is taken from BUFRDC. See bufrdc_wmo/buukey.F - # Also see ECC-686 - if (oldSubtype == 255 || numberOfSubsets>255 || - ( oldSubtype>=121 && oldSubtype <=130 ) || - oldSubtype==31) { + # See ECC-686 + # and https://confluence.ecmwf.int/pages/viewpage.action?pageId=24316441 + if (oldSubtype == 255 || numberOfSubsets > 255 || + ( oldSubtype >= 121 && oldSubtype <= 130 ) || + oldSubtype == 31) { meta ls.localNumberOfObservations bits(keySat,0,16) : dump,long_type,no_copy; meta ls.satelliteID bits(keySat,16,16) : dump,long_type,no_copy; } else { @@ -114,16 +115,16 @@ meta bufrdcExpandedDescriptors bufrdc_expanded_descriptors(expandedCodes) : no_c #smart_table NAME (VALUES,FILE_NAME,MASTER_DIRECTORY,LOCAL_DIRECTORY,WIDTH_OF_CODE_IN_BITS,EXTRA_DIRECTORY,EXTRA_FILE_NAME); #Note: The WIDTH_OF_CODE_IN_BITS has to be big enough so 2^width > the highest BUFR descriptor code smart_table expandedOriginalCodes (expandedCodes,"element.table",tablesMasterDir,tablesLocalDir,18,rootTablesDir,"operators.table") :no_copy; -meta expandedAbbreviations smart_table_column(expandedOriginalCodes,0,1) : string_type,no_copy; -meta expandedTypes smart_table_column(expandedOriginalCodes,1,0) : string_type,no_copy; -meta expandedNames smart_table_column(expandedOriginalCodes,2,0) : string_type,no_copy; -meta expandedUnits smart_table_column(expandedOriginalCodes,3,0) : string_type,no_copy; -meta expandedOriginalScales smart_table_column(expandedOriginalCodes,4,0) : long_type,no_copy; -meta expandedOriginalReferences smart_table_column(expandedOriginalCodes,5,0) : long_type,no_copy; -meta expandedOriginalWidths smart_table_column(expandedOriginalCodes,6,0) : long_type,no_copy; -meta expandedCrex_units smart_table_column(expandedOriginalCodes,7,0) : long_type,no_copy; -meta expandedCrex_scales smart_table_column(expandedOriginalCodes,8,0) : long_type,no_copy; -meta expandedCrex_widths smart_table_column(expandedOriginalCodes,9,0) : long_type,no_copy; +meta expandedAbbreviations smart_table_column(expandedOriginalCodes,0,1) : string_type,no_copy; +meta expandedTypes smart_table_column(expandedOriginalCodes,1,0) : string_type,no_copy; +meta expandedNames smart_table_column(expandedOriginalCodes,2,0) : string_type,no_copy; +meta expandedUnits smart_table_column(expandedOriginalCodes,3,0) : string_type,no_copy; +meta expandedOriginalScales smart_table_column(expandedOriginalCodes,4,0) : long_type,no_copy; +meta expandedOriginalReferences smart_table_column(expandedOriginalCodes,5,0) : long_type,no_copy; +meta expandedOriginalWidths smart_table_column(expandedOriginalCodes,6,0) : long_type,no_copy; +meta expandedCrex_units smart_table_column(expandedOriginalCodes,7,0) : long_type,no_copy; +meta expandedCrex_scales smart_table_column(expandedOriginalCodes,8,0) : long_type,no_copy; +meta expandedCrex_widths smart_table_column(expandedOriginalCodes,9,0) : long_type,no_copy; position endDescriptors; section_padding section3Padding; diff --git a/definitions/bufr/tables/0/local/1/98/0/element.table b/definitions/bufr/tables/0/local/1/98/0/element.table index d38196d6a..ac381eb74 100644 --- a/definitions/bufr/tables/0/local/1/98/0/element.table +++ b/definitions/bufr/tables/0/local/1/98/0/element.table @@ -129,6 +129,7 @@ 013234|snowDepthWaterEquivalentSdGrib|double|SNOW DEPTH (WATER EQUIVALENT SD GRIB)|m|4|0|14|NA|0|0 013240|airDensity|double|AIR DENSITY|kg m-3|3|0|10|NA|0|0 013241|cape|double|CONVECTIVE AVAILABLE POTENTIAL ENERGY|J/kg|1|0|17|NA|0|0 +013242|mucape|long|MOST UNSTABLE CAPE|J/kg|0|0|14|NA|0|0 014200|surfaceSolarRadiationDownwardsSsrdGrib|long|SURFACE SOLAR RADIATION DOWNWARDS (SSRD GRIB)|W m-2 s|-2|0|24|NA|0|0 015202|integratedElectronDensity|double|INTEGRATED ELECTRON DENSITY|m-2|3|13000|12|NA|0|0 015231|atmosphericPathDelayInSatelliteSignal|double|ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL|m|4|0|15|NA|0|0 diff --git a/definitions/bufr/tables/0/local/101/98/0/element.table b/definitions/bufr/tables/0/local/101/98/0/element.table index 5f9b1adf7..b05377149 100644 --- a/definitions/bufr/tables/0/local/101/98/0/element.table +++ b/definitions/bufr/tables/0/local/101/98/0/element.table @@ -110,6 +110,7 @@ 013231|largeScalePrecipitation|double|LARGE SCALE PRECIPITATION|kg m-2|1|-1|14|NA|0|0 013240|airDensity|double|AIR DENSITY|kg m-3|3|0|10|NA|0|0 013241|cape|double|CONVECTIVE AVAILABLE POTENTIAL ENERGY|J/kg|1|0|17|NA|0|0 +013242|mucape|long|MOST UNSTABLE CAPE|J/kg|0|0|14|NA|0|0 015008|significandOfVolumetricMixingRatio|long|(VAL) SCALED VOLUMETRIC MIXING RATIO|Numeric|0|0|24|NA|0|0 015021|integratedMassDensity|long|(VAL) SCALED INTEGRATED MASS DENSITY|kg m-2|0|0|24|NA|0|0 015042|reflectance|long|(VAL) REFLECTANCE|Numeric|6|0|20|NA|0|0 diff --git a/definitions/bufr/tables/3/local/1/98/0/element.table b/definitions/bufr/tables/3/local/1/98/0/element.table index f80a82c2a..2b3f2eb01 100644 --- a/definitions/bufr/tables/3/local/1/98/0/element.table +++ b/definitions/bufr/tables/3/local/1/98/0/element.table @@ -123,6 +123,7 @@ 013234|snowDepthWaterEquivalentSdGrib|double|SNOW DEPTH (WATER EQUIVALENT SD GRIB)|m|4|0|14|NA|0|0 013240|airDensity|double|AIR DENSITY|kg m-3|3|0|10|NA|0|0 013241|cape|double|CONVECTIVE AVAILABLE POTENTIAL ENERGY|J/kg|1|0|17|NA|0|0 +013242|mucape|long|MOST UNSTABLE CAPE|J/kg|0|0|14|NA|0|0 014200|surfaceSolarRadiationDownwardsSsrdGrib|long|SURFACE SOLAR RADIATION DOWNWARDS (SSRD GRIB)|W m-2 s|-2|0|24|NA|0|0 015202|integratedElectronDensity|double|INTEGRATED ELECTRON DENSITY|m-2|3|13000|12|NA|0|0 015231|atmosphericPathDelayInSatelliteSignal|double|ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL|m|4|0|15|NA|0|0 diff --git a/definitions/create_def.pl b/definitions/create_def.pl index 2a76658be..09f46d475 100755 --- a/definitions/create_def.pl +++ b/definitions/create_def.pl @@ -38,7 +38,8 @@ sub create_cfName { attribute.id=grib.attribute_id and centre.id=grib_encoding.centre_id and units.id=param.units_id and - param.id=cf.grib1_ecmwf order by + param.id=cf.grib1_ecmwf and + grib_encoding.is_legacy=0 order by edition,centre_id,param.o,param.id,grib_encoding.param_version,attribute.o; EOF @@ -98,6 +99,83 @@ EOF close(TAR); } +sub create_cfName_legacy { + my $p; my %seen; + my ($key) = "cfName"; + my $field = "cf.name"; + + my $query= <<"EOF"; + select $field,force128,edition, + centre.abbreviation,param_id,attribute.name,attribute_value,param.name,param.shortName from + param,grib_encoding,grib,attribute,centre,units,cf where + param.hide_def=0 and +# param.retired=0 and + grib_encoding.id=grib.encoding_id and + param.id=grib_encoding.param_id and + attribute.id=grib.attribute_id and + centre.id=grib_encoding.centre_id and + units.id=param.units_id and + param.id=cf.grib1_ecmwf and + grib_encoding.is_legacy=1 order by + edition,centre_id,param.o,param.id,grib_encoding.param_version,attribute.o; +EOF + + my $qh=$dbh->prepare($query); + $qh->execute(); + + # file containing the list of grib api parameters files we want to tar and + # distribute to users for them to download and update their list of parameter + # to the latest + #open(TAR,$tarfilesflag ? ">>" : ">","tarfiles.txt") or die "Count not open file tarfiles.txt: $!"; + #$tarfilesflag=1; + + while (my ($keyval,$force128,$edition,$centre,$paramId,$attribute,$value,$name,$shortName)=$qh->fetchrow_array ) + { + if ($centre eq "wmo" ) { $conceptDir=""; } + else { $conceptDir="/localConcepts/$centre"; } + + if ($filebase ne "$basedir/grib$edition$conceptDir") { + if ($filebase) { + print $out "}\n"; + close $out; + } + $filebase="$basedir/grib$edition$conceptDir"; + mkpath($filebase); + + print TAR "grib$edition$conceptDir/$key.legacy.def\n"; + #system("cp -f $filebase/$key.def $filebase/$key.def.orig"); + open($out,"> $filebase/$key.legacy.def") + or die "unable to open $filebase/$key.legacy.def"; + print $out "# Automatically generated by $0, do not edit\n"; + $p=(); + } + if ($p ne $paramId || exists($seen{$attribute}) ) { + if ($p) { print $out "\t}\n"; } + print $out "#$name\n" ; + print $out "\'".$keyval."\' = {\n" ; + $p=$paramId; + %seen=(); + } + $seen{$attribute}=1; + print "($key=$keyval) $edition,$centre,$shortName,$paramId,$name,$attribute,$value\n"; + # we need to allow strings in the attribute_value field + # for the moment we apply a patch here + if ($attribute =~ /stepType/ ) { + $value="\"accum\""; + } + if ($value eq '') { + $value="missing()"; + } + print $out "\t $attribute = $value ;\n" ; + } + if ($filebase) { + print $out "}\n"; + close $out; + } + + close(TAR); +} + sub create_def { my $p; my %seen; my ($key) =@_; @@ -117,7 +195,8 @@ sub create_def { param.id=grib_encoding.param_id and attribute.id=grib.attribute_id and centre.id=grib_encoding.centre_id and - units.id=param.units_id + units.id=param.units_id and + grib_encoding.is_legacy=0 order by edition,centre_id,param.o,param.id,grib_encoding.param_version,attribute.o; EOF @@ -183,29 +262,27 @@ EOF close(TAR); } -# See ECC-1886 -sub create_cfVarName { +sub create_def_legacy { my $p; my %seen; my ($key) =@_; my $field=$key; - #if ($key =~ /paramId/) { $field="param.id"; } - #if ($key =~ /name/) { $field="param.name"; } - #if ($key =~ /units/) { $field="units.name"; } - if ($key =~ /cfVarName/) { $field="cfVarName"; } + if ($key =~ /paramId/) { $field="param.id"; } + if ($key =~ /name/) { $field="param.name"; } + if ($key =~ /units/) { $field="units.name"; } my $query= <<"EOF"; select $field,force128,edition, centre.abbreviation,param_id,attribute.name,attribute_value,param.name,param.shortName from param,grib_encoding,grib,attribute,centre,units where param.hide_def=0 and - param.retired=0 and +# param.retired=0 and grib_encoding.id=grib.encoding_id and param.id=grib_encoding.param_id and attribute.id=grib.attribute_id and centre.id=grib_encoding.centre_id and - units.id=param.units_id - and cfVarName IS NOT NULL + units.id=param.units_id and + grib_encoding.is_legacy=1 order by edition,centre_id,param.o,param.id,grib_encoding.param_version,attribute.o; EOF @@ -237,10 +314,10 @@ EOF #copy("$filebase/$key.def","$filebase/$key.def.bkp") # or die ("unable to copy $filebase/$key.def"); - print TAR "grib$edition$conceptDir/$key.def\n"; + print TAR "grib$edition$conceptDir/$key.legacy.def\n"; #system("cp -f $filebase/$key.def $filebase/$key.def.orig"); - open($out,"> $filebase/$key.def") - or die "unable to open $filebase/$key.def"; + open($out,"> $filebase/$key.legacy.def") + or die "unable to open $filebase/$key.legacy.def"; print $out "# Automatically generated by $0, do not edit\n"; $p=(); } @@ -270,7 +347,7 @@ EOF close(TAR); } - + sub create_paramId_def { my $p; my %seen; @@ -281,7 +358,8 @@ sub create_paramId_def { grib_encoding.id=grib.encoding_id and param.id=grib_encoding.param_id and attribute.id=grib.attribute_id and - centre.id=grib_encoding.centre_id + centre.id=grib_encoding.centre_id and + grib_encoding.is_legacy=0 order by edition,centre_id,param.o,param.id,attribute.o"; my $qh=$dbh->prepare($query); $qh->execute(); @@ -355,13 +433,15 @@ sub create_def_old { } create_def("paramId"); +create_def_legacy("paramId"); create_def("shortName"); +create_def_legacy("shortName"); create_def("name"); +create_def_legacy("name"); create_def("units"); -# Note: The cfVarName.def files are smaller than the rest. We only store the -# minimum set necessary. See ECC-1886 -create_cfVarName("cfVarName"); +create_def_legacy("units"); create_cfName("cfName"); +create_cfName_legacy("cfName"); # #create_paramId_def(); diff --git a/definitions/grib1/boot.def b/definitions/grib1/boot.def index 4dd9e48e0..f8e5b1686 100644 --- a/definitions/grib1/boot.def +++ b/definitions/grib1/boot.def @@ -16,7 +16,7 @@ constant three=1 : hidden; constant eight=8 : hidden; constant eleven=11 : hidden; constant epsPoint=1 : hidden; -constant epsContinous=11 : hidden; +constant epsContinuous=11 : hidden; constant epsStatisticsPoint=2 : hidden; constant epsStatisticsContinous=12 : hidden; @@ -43,10 +43,10 @@ g1_message_length[3] totalLength(section4Length); position startOfHeaders; unsigned[1] editionNumber = 1 : edition_specific,dump; -template section_1 "grib1/section.1.def"; - alias ls.edition = editionNumber; +template section_1 "grib1/section.1.def"; + # Note flagbit numbers 7 to 0, while wmo is 1 to 8 flagbit gridDescriptionSectionPresent(section1Flags,7) = 1; meta GDSPresent gds_is_present(gridDescriptionSectionPresent,gridDefinition,bitmapPresent,values): dump; diff --git a/definitions/grib1/data.grid_simple_matrix.def b/definitions/grib1/data.grid_simple_matrix.def index ae785ed71..b003be853 100644 --- a/definitions/grib1/data.grid_simple_matrix.def +++ b/definitions/grib1/data.grid_simple_matrix.def @@ -114,7 +114,6 @@ if(matrixOfValues == 0) # From GRIBEX: # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -# ! ! # ! This is the WMO definition, but it is entirely ! # ! inadequate when secondary bit maps are present ! # ! eg 3x3 global grid with a matrix of values ! @@ -129,7 +128,6 @@ if(matrixOfValues == 0) # ! missing'). ! # ! This definition will accommodate a 1x1 ! # ! degree global grid. ! -# ! ! # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # constant datumSize = NC*NR; diff --git a/definitions/grib1/gds_not_present_bitmap.def b/definitions/grib1/gds_not_present_bitmap.def index c654b3cbc..f4efc0f5c 100644 --- a/definitions/grib1/gds_not_present_bitmap.def +++ b/definitions/grib1/gds_not_present_bitmap.def @@ -10,10 +10,11 @@ transient numberOfUnusedBitsAtEndOfSection3 = 0 : read_only; transient tableReference = 0; #position offsetBeforeBitmap; -meta bitmap gds_not_present_bitmap( missingValue,numberOfValues, - numberOfPoints, - latitudeOfFirstGridPoint, - Ni,numberOfUnusedBitsAtEndOfSection3) : read_only; +meta bitmap gds_not_present_bitmap( + missingValue,numberOfValues, + numberOfPoints, + latitudeOfFirstGridPoint, + Ni,numberOfUnusedBitsAtEndOfSection3) : read_only; #position offsetAfterBitmap; #padtoeven padding_sec3_1(offsetSection3,section3Length); diff --git a/definitions/grib1/grid_definition_192.78.def b/definitions/grib1/grid_definition_192.78.def index c4689a99a..c6c524b70 100644 --- a/definitions/grib1/grid_definition_192.78.def +++ b/definitions/grib1/grid_definition_192.78.def @@ -40,6 +40,6 @@ transient numberOfPoints= nd *(Ni + 1) * (Ni + 1); alias numberOfDataPoints=numberOfPoints; meta numberOfValues -number_of_values(values,bitsPerValue,numberOfDataPoints, - bitmapPresent,bitmap,numberOfCodedValues) : dump; - +number_of_values( + values,bitsPerValue,numberOfDataPoints, + bitmapPresent,bitmap,numberOfCodedValues) : dump; diff --git a/definitions/grib1/grid_definition_193.98.def b/definitions/grib1/grid_definition_193.98.def index 534c51646..9578e4287 100644 --- a/definitions/grib1/grid_definition_193.98.def +++ b/definitions/grib1/grid_definition_193.98.def @@ -79,11 +79,11 @@ if(missing(Ni)){ nearest latlon_reduced(values,radius,Nj,pl); } else { transient iteratorDisableUnrotate = 0 : hidden; # ECC-808 - iterator latlon(numberOfPoints,missingValue,values,longitudeFirstInDegrees,iInc , - Ni,Nj,iScansNegatively , - latitudeFirstInDegrees,DjInDegrees,jScansPositively,jPointsAreConsecutive, - isRotatedGrid, angleOfRotation, - latitudeOfSouthernPoleInDegrees,longitudeOfSouthernPoleInDegrees); + iterator latlon(numberOfPoints,missingValue,values,longitudeFirstInDegrees,iInc, + Ni,Nj,iScansNegatively, + latitudeFirstInDegrees,DjInDegrees,jScansPositively,jPointsAreConsecutive, + isRotatedGrid, angleOfRotation, + latitudeOfSouthernPoleInDegrees,longitudeOfSouthernPoleInDegrees); nearest regular(values,radius,Ni,Nj); } meta latLonValues latlonvalues(values); diff --git a/definitions/grib1/local.214.1.def b/definitions/grib1/local.214.1.def index 51e0254aa..82ba4e74d 100644 --- a/definitions/grib1/local.214.1.def +++ b/definitions/grib1/local.214.1.def @@ -32,7 +32,7 @@ if (stepType is "instant" ) { } } else { if (numberOfForecastsInEnsemble!=0) { - alias productDefinitionTemplateNumber=epsContinous; + alias productDefinitionTemplateNumber=epsContinuous; } } diff --git a/definitions/grib1/local.34.1.def b/definitions/grib1/local.34.1.def index 078e15cf8..1a96674b4 100644 --- a/definitions/grib1/local.34.1.def +++ b/definitions/grib1/local.34.1.def @@ -40,7 +40,7 @@ if (stepType is "instant" ) { } else { alias typeOfEnsembleForecast=three; } - alias productDefinitionTemplateNumber=epsContinous; + alias productDefinitionTemplateNumber=epsContinuous; } else { alias productDefinitionTemplateNumber=eight; } diff --git a/definitions/grib1/local.98.1.def b/definitions/grib1/local.98.1.def index d908b43ed..a1a5adddf 100644 --- a/definitions/grib1/local.98.1.def +++ b/definitions/grib1/local.98.1.def @@ -41,7 +41,7 @@ if (stepType is "instant" ) { } else { alias typeOfEnsembleForecast=three; } - alias productDefinitionTemplateNumber=epsContinous; + alias productDefinitionTemplateNumber=epsContinuous; } else { alias productDefinitionTemplateNumber=eight; } diff --git a/definitions/grib1/local.98.18.def b/definitions/grib1/local.98.18.def index 2897af593..f51f19970 100644 --- a/definitions/grib1/local.98.18.def +++ b/definitions/grib1/local.98.18.def @@ -10,7 +10,7 @@ constant grib2LocalSectionNumber=18; if (stepType is "instant" ) { alias productDefinitionTemplateNumber=epsPoint; } else { - alias productDefinitionTemplateNumber=epsContinous; + alias productDefinitionTemplateNumber=epsContinuous; } template mars_labeling "grib1/mars_labeling.def"; diff --git a/definitions/grib1/local.98.19.def b/definitions/grib1/local.98.19.def index 7c9a4f613..5e3c27e64 100644 --- a/definitions/grib1/local.98.19.def +++ b/definitions/grib1/local.98.19.def @@ -12,6 +12,7 @@ alias perturbationNumber=number; unsigned[1] ensembleSize : dump; alias totalNumber=ensembleSize; +alias numberOfForecastsInEnsemble=ensembleSize; meta quantile sprintf("%s:%s",number,ensembleSize); diff --git a/definitions/grib1/local.98.218.def b/definitions/grib1/local.98.218.def index c6787e258..872a4e734 100644 --- a/definitions/grib1/local.98.218.def +++ b/definitions/grib1/local.98.218.def @@ -10,7 +10,7 @@ constant grib2LocalSectionNumber=18; if (stepType is "instant" ) { alias productDefinitionTemplateNumber=epsPoint; } else { - alias productDefinitionTemplateNumber=epsContinous; + alias productDefinitionTemplateNumber=epsContinuous; } template mars_labeling "grib1/mars_labeling.def"; diff --git a/definitions/grib1/local.98.26.def b/definitions/grib1/local.98.26.def index 4a9ce6c3e..3c1ad63e0 100644 --- a/definitions/grib1/local.98.26.def +++ b/definitions/grib1/local.98.26.def @@ -14,7 +14,7 @@ constant grib2LocalSectionNumber=26; if (stepType is "instant" ) { alias productDefinitionTemplateNumber=epsPoint; } else { - alias productDefinitionTemplateNumber=epsContinous; + alias productDefinitionTemplateNumber=epsContinuous; } constant wrongPadding=1 : hidden; diff --git a/definitions/grib1/local.98.30.def b/definitions/grib1/local.98.30.def index ee7c46a5e..e19efd77f 100644 --- a/definitions/grib1/local.98.30.def +++ b/definitions/grib1/local.98.30.def @@ -23,7 +23,7 @@ if (stepType is "instant" ) { if (type is "em" || type is "es" ) { alias productDefinitionTemplateNumber=epsStatisticsContinous; } else { - alias productDefinitionTemplateNumber=epsContinous; + alias productDefinitionTemplateNumber=epsContinuous; } } diff --git a/definitions/grib1/local.98.36.def b/definitions/grib1/local.98.36.def index c0b6a1baf..32329c92c 100644 --- a/definitions/grib1/local.98.36.def +++ b/definitions/grib1/local.98.36.def @@ -47,7 +47,7 @@ if (stepType is "instant" ) { } else { alias typeOfEnsembleForecast=three; } - alias productDefinitionTemplateNumber=epsContinous; + alias productDefinitionTemplateNumber=epsContinuous; } else { alias productDefinitionTemplateNumber=eight; } diff --git a/definitions/grib1/localConcepts/ecmf/cfVarName.def b/definitions/grib1/localConcepts/ecmf/cfVarName.def index 306073c90..e36c36372 100644 --- a/definitions/grib1/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib1/localConcepts/ecmf/cfVarName.def @@ -504,13 +504,13 @@ table2Version = 200 ; indicatorOfParameter = 168 ; } -#Mean 2 metre temperature -'mean2t' = { +#Time-mean 2 metre temperature +'avg_2t' = { table2Version = 228 ; indicatorOfParameter = 4 ; } -#Mean of 10 metre wind speed -'mean10ws' = { +#Time-mean 10 metre wind speed +'avg_10ws' = { table2Version = 228 ; indicatorOfParameter = 5 ; } diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def index 86e2052b0..b5a90ffca 100644 --- a/definitions/grib1/localConcepts/ecmf/name.def +++ b/definitions/grib1/localConcepts/ecmf/name.def @@ -10309,203 +10309,203 @@ table2Version = 230 ; indicatorOfParameter = 251 ; } -#Mean surface runoff rate -'Mean surface runoff rate' = { +#Time-mean surface runoff rate +'Time-mean surface runoff rate' = { table2Version = 235 ; indicatorOfParameter = 20 ; } -#Mean sub-surface runoff rate -'Mean sub-surface runoff rate' = { +#Time-mean sub-surface runoff rate +'Time-mean sub-surface runoff rate' = { table2Version = 235 ; indicatorOfParameter = 21 ; } -#Mean surface photosynthetically active radiation flux, clear sky -'Mean surface photosynthetically active radiation flux, clear sky' = { +#Time-mean surface photosynthetically active radiation flux, clear sky +'Time-mean surface photosynthetically active radiation flux, clear sky' = { table2Version = 235 ; indicatorOfParameter = 22 ; } -#Mean snow evaporation rate -'Mean snow evaporation rate' = { +#Time-mean snow evaporation rate water equivalent +'Time-mean snow evaporation rate water equivalent' = { table2Version = 235 ; indicatorOfParameter = 23 ; } -#Mean snowmelt rate -'Mean snowmelt rate' = { +#Time-mean snow melt rate +'Time-mean snow melt rate' = { table2Version = 235 ; indicatorOfParameter = 24 ; } -#Mean magnitude of turbulent surface stress -'Mean magnitude of turbulent surface stress' = { +#Time-mean magnitude of turbulent surface stress +'Time-mean magnitude of turbulent surface stress' = { table2Version = 235 ; indicatorOfParameter = 25 ; } -#Mean large-scale precipitation fraction -'Mean large-scale precipitation fraction' = { +#Time-mean large-scale precipitation fraction +'Time-mean large-scale precipitation fraction' = { table2Version = 235 ; indicatorOfParameter = 26 ; } -#Mean surface downward UV radiation flux -'Mean surface downward UV radiation flux' = { +#Time-mean surface downward UV radiation flux +'Time-mean surface downward UV radiation flux' = { table2Version = 235 ; indicatorOfParameter = 27 ; } -#Mean surface photosynthetically active radiation flux -'Mean surface photosynthetically active radiation flux' = { +#Time-mean surface photosynthetically active radiation flux +'Time-mean surface photosynthetically active radiation flux' = { table2Version = 235 ; indicatorOfParameter = 28 ; } -#Mean large-scale precipitation rate -'Mean large-scale precipitation rate' = { +#Time-mean large-scale precipitation rate +'Time-mean large-scale precipitation rate' = { table2Version = 235 ; indicatorOfParameter = 29 ; } -#Mean convective precipitation rate -'Mean convective precipitation rate' = { +#Time-mean convective precipitation rate +'Time-mean convective precipitation rate' = { table2Version = 235 ; indicatorOfParameter = 30 ; } -#Mean snowfall rate -'Mean snowfall rate' = { +#Time-mean total snowfall rate water equivalent +'Time-mean total snowfall rate water equivalent' = { table2Version = 235 ; indicatorOfParameter = 31 ; } -#Mean boundary layer dissipation -'Mean boundary layer dissipation' = { +#Time-mean boundary layer dissipation +'Time-mean boundary layer dissipation' = { table2Version = 235 ; indicatorOfParameter = 32 ; } -#Mean surface sensible heat flux -'Mean surface sensible heat flux' = { +#Time-mean surface sensible heat flux +'Time-mean surface sensible heat flux' = { table2Version = 235 ; indicatorOfParameter = 33 ; } -#Mean surface latent heat flux -'Mean surface latent heat flux' = { +#Time-mean surface latent heat flux +'Time-mean surface latent heat flux' = { table2Version = 235 ; indicatorOfParameter = 34 ; } -#Mean surface downward short-wave radiation flux -'Mean surface downward short-wave radiation flux' = { +#Time-mean surface downward short-wave radiation flux +'Time-mean surface downward short-wave radiation flux' = { table2Version = 235 ; indicatorOfParameter = 35 ; } -#Mean surface downward long-wave radiation flux -'Mean surface downward long-wave radiation flux' = { +#Time-mean surface downward long-wave radiation flux +'Time-mean surface downward long-wave radiation flux' = { table2Version = 235 ; indicatorOfParameter = 36 ; } -#Mean surface net short-wave radiation flux -'Mean surface net short-wave radiation flux' = { +#Time-mean surface net short-wave radiation flux +'Time-mean surface net short-wave radiation flux' = { table2Version = 235 ; indicatorOfParameter = 37 ; } -#Mean surface net long-wave radiation flux -'Mean surface net long-wave radiation flux' = { +#Time-mean surface net long-wave radiation flux +'Time-mean surface net long-wave radiation flux' = { table2Version = 235 ; indicatorOfParameter = 38 ; } -#Mean top net short-wave radiation flux -'Mean top net short-wave radiation flux' = { +#Time-mean top net short-wave radiation flux +'Time-mean top net short-wave radiation flux' = { table2Version = 235 ; indicatorOfParameter = 39 ; } -#Mean top net long-wave radiation flux -'Mean top net long-wave radiation flux' = { +#Time-mean top net long-wave radiation flux +'Time-mean top net long-wave radiation flux' = { table2Version = 235 ; indicatorOfParameter = 40 ; } -#Mean eastward turbulent surface stress -'Mean eastward turbulent surface stress' = { +#Time-mean eastward turbulent surface stress +'Time-mean eastward turbulent surface stress' = { table2Version = 235 ; indicatorOfParameter = 41 ; } -#Mean northward turbulent surface stress -'Mean northward turbulent surface stress' = { +#Time-mean northward turbulent surface stress +'Time-mean northward turbulent surface stress' = { table2Version = 235 ; indicatorOfParameter = 42 ; } -#Mean evaporation rate -'Mean evaporation rate' = { +#Time-mean moisture flux +'Time-mean moisture flux' = { table2Version = 235 ; indicatorOfParameter = 43 ; } -#Sunshine duration fraction -'Sunshine duration fraction' = { +#Time-mean sunshine duration fraction +'Time-mean sunshine duration fraction' = { table2Version = 235 ; indicatorOfParameter = 44 ; } -#Mean eastward gravity wave surface stress -'Mean eastward gravity wave surface stress' = { +#Time-mean eastward gravity wave surface stress +'Time-mean eastward gravity wave surface stress' = { table2Version = 235 ; indicatorOfParameter = 45 ; } -#Mean northward gravity wave surface stress -'Mean northward gravity wave surface stress' = { +#Time-mean northward gravity wave surface stress +'Time-mean northward gravity wave surface stress' = { table2Version = 235 ; indicatorOfParameter = 46 ; } -#Mean gravity wave dissipation -'Mean gravity wave dissipation' = { +#Time-mean gravity wave dissipation +'Time-mean gravity wave dissipation' = { table2Version = 235 ; indicatorOfParameter = 47 ; } -#Mean runoff rate -'Mean runoff rate' = { +#Time-mean runoff rate water equivalent (surface plus subsurface) +'Time-mean runoff rate water equivalent (surface plus subsurface)' = { table2Version = 235 ; indicatorOfParameter = 48 ; } -#Mean top net short-wave radiation flux, clear sky -'Mean top net short-wave radiation flux, clear sky' = { +#Time-mean top net short-wave radiation flux, clear sky +'Time-mean top net short-wave radiation flux, clear sky' = { table2Version = 235 ; indicatorOfParameter = 49 ; } -#Mean top net long-wave radiation flux, clear sky -'Mean top net long-wave radiation flux, clear sky' = { +#Time-mean top net long-wave radiation flux, clear sky +'Time-mean top net long-wave radiation flux, clear sky' = { table2Version = 235 ; indicatorOfParameter = 50 ; } -#Mean surface net short-wave radiation flux, clear sky -'Mean surface net short-wave radiation flux, clear sky' = { +#Time-mean surface net short-wave radiation flux, clear sky +'Time-mean surface net short-wave radiation flux, clear sky' = { table2Version = 235 ; indicatorOfParameter = 51 ; } -#Mean surface net long-wave radiation flux, clear sky -'Mean surface net long-wave radiation flux, clear sky' = { +#Time-mean surface net long-wave radiation flux, clear sky +'Time-mean surface net long-wave radiation flux, clear sky' = { table2Version = 235 ; indicatorOfParameter = 52 ; } -#Mean top downward short-wave radiation flux -'Mean top downward short-wave radiation flux' = { +#Time mean top downward short-wave radiation flux +'Time mean top downward short-wave radiation flux' = { table2Version = 235 ; indicatorOfParameter = 53 ; } -#Mean vertically integrated moisture divergence -'Mean vertically integrated moisture divergence' = { +#Time-mean total column vertically-integrated moisture divergence flux +'Time-mean total column vertically-integrated moisture divergence flux' = { table2Version = 235 ; indicatorOfParameter = 54 ; } -#Mean total precipitation rate -'Mean total precipitation rate' = { +#Time-mean total precipitation rate +'Time-mean total precipitation rate' = { table2Version = 235 ; indicatorOfParameter = 55 ; } -#Mean convective snowfall rate -'Mean convective snowfall rate' = { +#Time-mean convective snowfall rate water equivalent +'Time-mean convective snowfall rate water equivalent' = { table2Version = 235 ; indicatorOfParameter = 56 ; } -#Mean large-scale snowfall rate -'Mean large-scale snowfall rate' = { +#Time-mean large scale snowfall rate water equivalent +'Time-mean large scale snowfall rate water equivalent' = { table2Version = 235 ; indicatorOfParameter = 57 ; } -#Mean surface direct short-wave radiation flux -'Mean surface direct short-wave radiation flux' = { +#Time-mean surface direct short-wave radiation flux +'Time-mean surface direct short-wave radiation flux' = { table2Version = 235 ; indicatorOfParameter = 58 ; } -#Mean surface direct short-wave radiation flux, clear sky -'Mean surface direct short-wave radiation flux, clear sky' = { +#Time-mean surface direct short-wave radiation flux, clear sky +'Time-mean surface direct short-wave radiation flux, clear sky' = { table2Version = 235 ; indicatorOfParameter = 59 ; } @@ -10514,38 +10514,38 @@ table2Version = 235 ; indicatorOfParameter = 60 ; } -#Mean surface diffuse short-wave radiation flux, clear sky -'Mean surface diffuse short-wave radiation flux, clear sky' = { +#Time-mean surface diffuse short-wave radiation flux, clear sky +'Time-mean surface diffuse short-wave radiation flux, clear sky' = { table2Version = 235 ; indicatorOfParameter = 61 ; } -#Mean carbon dioxide net ecosystem exchange flux -'Mean carbon dioxide net ecosystem exchange flux' = { +#Time-mean carbon dioxide net ecosystem exchange flux +'Time-mean carbon dioxide net ecosystem exchange flux' = { table2Version = 235 ; indicatorOfParameter = 62 ; } -#Mean carbon dioxide gross primary production flux -'Mean carbon dioxide gross primary production flux' = { +#Time-mean carbon dioxide gross primary production flux +'Time-mean carbon dioxide gross primary production flux' = { table2Version = 235 ; indicatorOfParameter = 63 ; } -#Mean carbon dioxide ecosystem respiration flux -'Mean carbon dioxide ecosystem respiration flux' = { +#Time-mean carbon dioxide ecosystem respiration flux +'Time-mean carbon dioxide ecosystem respiration flux' = { table2Version = 235 ; indicatorOfParameter = 64 ; } -#Mean surface downward short-wave radiation flux, clear sky -'Mean surface downward short-wave radiation flux, clear sky' = { +#Time-mean surface downward short-wave radiation flux, clear sky +'Time-mean surface downward short-wave radiation flux, clear sky' = { table2Version = 235 ; indicatorOfParameter = 68 ; } -#Mean surface downward long-wave radiation flux, clear sky -'Mean surface downward long-wave radiation flux, clear sky' = { +#Time-mean surface downward long-wave radiation flux, clear sky +'Time-mean surface downward long-wave radiation flux, clear sky' = { table2Version = 235 ; indicatorOfParameter = 69 ; } -#Mean potential evaporation rate -'Mean potential evaporation rate' = { +#Time-mean potential evaporation rate +'Time-mean potential evaporation rate' = { table2Version = 235 ; indicatorOfParameter = 70 ; } @@ -14899,13 +14899,13 @@ table2Version = 171 ; indicatorOfParameter = 255 ; } -#Snow evaporation -'Snow evaporation' = { +#Time-mean snow evaporation rate +'Time-mean snow evaporation rate' = { table2Version = 172 ; indicatorOfParameter = 44 ; } -#Snowmelt -'Snowmelt' = { +#Time-mean snowmelt rate +'Time-mean snowmelt rate' = { table2Version = 172 ; indicatorOfParameter = 45 ; } @@ -15069,13 +15069,13 @@ table2Version = 172 ; indicatorOfParameter = 255 ; } -#Snow evaporation anomaly -'Snow evaporation anomaly' = { +#Time-mean snow evaporation anomalous rate of accumulation +'Time-mean snow evaporation anomalous rate of accumulation' = { table2Version = 173 ; indicatorOfParameter = 44 ; } -#Snowmelt anomaly -'Snowmelt anomaly' = { +#Time-mean snowmelt anomalous rate of accumulation +'Time-mean snowmelt anomalous rate of accumulation' = { table2Version = 173 ; indicatorOfParameter = 45 ; } @@ -15174,8 +15174,8 @@ table2Version = 173 ; indicatorOfParameter = 181 ; } -#Evaporation anomalous rate of accumulation -'Evaporation anomalous rate of accumulation' = { +#Time-mean evaporation anomalous rate of accumulation +'Time-mean evaporation anomalous rate of accumulation' = { table2Version = 173 ; indicatorOfParameter = 182 ; } @@ -17419,13 +17419,13 @@ table2Version = 228 ; indicatorOfParameter = 3 ; } -#Mean 2 metre temperature -'Mean 2 metre temperature' = { +#Time-mean 2 metre temperature +'Time-mean 2 metre temperature' = { table2Version = 228 ; indicatorOfParameter = 4 ; } -#Mean of 10 metre wind speed -'Mean of 10 metre wind speed' = { +#Time-mean 10 metre wind speed +'Time-mean 10 metre wind speed' = { table2Version = 228 ; indicatorOfParameter = 5 ; } diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def index 0067a92f6..9a4be679c 100644 --- a/definitions/grib1/localConcepts/ecmf/paramId.def +++ b/definitions/grib1/localConcepts/ecmf/paramId.def @@ -10309,202 +10309,202 @@ table2Version = 230 ; indicatorOfParameter = 251 ; } -#Mean surface runoff rate +#Time-mean surface runoff rate '235020' = { table2Version = 235 ; indicatorOfParameter = 20 ; } -#Mean sub-surface runoff rate +#Time-mean sub-surface runoff rate '235021' = { table2Version = 235 ; indicatorOfParameter = 21 ; } -#Mean surface photosynthetically active radiation flux, clear sky +#Time-mean surface photosynthetically active radiation flux, clear sky '235022' = { table2Version = 235 ; indicatorOfParameter = 22 ; } -#Mean snow evaporation rate +#Time-mean snow evaporation rate water equivalent '235023' = { table2Version = 235 ; indicatorOfParameter = 23 ; } -#Mean snowmelt rate +#Time-mean snow melt rate '235024' = { table2Version = 235 ; indicatorOfParameter = 24 ; } -#Mean magnitude of turbulent surface stress +#Time-mean magnitude of turbulent surface stress '235025' = { table2Version = 235 ; indicatorOfParameter = 25 ; } -#Mean large-scale precipitation fraction +#Time-mean large-scale precipitation fraction '235026' = { table2Version = 235 ; indicatorOfParameter = 26 ; } -#Mean surface downward UV radiation flux +#Time-mean surface downward UV radiation flux '235027' = { table2Version = 235 ; indicatorOfParameter = 27 ; } -#Mean surface photosynthetically active radiation flux +#Time-mean surface photosynthetically active radiation flux '235028' = { table2Version = 235 ; indicatorOfParameter = 28 ; } -#Mean large-scale precipitation rate +#Time-mean large-scale precipitation rate '235029' = { table2Version = 235 ; indicatorOfParameter = 29 ; } -#Mean convective precipitation rate +#Time-mean convective precipitation rate '235030' = { table2Version = 235 ; indicatorOfParameter = 30 ; } -#Mean snowfall rate +#Time-mean total snowfall rate water equivalent '235031' = { table2Version = 235 ; indicatorOfParameter = 31 ; } -#Mean boundary layer dissipation +#Time-mean boundary layer dissipation '235032' = { table2Version = 235 ; indicatorOfParameter = 32 ; } -#Mean surface sensible heat flux +#Time-mean surface sensible heat flux '235033' = { table2Version = 235 ; indicatorOfParameter = 33 ; } -#Mean surface latent heat flux +#Time-mean surface latent heat flux '235034' = { table2Version = 235 ; indicatorOfParameter = 34 ; } -#Mean surface downward short-wave radiation flux +#Time-mean surface downward short-wave radiation flux '235035' = { table2Version = 235 ; indicatorOfParameter = 35 ; } -#Mean surface downward long-wave radiation flux +#Time-mean surface downward long-wave radiation flux '235036' = { table2Version = 235 ; indicatorOfParameter = 36 ; } -#Mean surface net short-wave radiation flux +#Time-mean surface net short-wave radiation flux '235037' = { table2Version = 235 ; indicatorOfParameter = 37 ; } -#Mean surface net long-wave radiation flux +#Time-mean surface net long-wave radiation flux '235038' = { table2Version = 235 ; indicatorOfParameter = 38 ; } -#Mean top net short-wave radiation flux +#Time-mean top net short-wave radiation flux '235039' = { table2Version = 235 ; indicatorOfParameter = 39 ; } -#Mean top net long-wave radiation flux +#Time-mean top net long-wave radiation flux '235040' = { table2Version = 235 ; indicatorOfParameter = 40 ; } -#Mean eastward turbulent surface stress +#Time-mean eastward turbulent surface stress '235041' = { table2Version = 235 ; indicatorOfParameter = 41 ; } -#Mean northward turbulent surface stress +#Time-mean northward turbulent surface stress '235042' = { table2Version = 235 ; indicatorOfParameter = 42 ; } -#Mean evaporation rate +#Time-mean moisture flux '235043' = { table2Version = 235 ; indicatorOfParameter = 43 ; } -#Sunshine duration fraction +#Time-mean sunshine duration fraction '235044' = { table2Version = 235 ; indicatorOfParameter = 44 ; } -#Mean eastward gravity wave surface stress +#Time-mean eastward gravity wave surface stress '235045' = { table2Version = 235 ; indicatorOfParameter = 45 ; } -#Mean northward gravity wave surface stress +#Time-mean northward gravity wave surface stress '235046' = { table2Version = 235 ; indicatorOfParameter = 46 ; } -#Mean gravity wave dissipation +#Time-mean gravity wave dissipation '235047' = { table2Version = 235 ; indicatorOfParameter = 47 ; } -#Mean runoff rate +#Time-mean runoff rate water equivalent (surface plus subsurface) '235048' = { table2Version = 235 ; indicatorOfParameter = 48 ; } -#Mean top net short-wave radiation flux, clear sky +#Time-mean top net short-wave radiation flux, clear sky '235049' = { table2Version = 235 ; indicatorOfParameter = 49 ; } -#Mean top net long-wave radiation flux, clear sky +#Time-mean top net long-wave radiation flux, clear sky '235050' = { table2Version = 235 ; indicatorOfParameter = 50 ; } -#Mean surface net short-wave radiation flux, clear sky +#Time-mean surface net short-wave radiation flux, clear sky '235051' = { table2Version = 235 ; indicatorOfParameter = 51 ; } -#Mean surface net long-wave radiation flux, clear sky +#Time-mean surface net long-wave radiation flux, clear sky '235052' = { table2Version = 235 ; indicatorOfParameter = 52 ; } -#Mean top downward short-wave radiation flux +#Time mean top downward short-wave radiation flux '235053' = { table2Version = 235 ; indicatorOfParameter = 53 ; } -#Mean vertically integrated moisture divergence +#Time-mean total column vertically-integrated moisture divergence flux '235054' = { table2Version = 235 ; indicatorOfParameter = 54 ; } -#Mean total precipitation rate +#Time-mean total precipitation rate '235055' = { table2Version = 235 ; indicatorOfParameter = 55 ; } -#Mean convective snowfall rate +#Time-mean convective snowfall rate water equivalent '235056' = { table2Version = 235 ; indicatorOfParameter = 56 ; } -#Mean large-scale snowfall rate +#Time-mean large scale snowfall rate water equivalent '235057' = { table2Version = 235 ; indicatorOfParameter = 57 ; } -#Mean surface direct short-wave radiation flux +#Time-mean surface direct short-wave radiation flux '235058' = { table2Version = 235 ; indicatorOfParameter = 58 ; } -#Mean surface direct short-wave radiation flux, clear sky +#Time-mean surface direct short-wave radiation flux, clear sky '235059' = { table2Version = 235 ; indicatorOfParameter = 59 ; @@ -10514,37 +10514,37 @@ table2Version = 235 ; indicatorOfParameter = 60 ; } -#Mean surface diffuse short-wave radiation flux, clear sky +#Time-mean surface diffuse short-wave radiation flux, clear sky '235061' = { table2Version = 235 ; indicatorOfParameter = 61 ; } -#Mean carbon dioxide net ecosystem exchange flux +#Time-mean carbon dioxide net ecosystem exchange flux '235062' = { table2Version = 235 ; indicatorOfParameter = 62 ; } -#Mean carbon dioxide gross primary production flux +#Time-mean carbon dioxide gross primary production flux '235063' = { table2Version = 235 ; indicatorOfParameter = 63 ; } -#Mean carbon dioxide ecosystem respiration flux +#Time-mean carbon dioxide ecosystem respiration flux '235064' = { table2Version = 235 ; indicatorOfParameter = 64 ; } -#Mean surface downward short-wave radiation flux, clear sky +#Time-mean surface downward short-wave radiation flux, clear sky '235068' = { table2Version = 235 ; indicatorOfParameter = 68 ; } -#Mean surface downward long-wave radiation flux, clear sky +#Time-mean surface downward long-wave radiation flux, clear sky '235069' = { table2Version = 235 ; indicatorOfParameter = 69 ; } -#Mean potential evaporation rate +#Time-mean potential evaporation rate '235070' = { table2Version = 235 ; indicatorOfParameter = 70 ; @@ -14899,12 +14899,12 @@ table2Version = 171 ; indicatorOfParameter = 255 ; } -#Snow evaporation +#Time-mean snow evaporation rate '172044' = { table2Version = 172 ; indicatorOfParameter = 44 ; } -#Snowmelt +#Time-mean snowmelt rate '172045' = { table2Version = 172 ; indicatorOfParameter = 45 ; @@ -15069,12 +15069,12 @@ table2Version = 172 ; indicatorOfParameter = 255 ; } -#Snow evaporation anomaly +#Time-mean snow evaporation anomalous rate of accumulation '173044' = { table2Version = 173 ; indicatorOfParameter = 44 ; } -#Snowmelt anomaly +#Time-mean snowmelt anomalous rate of accumulation '173045' = { table2Version = 173 ; indicatorOfParameter = 45 ; @@ -15174,7 +15174,7 @@ table2Version = 173 ; indicatorOfParameter = 181 ; } -#Evaporation anomalous rate of accumulation +#Time-mean evaporation anomalous rate of accumulation '173182' = { table2Version = 173 ; indicatorOfParameter = 182 ; @@ -17419,12 +17419,12 @@ table2Version = 228 ; indicatorOfParameter = 3 ; } -#Mean 2 metre temperature +#Time-mean 2 metre temperature '228004' = { table2Version = 228 ; indicatorOfParameter = 4 ; } -#Mean of 10 metre wind speed +#Time-mean 10 metre wind speed '228005' = { table2Version = 228 ; indicatorOfParameter = 5 ; diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def index 977615eff..307dea7b6 100644 --- a/definitions/grib1/localConcepts/ecmf/shortName.def +++ b/definitions/grib1/localConcepts/ecmf/shortName.def @@ -10309,203 +10309,203 @@ table2Version = 230 ; indicatorOfParameter = 251 ; } -#Mean surface runoff rate -'msror' = { +#Time-mean surface runoff rate +'avg_surfror' = { table2Version = 235 ; indicatorOfParameter = 20 ; } -#Mean sub-surface runoff rate -'mssror' = { +#Time-mean sub-surface runoff rate +'avg_ssurfror' = { table2Version = 235 ; indicatorOfParameter = 21 ; } -#Mean surface photosynthetically active radiation flux, clear sky -'msparfcs' = { +#Time-mean surface photosynthetically active radiation flux, clear sky +'avg_parcsf' = { table2Version = 235 ; indicatorOfParameter = 22 ; } -#Mean snow evaporation rate -'mser' = { +#Time-mean snow evaporation rate water equivalent +'avg_esrwe' = { table2Version = 235 ; indicatorOfParameter = 23 ; } -#Mean snowmelt rate -'msmr' = { +#Time-mean snow melt rate +'avg_smr' = { table2Version = 235 ; indicatorOfParameter = 24 ; } -#Mean magnitude of turbulent surface stress -'mmtss' = { +#Time-mean magnitude of turbulent surface stress +'avg_imagss' = { table2Version = 235 ; indicatorOfParameter = 25 ; } -#Mean large-scale precipitation fraction -'mlspf' = { +#Time-mean large-scale precipitation fraction +'avg_ilspf' = { table2Version = 235 ; indicatorOfParameter = 26 ; } -#Mean surface downward UV radiation flux -'msdwuvrf' = { +#Time-mean surface downward UV radiation flux +'avg_sduvrf' = { table2Version = 235 ; indicatorOfParameter = 27 ; } -#Mean surface photosynthetically active radiation flux -'msparf' = { +#Time-mean surface photosynthetically active radiation flux +'avg_sparf' = { table2Version = 235 ; indicatorOfParameter = 28 ; } -#Mean large-scale precipitation rate -'mlspr' = { +#Time-mean large-scale precipitation rate +'avg_lsprate' = { table2Version = 235 ; indicatorOfParameter = 29 ; } -#Mean convective precipitation rate -'mcpr' = { +#Time-mean convective precipitation rate +'avg_cpr' = { table2Version = 235 ; indicatorOfParameter = 30 ; } -#Mean snowfall rate -'msr' = { +#Time-mean total snowfall rate water equivalent +'avg_tsrwe' = { table2Version = 235 ; indicatorOfParameter = 31 ; } -#Mean boundary layer dissipation -'mbld' = { +#Time-mean boundary layer dissipation +'avg_ibld' = { table2Version = 235 ; indicatorOfParameter = 32 ; } -#Mean surface sensible heat flux -'msshf' = { +#Time-mean surface sensible heat flux +'avg_ishf' = { table2Version = 235 ; indicatorOfParameter = 33 ; } -#Mean surface latent heat flux -'mslhf' = { +#Time-mean surface latent heat flux +'avg_slhtf' = { table2Version = 235 ; indicatorOfParameter = 34 ; } -#Mean surface downward short-wave radiation flux -'msdwswrf' = { +#Time-mean surface downward short-wave radiation flux +'avg_sdswrf' = { table2Version = 235 ; indicatorOfParameter = 35 ; } -#Mean surface downward long-wave radiation flux -'msdwlwrf' = { +#Time-mean surface downward long-wave radiation flux +'avg_sdlwrf' = { table2Version = 235 ; indicatorOfParameter = 36 ; } -#Mean surface net short-wave radiation flux -'msnswrf' = { +#Time-mean surface net short-wave radiation flux +'avg_snswrf' = { table2Version = 235 ; indicatorOfParameter = 37 ; } -#Mean surface net long-wave radiation flux -'msnlwrf' = { +#Time-mean surface net long-wave radiation flux +'avg_snlwrf' = { table2Version = 235 ; indicatorOfParameter = 38 ; } -#Mean top net short-wave radiation flux -'mtnswrf' = { +#Time-mean top net short-wave radiation flux +'avg_tnswrf' = { table2Version = 235 ; indicatorOfParameter = 39 ; } -#Mean top net long-wave radiation flux -'mtnlwrf' = { +#Time-mean top net long-wave radiation flux +'avg_tnlwrf' = { table2Version = 235 ; indicatorOfParameter = 40 ; } -#Mean eastward turbulent surface stress -'metss' = { +#Time-mean eastward turbulent surface stress +'avg_iews' = { table2Version = 235 ; indicatorOfParameter = 41 ; } -#Mean northward turbulent surface stress -'mntss' = { +#Time-mean northward turbulent surface stress +'avg_inss' = { table2Version = 235 ; indicatorOfParameter = 42 ; } -#Mean evaporation rate -'mer' = { +#Time-mean moisture flux +'avg_ie' = { table2Version = 235 ; indicatorOfParameter = 43 ; } -#Sunshine duration fraction -'sdf' = { +#Time-mean sunshine duration fraction +'avg_sdf' = { table2Version = 235 ; indicatorOfParameter = 44 ; } -#Mean eastward gravity wave surface stress -'megwss' = { +#Time-mean eastward gravity wave surface stress +'avg_iegwss' = { table2Version = 235 ; indicatorOfParameter = 45 ; } -#Mean northward gravity wave surface stress -'mngwss' = { +#Time-mean northward gravity wave surface stress +'avg_ingwss' = { table2Version = 235 ; indicatorOfParameter = 46 ; } -#Mean gravity wave dissipation -'mgwd' = { +#Time-mean gravity wave dissipation +'avg_igwd' = { table2Version = 235 ; indicatorOfParameter = 47 ; } -#Mean runoff rate -'mror' = { +#Time-mean runoff rate water equivalent (surface plus subsurface) +'avg_rorwe' = { table2Version = 235 ; indicatorOfParameter = 48 ; } -#Mean top net short-wave radiation flux, clear sky -'mtnswrfcs' = { +#Time-mean top net short-wave radiation flux, clear sky +'avg_tnswrfcs' = { table2Version = 235 ; indicatorOfParameter = 49 ; } -#Mean top net long-wave radiation flux, clear sky -'mtnlwrfcs' = { +#Time-mean top net long-wave radiation flux, clear sky +'avg_tnlwrcs' = { table2Version = 235 ; indicatorOfParameter = 50 ; } -#Mean surface net short-wave radiation flux, clear sky -'msnswrfcs' = { +#Time-mean surface net short-wave radiation flux, clear sky +'avg_snswrfcs' = { table2Version = 235 ; indicatorOfParameter = 51 ; } -#Mean surface net long-wave radiation flux, clear sky -'msnlwrfcs' = { +#Time-mean surface net long-wave radiation flux, clear sky +'avg_snlwrcs' = { table2Version = 235 ; indicatorOfParameter = 52 ; } -#Mean top downward short-wave radiation flux -'mtdwswrf' = { +#Time mean top downward short-wave radiation flux +'avg_tdswrf' = { table2Version = 235 ; indicatorOfParameter = 53 ; } -#Mean vertically integrated moisture divergence -'mvimd' = { +#Time-mean total column vertically-integrated moisture divergence flux +'avg_vimdf' = { table2Version = 235 ; indicatorOfParameter = 54 ; } -#Mean total precipitation rate -'mtpr' = { +#Time-mean total precipitation rate +'avg_tprate' = { table2Version = 235 ; indicatorOfParameter = 55 ; } -#Mean convective snowfall rate -'mcsr' = { +#Time-mean convective snowfall rate water equivalent +'avg_csfr' = { table2Version = 235 ; indicatorOfParameter = 56 ; } -#Mean large-scale snowfall rate -'mlssr' = { +#Time-mean large scale snowfall rate water equivalent +'avg_lssfr' = { table2Version = 235 ; indicatorOfParameter = 57 ; } -#Mean surface direct short-wave radiation flux -'msdrswrf' = { +#Time-mean surface direct short-wave radiation flux +'avg_sdirswrf' = { table2Version = 235 ; indicatorOfParameter = 58 ; } -#Mean surface direct short-wave radiation flux, clear sky -'msdrswrfcs' = { +#Time-mean surface direct short-wave radiation flux, clear sky +'avg_sdirswrfcs' = { table2Version = 235 ; indicatorOfParameter = 59 ; } @@ -10514,38 +10514,38 @@ table2Version = 235 ; indicatorOfParameter = 60 ; } -#Mean surface diffuse short-wave radiation flux, clear sky -'msdfswrfcs' = { +#Time-mean surface diffuse short-wave radiation flux, clear sky +'avg_sdifswrfcs' = { table2Version = 235 ; indicatorOfParameter = 61 ; } -#Mean carbon dioxide net ecosystem exchange flux -'mcdneef' = { +#Time-mean carbon dioxide net ecosystem exchange flux +'avg_fco2nee' = { table2Version = 235 ; indicatorOfParameter = 62 ; } -#Mean carbon dioxide gross primary production flux -'mcdgppf' = { +#Time-mean carbon dioxide gross primary production flux +'avg_fco2gpp' = { table2Version = 235 ; indicatorOfParameter = 63 ; } -#Mean carbon dioxide ecosystem respiration flux -'mcderf' = { +#Time-mean carbon dioxide ecosystem respiration flux +'avg_fco2rec' = { table2Version = 235 ; indicatorOfParameter = 64 ; } -#Mean surface downward short-wave radiation flux, clear sky -'msdwswrfcs' = { +#Time-mean surface downward short-wave radiation flux, clear sky +'avg_sdswrfcs' = { table2Version = 235 ; indicatorOfParameter = 68 ; } -#Mean surface downward long-wave radiation flux, clear sky -'msdwlwrfcs' = { +#Time-mean surface downward long-wave radiation flux, clear sky +'avg_sdlwrfcs' = { table2Version = 235 ; indicatorOfParameter = 69 ; } -#Mean potential evaporation rate -'mper' = { +#Time-mean potential evaporation rate +'avg_pevr' = { table2Version = 235 ; indicatorOfParameter = 70 ; } @@ -14899,12 +14899,12 @@ table2Version = 171 ; indicatorOfParameter = 255 ; } -#Snow evaporation +#Time-mean snow evaporation rate 'esrate' = { table2Version = 172 ; indicatorOfParameter = 44 ; } -#Snowmelt +#Time-mean snowmelt rate '~' = { table2Version = 172 ; indicatorOfParameter = 45 ; @@ -15069,12 +15069,12 @@ table2Version = 172 ; indicatorOfParameter = 255 ; } -#Snow evaporation anomaly +#Time-mean snow evaporation anomalous rate of accumulation '~' = { table2Version = 173 ; indicatorOfParameter = 44 ; } -#Snowmelt anomaly +#Time-mean snowmelt anomalous rate of accumulation '~' = { table2Version = 173 ; indicatorOfParameter = 45 ; @@ -15174,7 +15174,7 @@ table2Version = 173 ; indicatorOfParameter = 181 ; } -#Evaporation anomalous rate of accumulation +#Time-mean evaporation anomalous rate of accumulation 'evara' = { table2Version = 173 ; indicatorOfParameter = 182 ; @@ -17419,13 +17419,13 @@ table2Version = 228 ; indicatorOfParameter = 3 ; } -#Mean 2 metre temperature -'mean2t' = { +#Time-mean 2 metre temperature +'avg_2t' = { table2Version = 228 ; indicatorOfParameter = 4 ; } -#Mean of 10 metre wind speed -'mean10ws' = { +#Time-mean 10 metre wind speed +'avg_10ws' = { table2Version = 228 ; indicatorOfParameter = 5 ; } diff --git a/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def b/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def index 25aae31d8..325bdf0c7 100644 --- a/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def +++ b/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def @@ -218,3 +218,6 @@ "avg"={gribTablesVersionNo=172;indicatorOfParameter=178;centre=98;} # mtntrf "avg"={gribTablesVersionNo=172;indicatorOfParameter=179;centre=98;} + +# 10fg6 +"max"={gribTablesVersionNo=128;indicatorOfParameter=123;centre=98;} diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index 6aa3f3cea..c84516ada 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -10309,202 +10309,202 @@ table2Version = 230 ; indicatorOfParameter = 251 ; } -#Mean surface runoff rate +#Time-mean surface runoff rate 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 20 ; } -#Mean sub-surface runoff rate +#Time-mean sub-surface runoff rate 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 21 ; } -#Mean surface photosynthetically active radiation flux, clear sky +#Time-mean surface photosynthetically active radiation flux, clear sky 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 22 ; } -#Mean snow evaporation rate +#Time-mean snow evaporation rate water equivalent 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 23 ; } -#Mean snowmelt rate +#Time-mean snow melt rate 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 24 ; } -#Mean magnitude of turbulent surface stress +#Time-mean magnitude of turbulent surface stress 'N m**-2' = { table2Version = 235 ; indicatorOfParameter = 25 ; } -#Mean large-scale precipitation fraction +#Time-mean large-scale precipitation fraction 'Proportion' = { table2Version = 235 ; indicatorOfParameter = 26 ; } -#Mean surface downward UV radiation flux +#Time-mean surface downward UV radiation flux 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 27 ; } -#Mean surface photosynthetically active radiation flux +#Time-mean surface photosynthetically active radiation flux 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 28 ; } -#Mean large-scale precipitation rate +#Time-mean large-scale precipitation rate 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 29 ; } -#Mean convective precipitation rate +#Time-mean convective precipitation rate 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 30 ; } -#Mean snowfall rate +#Time-mean total snowfall rate water equivalent 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 31 ; } -#Mean boundary layer dissipation +#Time-mean boundary layer dissipation 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 32 ; } -#Mean surface sensible heat flux +#Time-mean surface sensible heat flux 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 33 ; } -#Mean surface latent heat flux +#Time-mean surface latent heat flux 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 34 ; } -#Mean surface downward short-wave radiation flux +#Time-mean surface downward short-wave radiation flux 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 35 ; } -#Mean surface downward long-wave radiation flux +#Time-mean surface downward long-wave radiation flux 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 36 ; } -#Mean surface net short-wave radiation flux +#Time-mean surface net short-wave radiation flux 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 37 ; } -#Mean surface net long-wave radiation flux +#Time-mean surface net long-wave radiation flux 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 38 ; } -#Mean top net short-wave radiation flux +#Time-mean top net short-wave radiation flux 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 39 ; } -#Mean top net long-wave radiation flux +#Time-mean top net long-wave radiation flux 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 40 ; } -#Mean eastward turbulent surface stress +#Time-mean eastward turbulent surface stress 'N m**-2' = { table2Version = 235 ; indicatorOfParameter = 41 ; } -#Mean northward turbulent surface stress +#Time-mean northward turbulent surface stress 'N m**-2' = { table2Version = 235 ; indicatorOfParameter = 42 ; } -#Mean evaporation rate +#Time-mean moisture flux 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 43 ; } -#Sunshine duration fraction +#Time-mean sunshine duration fraction 'Proportion' = { table2Version = 235 ; indicatorOfParameter = 44 ; } -#Mean eastward gravity wave surface stress +#Time-mean eastward gravity wave surface stress 'N m**-2' = { table2Version = 235 ; indicatorOfParameter = 45 ; } -#Mean northward gravity wave surface stress +#Time-mean northward gravity wave surface stress 'N m**-2' = { table2Version = 235 ; indicatorOfParameter = 46 ; } -#Mean gravity wave dissipation +#Time-mean gravity wave dissipation 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 47 ; } -#Mean runoff rate +#Time-mean runoff rate water equivalent (surface plus subsurface) 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 48 ; } -#Mean top net short-wave radiation flux, clear sky +#Time-mean top net short-wave radiation flux, clear sky 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 49 ; } -#Mean top net long-wave radiation flux, clear sky +#Time-mean top net long-wave radiation flux, clear sky 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 50 ; } -#Mean surface net short-wave radiation flux, clear sky +#Time-mean surface net short-wave radiation flux, clear sky 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 51 ; } -#Mean surface net long-wave radiation flux, clear sky +#Time-mean surface net long-wave radiation flux, clear sky 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 52 ; } -#Mean top downward short-wave radiation flux +#Time mean top downward short-wave radiation flux 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 53 ; } -#Mean vertically integrated moisture divergence +#Time-mean total column vertically-integrated moisture divergence flux 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 54 ; } -#Mean total precipitation rate +#Time-mean total precipitation rate 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 55 ; } -#Mean convective snowfall rate +#Time-mean convective snowfall rate water equivalent 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 56 ; } -#Mean large-scale snowfall rate +#Time-mean large scale snowfall rate water equivalent 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 57 ; } -#Mean surface direct short-wave radiation flux +#Time-mean surface direct short-wave radiation flux 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 58 ; } -#Mean surface direct short-wave radiation flux, clear sky +#Time-mean surface direct short-wave radiation flux, clear sky 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 59 ; @@ -10514,37 +10514,37 @@ table2Version = 235 ; indicatorOfParameter = 60 ; } -#Mean surface diffuse short-wave radiation flux, clear sky +#Time-mean surface diffuse short-wave radiation flux, clear sky 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 61 ; } -#Mean carbon dioxide net ecosystem exchange flux +#Time-mean carbon dioxide net ecosystem exchange flux 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 62 ; } -#Mean carbon dioxide gross primary production flux +#Time-mean carbon dioxide gross primary production flux 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 63 ; } -#Mean carbon dioxide ecosystem respiration flux +#Time-mean carbon dioxide ecosystem respiration flux 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 64 ; } -#Mean surface downward short-wave radiation flux, clear sky +#Time-mean surface downward short-wave radiation flux, clear sky 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 68 ; } -#Mean surface downward long-wave radiation flux, clear sky +#Time-mean surface downward long-wave radiation flux, clear sky 'W m**-2' = { table2Version = 235 ; indicatorOfParameter = 69 ; } -#Mean potential evaporation rate +#Time-mean potential evaporation rate 'kg m**-2 s**-1' = { table2Version = 235 ; indicatorOfParameter = 70 ; @@ -14899,12 +14899,12 @@ table2Version = 171 ; indicatorOfParameter = 255 ; } -#Snow evaporation +#Time-mean snow evaporation rate 'm of water equivalent s**-1' = { table2Version = 172 ; indicatorOfParameter = 44 ; } -#Snowmelt +#Time-mean snowmelt rate 'm of water equivalent s**-1' = { table2Version = 172 ; indicatorOfParameter = 45 ; @@ -15069,12 +15069,12 @@ table2Version = 172 ; indicatorOfParameter = 255 ; } -#Snow evaporation anomaly +#Time-mean snow evaporation anomalous rate of accumulation 'm of water equivalent s**-1' = { table2Version = 173 ; indicatorOfParameter = 44 ; } -#Snowmelt anomaly +#Time-mean snowmelt anomalous rate of accumulation 'm of water equivalent s**-1' = { table2Version = 173 ; indicatorOfParameter = 45 ; @@ -15174,7 +15174,7 @@ table2Version = 173 ; indicatorOfParameter = 181 ; } -#Evaporation anomalous rate of accumulation +#Time-mean evaporation anomalous rate of accumulation 'm of water equivalent s**-1' = { table2Version = 173 ; indicatorOfParameter = 182 ; @@ -17419,12 +17419,12 @@ table2Version = 228 ; indicatorOfParameter = 3 ; } -#Mean 2 metre temperature +#Time-mean 2 metre temperature 'K' = { table2Version = 228 ; indicatorOfParameter = 4 ; } -#Mean of 10 metre wind speed +#Time-mean 10 metre wind speed 'm s**-1' = { table2Version = 228 ; indicatorOfParameter = 5 ; diff --git a/definitions/grib1/local_no_mars.98.1.def b/definitions/grib1/local_no_mars.98.1.def index bbb31966c..f028eb030 100644 --- a/definitions/grib1/local_no_mars.98.1.def +++ b/definitions/grib1/local_no_mars.98.1.def @@ -48,7 +48,7 @@ if (stepType is "instant" ) { } else { alias typeOfEnsembleForecast=three; } - alias productDefinitionTemplateNumber=epsContinous; + alias productDefinitionTemplateNumber=epsContinuous; } else { alias productDefinitionTemplateNumber=eight; } diff --git a/definitions/grib1/mars_labeling.def b/definitions/grib1/mars_labeling.def index 51eae2bdf..1d081c6d8 100644 --- a/definitions/grib1/mars_labeling.def +++ b/definitions/grib1/mars_labeling.def @@ -1,11 +1,10 @@ -codetable[1] marsClass "mars/class.table" = "od" : dump, string_type, lowercase; +codetable[1] marsClass "mars/class.table" = "od" : dump, string_type, lowercase; codetable[1] marsType "mars/type.table" = "an" : dump, string_type, lowercase; -codetable[2] marsStream "mars/stream.table" = "oper" : dump, string_type, lowercase ; +codetable[2] marsStream "mars/stream.table" = "oper" : dump, string_type, lowercase; ksec1expver[4] experimentVersionNumber = "0001" : dump; #alias typeOfProcessedData=marsType; alias ls.dataType = marsType; - alias mars.class = marsClass; alias mars.type = marsType; alias mars.stream = marsStream; diff --git a/definitions/grib1/predefined_grid.def b/definitions/grib1/predefined_grid.def index 02a6994ad..e42048a30 100644 --- a/definitions/grib1/predefined_grid.def +++ b/definitions/grib1/predefined_grid.def @@ -24,9 +24,9 @@ constant dataRepresentationType = 0; # (according to data representation type - octet 6 above) # grib 1 -> 2 -constant gridDefinitionTemplateNumber = 0; +constant gridDefinitionTemplateNumber = 0; -# START 1/grid_definition.latitude_longitude_grid ---------------------------------------------------------------------- +# START 1/grid_definition.latitude_longitude_grid # GRID DEFINITION latitude/longitude grid (or equidistant cylindrical) alias numberOfPointsAlongAParallel=Ni; @@ -122,6 +122,6 @@ constant tableReference = 0; #position offsetBeforeBitmap; # meta bitmap gds_not_present_bitmap( missingValue,numberOfValues, -# numberOfPoints, -# latitudeOfFirstGridPoint, -# Ni,numberOfUnusedBitsAtEndOfSection3) : read_only; +# numberOfPoints, +# latitudeOfFirstGridPoint, +# Ni,numberOfUnusedBitsAtEndOfSection3) : read_only; diff --git a/definitions/grib1/section.1.def b/definitions/grib1/section.1.def index 3e8f936a8..beef92bbb 100644 --- a/definitions/grib1/section.1.def +++ b/definitions/grib1/section.1.def @@ -159,12 +159,6 @@ concept paramId (paramIdECMF,"paramId.def",conceptsDir2,conceptsDir1): long_type concept cfNameECMF(defaultName,"cfName.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy,read_only; concept cfName(cfNameECMF,"cfName.def",conceptsDir2,conceptsDir1) : dump,no_copy,read_only; -#concept cfVarNameECMF(defaultName,"cfVarName.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy,read_only; -#concept cfVarName(cfVarNameECMF,"cfVarName.def",conceptsDir2,conceptsDir1) : dump,no_copy,read_only; -# See ECC-1886 -meta defaultCfVarName cf_var_name(shortName) : hidden, read_only; -concept cfVarName(defaultCfVarName,"cfVarName.def",conceptsDir2,conceptsDir1) : dump,no_copy,read_only; - concept unitsECMF(defaultName,"units.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy,read_only; concept units(unitsECMF,"units.def",conceptsDir2,conceptsDir1) : dump,no_copy,read_only; @@ -297,6 +291,14 @@ section_padding section1Padding : read_only; concept shortNameECMF (defaultShortName,"shortName.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy; concept ls.shortName (shortNameECMF,"shortName.def",conceptsDir2,conceptsDir1) : no_copy,dump; + +#concept cfVarNameECMF(defaultName,"cfVarName.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy,read_only; +#concept cfVarName(cfVarNameECMF,"cfVarName.def",conceptsDir2,conceptsDir1) : dump,no_copy,read_only; +# See ECC-1886 +meta defaultCfVarName cf_var_name(shortName) : hidden, read_only; +concept cfVarNameECMF(defaultCfVarName,"cfVarName.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy,read_only; +concept cfVarName(cfVarNameECMF,"cfVarName.def",conceptsDir2,conceptsDir1) : dump,no_copy,read_only; + meta ifsParam ifs_param(paramId,type); alias parameter.paramId=paramId; @@ -332,3 +334,11 @@ meta md5Product md5(offsetSection1,section1Length,gridDefinition,section1Flags,d # ECC-1806 concept_nofail paramIdForConversion(zero, "paramIdForConversion.def", conceptsDir2, conceptsDir1) : long_type,read_only; + +# ECC-1954 +if (productDefinitionTemplateNumber == 0 && defined(perturbationNumber) && defined(numberOfForecastsInEnsemble) && numberOfForecastsInEnsemble > 0) { + alias productDefinitionTemplateNumber = one; # ensemble instant +} +if (productDefinitionTemplateNumber == 8 && defined(perturbationNumber) && defined(numberOfForecastsInEnsemble) && numberOfForecastsInEnsemble > 0) { + alias productDefinitionTemplateNumber = eleven; # ensemble interval +} diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 6ce0a95b5..3a0da3422 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -119,6 +119,34 @@ scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; } +#Time-mean 2D wave spectra (single) +'avg_2dfd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-maximum 2D wave spectra (single) +'max_2dfd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum 2D wave spectra (single) +'min_2dfd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation 2D wave spectra (single) +'std_2dfd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 6 ; + } #2 metre specific humidity 'sh2' = { discipline = 0 ; @@ -245,6 +273,45 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean 10 metre wind direction +'avg_10wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 2 metre relative humidity with respect to water +'avg_2rhw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-maximum sea ice area fraction +'max_ci' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre specific humidity +'max_2sh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum 2 metre relative humidity 'max_2r' = { discipline = 0 ; @@ -255,6 +322,85 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum 10 metre U wind component +'max_10u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre V wind component +'max_10v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre dewpoint temperature +'max_2d' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind speed +'max_10si' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind direction +'max_10wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre relative humidity with respect to water +'max_2rhw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum sea ice area fraction +'min_ci' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre specific humidity +'min_2sh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum 2 metre relative humidity 'min_2r' = { discipline = 0 ; @@ -265,6 +411,155 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum 10 metre U wind component +'min_10u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre V wind component +'min_10v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre dewpoint temperature +'min_2d' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind speed +'min_10si' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind direction +'min_10wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre relative humidity with respect to water +'min_2rhw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation sea ice area fraction +'std_ci' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre specific humidity +'std_2sh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre U wind component +'std_10u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre V wind component +'std_10v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre temperature +'std_2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre dewpoint temperature +'std_2d' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind speed +'std_10si' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind direction +'std_10wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre relative humidity with respect to water +'std_2rhw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } #5-wave geopotential height 'wavh5' = { discipline = 0 ; @@ -407,8 +702,8 @@ parameterCategory = 0 ; parameterNumber = 86 ; } -#Mean 2 metre temperature -'mean2t' = { +#Time-mean 2 metre temperature +'avg_2t' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; @@ -417,8 +712,8 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } -#Mean of 10 metre wind speed -'mean10ws' = { +#Time-mean 10 metre wind speed +'avg_10ws' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 1 ; diff --git a/definitions/grib2/local/ecmf/section4_extras.def b/definitions/grib2/local/ecmf/section4_extras.def index 0d70c1ac9..49351d8b9 100644 --- a/definitions/grib2/local/ecmf/section4_extras.def +++ b/definitions/grib2/local/ecmf/section4_extras.def @@ -5,7 +5,7 @@ if (centre is "ecmf" or datasetForLocal is "era6") { concept modelName(unknown, "modelNameConcept.def", conceptsMasterDir, conceptsLocalDirAll): no_copy, dump, read_only; if (modelName isnot "unknown") { - concept modelVersion(unknown, "modelVersionConcept_[modelName].def", conceptsMasterDir, conceptsLocalDirAll): no_copy, dump, read_only; + concept modelVersion(unknown, "modelVersionConcept.[modelName].def", conceptsMasterDir, conceptsLocalDirAll): no_copy, dump, read_only; # alias ls.model = modelName; # alias mars.model = modelName; } diff --git a/definitions/grib2/localConcepts/ecmf/modelVersionConcept_AIFS.def b/definitions/grib2/localConcepts/ecmf/modelVersionConcept.AIFS.def similarity index 100% rename from definitions/grib2/localConcepts/ecmf/modelVersionConcept_AIFS.def rename to definitions/grib2/localConcepts/ecmf/modelVersionConcept.AIFS.def diff --git a/definitions/grib2/localConcepts/ecmf/modelVersionConcept.IFS.def b/definitions/grib2/localConcepts/ecmf/modelVersionConcept.IFS.def new file mode 100644 index 000000000..2bbe0ee20 --- /dev/null +++ b/definitions/grib2/localConcepts/ecmf/modelVersionConcept.IFS.def @@ -0,0 +1,18 @@ +'cy50r3' = { generatingProcessIdentifier = 163; } +'cy50r2' = { generatingProcessIdentifier = 162; } +'cy50r1' = { generatingProcessIdentifier = 161; } +'cy49r3' = { generatingProcessIdentifier = 160; } +'cy49r2' = { generatingProcessIdentifier = 159; } +'cy49r1' = { generatingProcessIdentifier = 158; } +'cy48r3' = { generatingProcessIdentifier = 157; } +'climatedt' = { generatingProcessIdentifier = 156; } +'cy48r2' = { generatingProcessIdentifier = 155; } +'cy48r1' = { generatingProcessIdentifier = 154; } +'cy47r3' = { generatingProcessIdentifier = 153; } +'cy47r2' = { generatingProcessIdentifier = 152; } +'cy47r1' = { generatingProcessIdentifier = 151; } +'cy46r1' = { generatingProcessIdentifier = 150; } +'cy45r1' = { generatingProcessIdentifier = 149; } +'cy43r3' = { generatingProcessIdentifier = 148; } +'cy43r1' = { generatingProcessIdentifier = 147; } +'cy41r2' = { generatingProcessIdentifier = 146; } \ No newline at end of file diff --git a/definitions/grib2/localConcepts/ecmf/modelVersionConcept_IFS.def b/definitions/grib2/localConcepts/ecmf/modelVersionConcept_IFS.def deleted file mode 100644 index 8445b7489..000000000 --- a/definitions/grib2/localConcepts/ecmf/modelVersionConcept_IFS.def +++ /dev/null @@ -1,10 +0,0 @@ -'cy49r1' = { generatingProcessIdentifier = 155; } -'cy48r1' = { generatingProcessIdentifier = 154; } -'cy47r3' = { generatingProcessIdentifier = 153; } -'cy47r2' = { generatingProcessIdentifier = 152; } -'cy47r1' = { generatingProcessIdentifier = 151; } -'cy46r1' = { generatingProcessIdentifier = 150; } -'cy45r1' = { generatingProcessIdentifier = 149; } -'cy43r3' = { generatingProcessIdentifier = 148; } -'cy43r1' = { generatingProcessIdentifier = 147; } -'cy41r2' = { generatingProcessIdentifier = 146; } diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index d3796d9dc..6683b9399 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -18650,14 +18650,14 @@ parameterCategory = 171 ; parameterNumber = 255 ; } -#Snow evaporation -'Snow evaporation' = { +#Time-mean snow evaporation rate +'Time-mean snow evaporation rate' = { discipline = 192 ; parameterCategory = 172 ; parameterNumber = 44 ; } -#Snowmelt -'Snowmelt' = { +#Time-mean snowmelt rate +'Time-mean snowmelt rate' = { discipline = 192 ; parameterCategory = 172 ; parameterNumber = 45 ; @@ -18746,14 +18746,14 @@ parameterCategory = 172 ; parameterNumber = 255 ; } -#Snow evaporation anomaly -'Snow evaporation anomaly' = { +#Time-mean snow evaporation anomalous rate of accumulation +'Time-mean snow evaporation anomalous rate of accumulation' = { discipline = 192 ; parameterCategory = 173 ; parameterNumber = 44 ; } -#Snowmelt anomaly -'Snowmelt anomaly' = { +#Time-mean snowmelt anomalous rate of accumulation +'Time-mean snowmelt anomalous rate of accumulation' = { discipline = 192 ; parameterCategory = 173 ; parameterNumber = 45 ; @@ -18872,8 +18872,8 @@ parameterCategory = 173 ; parameterNumber = 181 ; } -#Evaporation anomalous rate of accumulation -'Evaporation anomalous rate of accumulation' = { +#Time-mean evaporation anomalous rate of accumulation +'Time-mean evaporation anomalous rate of accumulation' = { discipline = 192 ; parameterCategory = 173 ; parameterNumber = 182 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.legacy.def b/definitions/grib2/localConcepts/ecmf/name.legacy.def index 28b2586ef..0a7edcf7a 100644 --- a/definitions/grib2/localConcepts/ecmf/name.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/name.legacy.def @@ -1,1779 +1,1780 @@ -#Surface net solar radiation, clear sky -'Surface net solar radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 210 ; -} -#Surface net thermal radiation, clear sky -'Surface net thermal radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 211 ; -} -#Eastward sea water velocity -'Eastward sea water velocity' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 131 ; -} -#Northward sea water velocity -'Northward sea water velocity' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 132 ; -} -#Sea-ice thickness -'Sea-ice thickness' = { - discipline = 192 ; - parameterCategory = 174 ; - parameterNumber = 98 ; -} -#Sea surface height -'Sea surface height' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 145 ; -} -#100 metre U wind component -'100 metre U wind component' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 246 ; -} -#100 metre V wind component -'100 metre V wind component' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 247 ; -} -#100 metre wind speed -'100 metre wind speed' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 249 ; -} -#0 degrees C isothermal level (atm) -'0 degrees C isothermal level (atm)' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 24 ; -} -#Depth of 20C isotherm -'Depth of 20C isotherm' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 163 ; -} -#Average salinity in the upper 300m -'Average salinity in the upper 300m' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 175 ; -} +# Automatically generated by ./create_def.pl, do not edit #Total precipitation of at least 1 mm 'Total precipitation of at least 1 mm' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 60 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 60 ; + } #Total precipitation of at least 5 mm 'Total precipitation of at least 5 mm' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 61 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 61 ; + } #Total precipitation of at least 40 mm 'Total precipitation of at least 40 mm' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 82 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 82 ; + } #Total precipitation of at least 60 mm 'Total precipitation of at least 60 mm' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 83 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 83 ; + } #Total precipitation of at least 80 mm 'Total precipitation of at least 80 mm' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 84 ; -} -#Total precipitation of at least 150 mm -'Total precipitation of at least 150 mm' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 86 ; -} -#Total precipitation of at least 200 mm -'Total precipitation of at least 200 mm' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 87 ; -} -#Total precipitation of at least 300 mm -'Total precipitation of at least 300 mm' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 88 ; -} -#Total column cloud liquid water -'Total column cloud liquid water' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 78 ; -} -#Total column cloud ice water -'Total column cloud ice water' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 79 ; -} -#Top net solar radiation -'Top net solar radiation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 178 ; -} -#Temperature of snow layer -'Temperature of snow layer' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 238 ; -} -#Sea-ice cover -'Sea-ice cover' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 31 ; -} -#Snow density -'Snow density' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 33 ; -} -#Sea surface temperature -'Sea surface temperature' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 34 ; -} -#Surface solar radiation downwards -'Surface solar radiation downwards' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 169 ; -} -#Surface thermal radiation downwards -'Surface thermal radiation downwards' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 175 ; -} -#Eastward turbulent surface stress -'Eastward turbulent surface stress' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 180 ; -} -#Northward turbulent surface stress -'Northward turbulent surface stress' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 181 ; -} -#Surface runoff -'Surface runoff' = { - discipline = 192 ; - parameterCategory = 174 ; - parameterNumber = 8 ; -} -#Direct solar radiation -'Direct solar radiation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 47 ; -} -#Lake total layer temperature -'Lake total layer temperature' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 11 ; -} -#Lake mix-layer temperature -'Lake mix-layer temperature' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 8 ; -} -#Lake mix-layer depth -'Lake mix-layer depth' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 9 ; -} -#Lake bottom temperature -'Lake bottom temperature' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 10 ; -} -#Lake shape factor -'Lake shape factor' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 12 ; -} -#Lake ice surface temperature -'Lake ice surface temperature' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 13 ; -} -#Lake ice total depth -'Lake ice total depth' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 14 ; -} -#Lake total depth -'Lake total depth' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 7 ; -} -#GEMS Ozone -'Ozone mass mixing ratio (full chemistry scheme)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 203 ; -} -#GEMS Ozone -'Ozone mass mixing ratio difference (full chemistry scheme)' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 203 ; -} -#Carbon monoxide -'Carbon monoxide mass mixing ratio' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 123 ; -} -#Carbon monoxide -'Carbon monoxide mass mixing ratio difference' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 123 ; -} -#Nitrogen dioxide -'Nitrogen dioxide mass mixing ratio' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 121 ; -} -#Nitrogen dioxide -'Nitrogen dioxide mass mixing ratio difference' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 121 ; -} -#Sulphur dioxide -'Sulphur dioxide mass mixing ratio' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 122 ; -} -#Sulphur dioxide -'Sulphur dioxide mass mixing ratio difference' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 122 ; -} -#Ammonia -'Ammonia mass mixing ratio' = { - discipline = 192 ; - parameterCategory = 217 ; - parameterNumber = 19 ; -} -#Nitrogen monoxide -'Nitrogen monoxide mass mixing ratio' = { - discipline = 192 ; - parameterCategory = 217 ; - parameterNumber = 27 ; -} -#Particulate matter d <= 1 um -'Particulate matter d <= 1 um' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 72 ; -} -#Particulate matter d <= 2.5 um -'Particulate matter d <= 2.5 um' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 73 ; -} -#Particulate matter d <= 10 um -'Particulate matter d <= 10 um' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 74 ; -} -#Runoff -'Runoff' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 205 ; -} -#Total column vertically-integrated water vapour -'Total column vertically-integrated water vapour' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 137 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 84 ; + } #Total precipitation of at least 100 mm 'Total precipitation of at least 100 mm' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 85 ; -} -#Mean zero-crossing wave period -'Mean zero-crossing wave period' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 221 ; -} -#Peak wave period -'Peak wave period' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 231 ; -} -#Instantaneous total lightning flash density -'Instantaneous total lightning flash density' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 50 ; -} -#Averaged total lightning flash density in the last hour -'Averaged total lightning flash density in the last hour' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 51 ; -} -#Instantaneous cloud-to-ground lightning flash density -'Instantaneous cloud-to-ground lightning flash density' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 52 ; -} -#Averaged cloud-to-ground lightning flash density in the last hour -'Averaged cloud-to-ground lightning flash density in the last hour' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 53 ; -} -#Averaged total lightning flash density in the last 3 hours -'Averaged total lightning flash density in the last 3 hours' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 57 ; -} -#Averaged total lightning flash density in the last 6 hours -'Averaged total lightning flash density in the last 6 hours' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 58 ; -} -#Averaged cloud-to-ground lightning flash density in the last 3 hours -'Averaged cloud-to-ground lightning flash density in the last 3 hours' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 59 ; -} -#Averaged cloud-to-ground lightning flash density in the last 6 hours -'Averaged cloud-to-ground lightning flash density in the last 6 hours' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 60 ; -} -#Eastward gravity wave surface stress -'Eastward gravity wave surface stress' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 195 ; -} -#Friction velocity -'Friction velocity' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 3 ; -} -#Instantaneous eastward turbulent surface stress -'Instantaneous eastward turbulent surface stress' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 229 ; -} -#Instantaneous northward turbulent surface stress -'Instantaneous northward turbulent surface stress' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 230 ; -} -#Instantaneous surface sensible heat flux -'Instantaneous surface sensible heat flux' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 231 ; -} -#Instantaneous moisture flux -'Instantaneous moisture flux' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 232 ; -} -#Large-scale precipitation -'Large-scale precipitation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 142 ; -} -#Large-scale precipitation fraction -'Large-scale precipitation fraction' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 50 ; -} -#Northward gravity wave surface stress -'Northward gravity wave surface stress' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 196 ; -} -#Snow evaporation -'Snow evaporation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 44 ; -} -#Snowfall -'Snowfall' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 144 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 85 ; + } +#Total precipitation of at least 150 mm +'Total precipitation of at least 150 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 86 ; + } +#Total precipitation of at least 200 mm +'Total precipitation of at least 200 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 87 ; + } +#Total precipitation of at least 300 mm +'Total precipitation of at least 300 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 88 ; + } #Surface runoff 'Surface runoff' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 8 ; -} -#TOA incident solar radiation -'TOA incident solar radiation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 212 ; -} -#Top net thermal radiation, clear sky -'Top net thermal radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 209 ; -} -#Top net solar radiation, clear sky -'Top net solar radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 208 ; -} -#Total cloud cover -'Total cloud cover' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 164 ; -} -#Total column rain water -'Total column rain water' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 89 ; -} -#Total column snow water -'Total column snow water' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 90 ; -} -#Vertical integral of eastward water vapour flux -'Vertical integral of eastward water vapour flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 71 ; -} -#Vertical integral of northward water vapour flux -'Vertical integral of northward water vapour flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 72 ; -} -#Snow albedo -'Snow albedo' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 32 ; -} -#Ice temperature -'Ice temperature' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 94 ; -} -#Snowmelt -'Snowmelt' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 45 ; -} -#Downward UV radiation at the surface -'Downward UV radiation at the surface' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 57 ; -} -#Photosynthetically active radiation at the surface -'Photosynthetically active radiation at the surface' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 58 ; -} -#Boundary layer height -'Boundary layer height' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 159 ; -} -#Evaporation -'Evaporation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 182 ; -} -#Low cloud cover -'Low cloud cover' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 186 ; -} -#Medium cloud cover -'Medium cloud cover' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 187 ; -} -#High cloud cover -'High cloud cover' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 188 ; -} -#Gravity wave dissipation -'Gravity wave dissipation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 197 ; -} -#Potential evaporation -'Potential evaporation' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 251 ; -} -#Unbalanced component of temperature -'Unbalanced component of temperature' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 21 ; -} -#Unbalanced component of logarithm of surface pressure -'Unbalanced component of logarithm of surface pressure' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 22 ; -} -#Unbalanced component of divergence -'Unbalanced component of divergence' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 23 ; -} -#10 metre wind gust in the last 3 hours -'10 metre wind gust in the last 3 hours' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 28 ; -} -#Forecast albedo -'Forecast albedo' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 243 ; -} -#Forecast surface roughness -'Forecast surface roughness' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 244 ; -} -#Flux of Carbon Dioxide Net Ecosystem Exchange -'Flux of Carbon Dioxide Net Ecosystem Exchange' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 195 ; -} -#Accumulated Carbon Dioxide Net Ecosystem Exchange -'Accumulated Carbon Dioxide Net Ecosystem Exchange' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 192 ; - typeOfStatisticalProcessing = 1 ; -} -#Flux of Carbon Dioxide Gross Primary Production -'Flux of Carbon Dioxide Gross Primary Production' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 197 ; -} -#Accumulated Carbon Dioxide Gross Primary Production -'Accumulated Carbon Dioxide Gross Primary Production' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 193 ; - typeOfStatisticalProcessing = 1 ; -} -#Flux of Carbon Dioxide Ecosystem Respiration -'Flux of Carbon Dioxide Ecosystem Respiration' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 196 ; -} -#Accumulated Carbon Dioxide Ecosystem Respiration -'Accumulated Carbon Dioxide Ecosystem Respiration' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 194 ; - typeOfStatisticalProcessing = 1 ; -} -#Albedo (climatological) -'Albedo (climatological)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 174 ; -} -#UV visible albedo for direct radiation (climatological) -'UV visible albedo for direct radiation (climatological)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 15 ; -} -#UV visible albedo for diffuse radiation (climatological) -'UV visible albedo for diffuse radiation (climatological)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 16 ; -} -#Near IR albedo for direct radiation (climatological) -'Near IR albedo for direct radiation (climatological)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 17 ; -} -#Near IR albedo for diffuse radiation (climatological) -'Near IR albedo for diffuse radiation (climatological)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 18 ; -} -#Standard deviation of filtered subgrid orography (climatological) -'Standard deviation of filtered subgrid orography (climatological)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 74 ; -} -#Logarithm of surface roughness length for heat (climatological) -'Logarithm of surface roughness length for heat (climatological)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 234 ; -} -#UV visible albedo for direct radiation, isotropic component (climatological) -'UV visible albedo for direct radiation, isotropic component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 186 ; -} -#UV visible albedo for direct radiation, volumetric component (climatological) -'UV visible albedo for direct radiation, volumetric component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 187 ; -} -#UV visible albedo for direct radiation, geometric component (climatological) -'UV visible albedo for direct radiation, geometric component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 188 ; -} -#Near IR albedo for direct radiation, isotropic component (climatological) -'Near IR albedo for direct radiation, isotropic component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 189 ; -} -#Near IR albedo for direct radiation, volumetric component (climatological) -'Near IR albedo for direct radiation, volumetric component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 190 ; -} -#Near IR albedo for direct radiation, geometric component (climatological) -'Near IR albedo for direct radiation, geometric component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 191 ; -} -#Vertically integrated moisture divergence -'Vertically integrated moisture divergence' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 213 ; -} -#Vertically integrated moisture divergence flux -'Vertically integrated moisture divergence flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 84 ; -} -#Forecast logarithm of surface roughness for heat -'Forecast logarithm of surface roughness for heat' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 245 ; -} -#10 metre u-component of neutral wind -'10 metre u-component of neutral wind' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 131 ; -} -#V-component of neutral wind -'V-component of neutral wind' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 132 ; -} -#Magnitude of turbulent surface stress -'Magnitude of turbulent surface stress' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 48 ; -} -#Vertical integral of mass of atmosphere -'Vertical integral of mass of atmosphere' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 53 ; -} -#Height of zero-degree wet-bulb temperature -'Height of zero-degree wet-bulb temperature' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 47 ; -} -#Height of one-degree wet-bulb temperature -'Height of one-degree wet-bulb temperature' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 48 ; -} -#Surface photosynthetically active radiation, clear sky -'Surface photosynthetically active radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 20 ; -} -#Surface direct short-wave radiation, clear sky -'Surface direct short-wave radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 22 ; -} -#Duct base height -'Duct base height' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 17 ; -} -#Trapping layer base height -'Trapping layer base height' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 18 ; -} -#Trapping layer top height -'Trapping layer top height' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 19 ; -} -#Mean vertical gradient of refractivity inside trapping layer -'Mean vertical gradient of refractivity inside trapping layer' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 16 ; -} -#Minimum vertical gradient of refractivity inside trapping layer -'Minimum vertical gradient of refractivity inside trapping layer' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 15 ; -} -#Vertical integral of eastward heat flux -'Vertical integral of eastward heat flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 69 ; -} -#Vertical integral of northward heat flux -'Vertical integral of northward heat flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 70 ; -} -#Vertical integral of potential+internal+latent energy -'Vertical integral of potential+internal+latent energy' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 62 ; -} -#Skin reservoir content -'Skin reservoir content' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 198 ; -} -#Skin reservoir content -'Skin reservoir content' = { - discipline = 192 ; - parameterCategory = 160 ; - parameterNumber = 198 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; + } #Sub-surface runoff 'Sub-surface runoff' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 9 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 9 ; + } +#UV visible albedo for direct radiation (climatological) +'UV visible albedo for direct radiation (climatological)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 15 ; + } +#UV visible albedo for diffuse radiation (climatological) +'UV visible albedo for diffuse radiation (climatological)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 16 ; + } +#Near IR albedo for direct radiation (climatological) +'Near IR albedo for direct radiation (climatological)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 17 ; + } +#Near IR albedo for diffuse radiation (climatological) +'Near IR albedo for diffuse radiation (climatological)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 18 ; + } +#Surface photosynthetically active radiation, clear sky +'Surface photosynthetically active radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 20 ; + } +#Unbalanced component of temperature +'Unbalanced component of temperature' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure +'Unbalanced component of logarithm of surface pressure' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence +'Unbalanced component of divergence' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; + } +#Lake cover +'Lake cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } #Low vegetation cover 'Low vegetation cover' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 27 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 27 ; + } #High vegetation cover 'High vegetation cover' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 28 ; -} -#Leaf area index, low vegetation -'Leaf area index, low vegetation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 66 ; -} -#Leaf area index, high vegetation -'Leaf area index, high vegetation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 67 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 28 ; + } #Type of low vegetation 'Type of low vegetation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 29 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 29 ; + } #Type of high vegetation 'Type of high vegetation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 30 ; -} -#Mean direction of total swell -'Mean direction of total swell' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 238 ; -} -#Mean direction of wind waves -'Mean direction of wind waves' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 235 ; -} -#Charnock -'Charnock' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 148 ; -} -#2D wave spectra (single) -'2D wave spectra (single)' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 251 ; -} -#Vertical integral of thermal energy -'Vertical integral of thermal energy' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 60 ; -} -#Vertical integral of potential+internal energy -'Vertical integral of potential+internal energy' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 61 ; -} -#Vertical integral of kinetic energy -'Vertical integral of kinetic energy' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 59 ; -} -#Vertical integral of total energy -'Vertical integral of total energy' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 63 ; -} -#UV visible albedo for diffuse radiation, isotropic component (climatological) -'UV visible albedo for diffuse radiation, isotropic component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 192 ; -} -#UV visible albedo for diffuse radiation, volumetric component (climatological) -'UV visible albedo for diffuse radiation, volumetric component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 193 ; -} -#UV visible albedo for diffuse radiation, geometric component (climatological) -'UV visible albedo for diffuse radiation, geometric component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 194 ; -} -#Near IR albedo for diffuse radiation, isotropic component (climatological) -'Near IR albedo for diffuse radiation, isotropic component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 195 ; -} -#Near IR albedo for diffuse radiation, volumetric component (climatological) -'Near IR albedo for diffuse radiation, volumetric component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 196 ; -} -#Near IR albedo for diffuse radiation, geometric component (climatological) -'Near IR albedo for diffuse radiation, geometric component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 197 ; -} -#Time-integrated temperature tendency due to short-wave radiation -'Time-integrated temperature tendency due to short-wave radiation' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 100 ; -} -#Time-integrated temperature tendency due to long-wave radiation -'Time-integrated temperature tendency due to long-wave radiation' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 101 ; -} -#Time-integrated temperature tendency due to short wave radiation, clear sky -'Time-integrated temperature tendency due to short wave radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 102 ; -} -#Time-integrated temperature tendency due to long-wave radiation, clear sky -'Time-integrated temperature tendency due to long-wave radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 103 ; -} -#Time-integrated updraught mass flux -'Time-integrated updraught mass flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 104 ; -} -#Time-integrated downdraught mass flux -'Time-integrated downdraught mass flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 105 ; -} -#Time-integrated updraught detrainment rate -'Time-integrated updraught detrainment rate' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 106 ; -} -#Time-integrated downdraught detrainment rate -'Time-integrated downdraught detrainment rate' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 107 ; -} -#Time-integrated total precipitation flux -'Time-integrated total precipitation flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 108 ; -} -#Time-integrated turbulent diffusion coefficient for heat -'Time-integrated turbulent diffusion coefficient for heat' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 109 ; -} -#Time-integrated temperature tendency due to parametrisations -'Time-integrated temperature tendency due to parametrisations' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 110 ; -} -#Time-integrated specific humidity tendency due to parametrisations -'Time-integrated specific humidity tendency due to parametrisations' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 111 ; -} -#Time-integrated eastward wind tendency due to parametrisations -'Time-integrated eastward wind tendency due to parametrisations' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 112 ; -} -#Time-integrated northward wind tendency due to parametrisations -'Time-integrated northward wind tendency due to parametrisations' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 113 ; -} -#Period corresponding to maximum individual wave height -'Period corresponding to maximum individual wave height' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 217 ; -} -#Maximum individual wave height -'Maximum individual wave height' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 218 ; -} -#Model bathymetry -'Model bathymetry' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 219 ; -} -#Mean wave period based on first moment -'Mean wave period based on first moment' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 220 ; -} -#Wave spectral directional width -'Wave spectral directional width' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 222 ; -} -#Mean wave period based on first moment for wind waves -'Mean wave period based on first moment for wind waves' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 223 ; -} -#Mean wave period based on second moment for wind waves -'Mean wave period based on second moment for wind waves' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 224 ; -} -#Wave spectral directional width for wind waves -'Wave spectral directional width for wind waves' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 225 ; -} -#Mean wave period based on first moment for swell -'Mean wave period based on first moment for swell' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 226 ; -} -#Mean wave period based on second moment for swell -'Mean wave period based on second moment for swell' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 227 ; -} -#Wave spectral directional width for swell -'Wave spectral directional width for swell' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 228 ; -} -#Coefficient of drag with waves -'Coefficient of drag with waves' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 233 ; -} -#Significant height of total swell -'Significant height of total swell' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 237 ; -} -#Mean period of total swell -'Mean period of total swell' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 239 ; -} -#Mean square slope of waves -'Mean square slope of waves' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 244 ; -} -#Benjamin-Feir index -'Benjamin-Feir index' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 253 ; -} -#Montgomery stream Function -'Montgomery stream Function' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 53 ; -} -#Water fraction -'Water fraction' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 26 ; -} -#Anisotropy of sub-gridscale orography -'Anisotropy of sub-gridscale orography' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 161 ; -} -#Angle of sub-gridscale orography -'Angle of sub-gridscale orography' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 162 ; -} -#Slope of sub-gridscale orography -'Slope of sub-gridscale orography' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 163 ; -} -#U-component surface stokes drift -'U-component surface stokes drift' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 215 ; -} -#V-component surface stokes drift -'V-component surface stokes drift' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 216 ; -} -#Total column ozone -'Total column ozone' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 206 ; -} -#Convective snowfall -'Convective snowfall' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 239 ; -} -#Large-scale snowfall -'Large-scale snowfall' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 240 ; -} -#Altimeter wave height -'Altimeter wave height' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 246 ; -} -#Altimeter corrected wave height -'Altimeter corrected wave height' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 247 ; -} -#Altimeter range relative correction -'Altimeter range relative correction' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 248 ; -} -#Total sky direct solar radiation at surface -'Total sky direct solar radiation at surface' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 21 ; -} -#Surface solar radiation downward clear-sky -'Surface solar radiation downward clear-sky' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 129 ; -} -#Surface thermal radiation downward clear-sky -'Surface thermal radiation downward clear-sky' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 130 ; -} -#Standard deviation of orography -'Standard deviation of orography' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 160 ; -} -#Cloud base height -'Cloud base height' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 23 ; -} -#Wave spectral kurtosis -'Wave spectral kurtosis' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 252 ; -} -#10 metre wind speed -'10 metre wind speed' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 245 ; -} -#10 metre wind direction -'10 metre wind direction' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 249 ; -} -#Mean temperature at 2 metres -'Mean temperature at 2 metres' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 4 ; -} -#Mean surface net radiation flux -'Mean surface net radiation flux' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 149 ; -} -#Surface net radiation -'Surface net radiation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 149 ; -} -#Top net radiation -'Top net radiation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 150 ; -} -#Surface emissivity -'Surface emissivity' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 124 ; -} -#Vertical integral of water vapour -'Vertical integral of water vapour' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 55 ; -} -#Snow depth -'Snow depth' = { - discipline = 192 ; - parameterCategory = 190 ; - parameterNumber = 141 ; -} -#Mean total snowfall rate -'Mean total snowfall rate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 144 ; -} -#Evaporation -'Evaporation' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 182 ; -} -#Mean total precipitation rate -'Mean total precipitation rate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 228 ; -} -#Mean large-scale precipitation rate -'Mean large-scale precipitation rate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 142 ; -} -#Mean convective precipitation rate -'Mean convective precipitation rate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 143 ; -} -#Mean runoff rate -'Mean runoff rate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 205 ; -} -#Mean total cloud cover -'Mean total cloud cover' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 6 ; -} -#Mean of 10 metre wind speed -'Mean of 10 metre wind speed' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 5 ; -} -#Sea water potential temperature -'Sea water potential temperature' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 129 ; -} -#Sea water practical salinity -'Sea water practical salinity' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 130 ; -} -#Upward sea water velocity -'Upward sea water velocity' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 133 ; -} -#Sea water sigma theta -'Sea water sigma theta' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 138 ; -} -#Surface downward eastward stress -'Surface downward eastward stress' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 153 ; -} -#Surface downward northward stress -'Surface downward northward stress' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 154 ; -} -#Surface geopotential -'Surface geopotential' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 51 ; -} -#Vertical integral of temperature -'Vertical integral of temperature' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 54 ; -} -#Vertical integral of cloud liquid water -'Vertical integral of cloud liquid water' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 56 ; -} -#Vertical integral of cloud frozen water -'Vertical integral of cloud frozen water' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 57 ; -} -#Vertical integral of ozone -'Vertical integral of ozone' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 58 ; -} -#Vertical integral of energy conversion -'Vertical integral of energy conversion' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 64 ; -} -#Vertical integral of eastward mass flux -'Vertical integral of eastward mass flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 65 ; -} -#Vertical integral of northward mass flux -'Vertical integral of northward mass flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 66 ; -} -#Vertical integral of eastward kinetic energy flux -'Vertical integral of eastward kinetic energy flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 67 ; -} -#Vertical integral of northward kinetic energy flux -'Vertical integral of northward kinetic energy flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 68 ; -} -#Vertical integral of eastward geopotential flux -'Vertical integral of eastward geopotential flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 73 ; -} -#Vertical integral of northward geopotential flux -'Vertical integral of northward geopotential flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 74 ; -} -#Vertical integral of eastward total energy flux -'Vertical integral of eastward total energy flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 75 ; -} -#Vertical integral of northward total energy flux -'Vertical integral of northward total energy flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 76 ; -} -#Vertical integral of eastward ozone flux -'Vertical integral of eastward ozone flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 77 ; -} -#Vertical integral of northward ozone flux -'Vertical integral of northward ozone flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 78 ; -} -#Vertical integral of divergence of mass flux -'Vertical integral of divergence of mass flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 81 ; -} -#Vertical integral of divergence of kinetic energy flux -'Vertical integral of divergence of kinetic energy flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 82 ; -} -#Vertical integral of divergence of thermal energy flux -'Vertical integral of divergence of thermal energy flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 83 ; -} -#Vertical integral of divergence of geopotential flux -'Vertical integral of divergence of geopotential flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 85 ; -} -#Vertical integral of divergence of total energy flux -'Vertical integral of divergence of total energy flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 86 ; -} -#Vertical integral of divergence of ozone flux -'Vertical integral of divergence of ozone flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 87 ; -} -#Variance of geopotential -'Variance of geopotential' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 206 ; -} -#Covariance of geopotential/temperature -'Covariance of geopotential/temperature' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 207 ; -} -#Variance of temperature -'Variance of temperature' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 208 ; -} -#Covariance of geopotential/specific humidity -'Covariance of geopotential/specific humidity' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 209 ; -} -#Covariance of temperature/specific humidity -'Covariance of temperature/specific humidity' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 210 ; -} -#Variance of specific humidity -'Variance of specific humidity' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 211 ; -} -#Covariance of u component/geopotential -'Covariance of u component/geopotential' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 212 ; -} -#Covariance of u component/temperature -'Covariance of u component/temperature' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 213 ; -} -#Covariance of u component/specific humidity -'Covariance of u component/specific humidity' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 214 ; -} -#Variance of u component -'Variance of u component' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 215 ; -} -#Mean vertical velocity -'Mean vertical velocity' = { - discipline = 192 ; - parameterCategory = 130 ; - parameterNumber = 232 ; -} -#Mean surface sensible heat flux -'Mean surface sensible heat flux' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 146 ; -} -#Mean surface latent heat flux -'Mean surface latent heat flux' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 147 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 30 ; + } +#Sea ice area fraction +'Sea ice area fraction' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 31 ; + } +#Snow albedo +'Snow albedo' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; + } +#Snow density +'Snow density' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 33 ; + } +#Sea surface temperature +'Sea surface temperature' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 34 ; + } +#Snow evaporation +'Snow evaporation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; + } +#Snowmelt +'Snowmelt' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; + } +#Surface direct normal short-wave (solar) radiation +'Surface direct normal short-wave (solar) radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 47 ; + } +#Time-integrated magnitude of turbulent surface stress +'Time-integrated magnitude of turbulent surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 48 ; + } +#Large-scale precipitation fraction +'Large-scale precipitation fraction' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; + } +#Montgomery potential +'Montgomery potential' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; + } #Mean temperature at 2 metres in the last 24 hours 'Mean temperature at 2 metres in the last 24 hours' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 55 ; -} -#Mean 2 metre temperature in the last 24 hours gradient -'Mean 2 metre temperature in the last 24 hours gradient' = { - discipline = 192 ; - parameterCategory = 129 ; - parameterNumber = 55 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 55 ; + } #Mean 2 metre dewpoint temperature in the last 24 hours 'Mean 2 metre dewpoint temperature in the last 24 hours' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 56 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 56 ; + } +#Surface downward UV radiation +'Surface downward UV radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface +'Photosynthetically active radiation at the surface' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; + } +#Leaf area index, low vegetation +'Leaf area index, low vegetation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'Leaf area index, high vegetation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 67 ; + } +#Standard deviation of filtered subgrid orography (climatological) +'Standard deviation of filtered subgrid orography (climatological)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 74 ; + } +#Total column cloud liquid water +'Total column cloud liquid water' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 78 ; + } +#Total column cloud ice water +'Total column cloud ice water' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 79 ; + } +#Surface emissivity +'Surface emissivity' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 124 ; + } +#Total column vertically-integrated water vapour +'Total column vertically-integrated water vapour' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 137 ; + } +#Large-scale precipitation +'Large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; + } +#Snowfall +'Snowfall' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; + } +#Charnock +'Charnock' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 148 ; + } +#Surface net radiation (SW and LW) +'Surface net radiation (SW and LW)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 149 ; + } +#Top net radiation (SW and LW) +'Top net radiation (SW and LW)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 150 ; + } +#Boundary layer height +'Boundary layer height' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; + } +#Standard deviation of sub-gridscale orography +'Standard deviation of sub-gridscale orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography +'Anisotropy of sub-gridscale orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography +'Angle of sub-gridscale orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography +'Slope of sub-gridscale orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; + } +#Total cloud cover +'Total cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; + } +#Surface short-wave (solar) radiation downwards +'Surface short-wave (solar) radiation downwards' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 169 ; + } +#Albedo (climatological) +'Albedo (climatological)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 174 ; + } +#Surface long-wave (thermal) radiation downwards +'Surface long-wave (thermal) radiation downwards' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 175 ; + } +#Top net short-wave (solar) radiation +'Top net short-wave (solar) radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 178 ; + } +#Time-integrated eastward turbulent surface stress +'Time-integrated eastward turbulent surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 180 ; + } +#Time-integrated northward turbulent surface stress +'Time-integrated northward turbulent surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 181 ; + } +#Evaporation +'Evaporation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; + } +#Low cloud cover +'Low cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; + } +#Medium cloud cover +'Medium cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; + } +#High cloud cover +'High cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; + } +#Eastward gravity wave surface stress +'Eastward gravity wave surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; + } +#Northward gravity wave surface stress +'Northward gravity wave surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation +'Gravity wave dissipation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; + } +#Skin reservoir content +'Skin reservoir content' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 198 ; + } +#Runoff +'Runoff' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 205 ; + } +#Total column ozone +'Total column ozone' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; + } +#Top net short-wave (solar) radiation, clear sky +'Top net short-wave (solar) radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; + } +#Top net long-wave (thermal) radiation, clear sky +'Top net long-wave (thermal) radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; + } +#Surface net short-wave (solar) radiation, clear sky +'Surface net short-wave (solar) radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 210 ; + } +#Surface net long-wave (thermal) radiation, clear sky +'Surface net long-wave (thermal) radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 211 ; + } +#TOA incident short-wave (solar) radiation +'TOA incident short-wave (solar) radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; + } +#Vertically integrated moisture divergence +'Vertically integrated moisture divergence' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 213 ; + } +#Instantaneous eastward turbulent surface stress +'Instantaneous eastward turbulent surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; + } +#Instantaneous northward turbulent surface stress +'Instantaneous northward turbulent surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; + } +#Instantaneous surface sensible heat net flux +'Instantaneous surface sensible heat net flux' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux +'Instantaneous moisture flux' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; + } +#Logarithm of surface roughness length for heat (climatological) +'Logarithm of surface roughness length for heat (climatological)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 234 ; + } +#Temperature of snow layer +'Temperature of snow layer' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 238 ; + } +#Convective snowfall +'Convective snowfall' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; + } +#Large-scale snowfall +'Large-scale snowfall' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; + } +#Forecast albedo +'Forecast albedo' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 243 ; + } +#Forecast surface roughness +'Forecast surface roughness' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat +'Forecast logarithm of surface roughness for heat' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 245 ; + } +#Mean surface net radiation flux +'Mean surface net radiation flux' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 149 ; + } +#Particulate matter d <= 1 um +'Particulate matter d <= 1 um' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 72 ; + } +#Particulate matter d <= 2.5 um +'Particulate matter d <= 2.5 um' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 73 ; + } +#Particulate matter d <= 10 um +'Particulate matter d <= 10 um' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 74 ; + } +#UV visible albedo for direct radiation, isotropic component (climatological) +'UV visible albedo for direct radiation, isotropic component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 186 ; + } +#UV visible albedo for direct radiation, volumetric component (climatological) +'UV visible albedo for direct radiation, volumetric component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 187 ; + } +#UV visible albedo for direct radiation, geometric component (climatological) +'UV visible albedo for direct radiation, geometric component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 188 ; + } +#Near IR albedo for direct radiation, isotropic component (climatological) +'Near IR albedo for direct radiation, isotropic component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 189 ; + } +#Near IR albedo for direct radiation, volumetric component (climatological) +'Near IR albedo for direct radiation, volumetric component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 190 ; + } +#Near IR albedo for direct radiation, geometric component (climatological) +'Near IR albedo for direct radiation, geometric component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 191 ; + } +#UV visible albedo for diffuse radiation, isotropic component (climatological) +'UV visible albedo for diffuse radiation, isotropic component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; + } +#UV visible albedo for diffuse radiation, volumetric component (climatological) +'UV visible albedo for diffuse radiation, volumetric component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; + } +#UV visible albedo for diffuse radiation, geometric component (climatological) +'UV visible albedo for diffuse radiation, geometric component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; + } +#Near IR albedo for diffuse radiation, isotropic component (climatological) +'Near IR albedo for diffuse radiation, isotropic component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; + } +#Near IR albedo for diffuse radiation, volumetric component (climatological) +'Near IR albedo for diffuse radiation, volumetric component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; + } +#Near IR albedo for diffuse radiation, geometric component (climatological) +'Near IR albedo for diffuse radiation, geometric component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; + } +#Ammonia mass mixing ratio +'Ammonia mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 217 ; + parameterNumber = 19 ; + } +#Nitrogen monoxide mass mixing ratio +'Nitrogen monoxide mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 217 ; + parameterNumber = 27 ; + } +#Surface direct short-wave (solar) radiation +'Surface direct short-wave (solar) radiation' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; + } +#Surface direct short-wave radiation, clear sky +'Surface direct short-wave radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 22 ; + } +#Cloud base height +'Cloud base height' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; + } +#0 degrees C isothermal level (atm) +'0 degrees C isothermal level (atm)' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 24 ; + } +#Maximum 10 metre wind gust in the last 3 hours +'Maximum 10 metre wind gust in the last 3 hours' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; + } +#Height of zero-degree wet-bulb temperature +'Height of zero-degree wet-bulb temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 47 ; + } +#Height of one-degree wet-bulb temperature +'Height of one-degree wet-bulb temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 48 ; + } +#Instantaneous total lightning flash density +'Instantaneous total lightning flash density' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 50 ; + } +#Averaged total lightning flash density in the last hour +'Averaged total lightning flash density in the last hour' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 51 ; + } +#Instantaneous cloud-to-ground lightning flash density +'Instantaneous cloud-to-ground lightning flash density' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 52 ; + } +#Averaged cloud-to-ground lightning flash density in the last hour +'Averaged cloud-to-ground lightning flash density in the last hour' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 53 ; + } +#Averaged total lightning flash density in the last 3 hours +'Averaged total lightning flash density in the last 3 hours' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 57 ; + } +#Averaged total lightning flash density in the last 6 hours +'Averaged total lightning flash density in the last 6 hours' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 58 ; + } +#Averaged cloud-to-ground lightning flash density in the last 3 hours +'Averaged cloud-to-ground lightning flash density in the last 3 hours' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 59 ; + } +#Averaged cloud-to-ground lightning flash density in the last 6 hours +'Averaged cloud-to-ground lightning flash density in the last 6 hours' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 60 ; + } +#Accumulated Carbon Dioxide Net Ecosystem Exchange +'Accumulated Carbon Dioxide Net Ecosystem Exchange' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated Carbon Dioxide Gross Primary Production +'Accumulated Carbon Dioxide Gross Primary Production' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated Carbon Dioxide Ecosystem Respiration +'Accumulated Carbon Dioxide Ecosystem Respiration' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 1 ; + } +#Carbon dioxide net ecosystem exchange flux +'Carbon dioxide net ecosystem exchange flux' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#Carbon dioxide gross primary production flux +'Carbon dioxide gross primary production flux' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#Carbon dioxide ecosystem respiration flux +'Carbon dioxide ecosystem respiration flux' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#Total column rain water +'Total column rain water' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; + } +#Total column snow water +'Total column snow water' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; + } +#Ice temperature +'Ice temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; + } +#Surface short-wave (solar) radiation downward clear-sky +'Surface short-wave (solar) radiation downward clear-sky' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; + } +#Surface long-wave (thermal) radiation downward clear-sky +'Surface long-wave (thermal) radiation downward clear-sky' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; + } +#100 metre wind speed +'100 metre wind speed' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 249 ; + } +#Potential evaporation +'Potential evaporation' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; + } +#Mean 2 metre temperature in the last 24 hours gradient +'Mean 2 metre temperature in the last 24 hours gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 55 ; + } #Mean 2 metre dewpoint temperature in the last 24 hours gradient 'Mean 2 metre dewpoint temperature in the last 24 hours gradient' = { - discipline = 192 ; - parameterCategory = 129 ; - parameterNumber = 56 ; -} -#Mean surface downward solar radiation flux -'Mean surface downward solar radiation flux' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 169 ; -} -#Mean surface downward thermal radiation flux -'Mean surface downward thermal radiation flux' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 175 ; -} -#Mean surface net solar radiation flux -'Mean surface net solar radiation flux' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 176 ; -} -#Mean surface net thermal radiation flux -'Mean surface net thermal radiation flux' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 177 ; -} -#Mean top net solar radiation flux -'Mean top net solar radiation flux' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 178 ; -} -#Mean top net thermal radiation flux -'Mean top net thermal radiation flux' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 179 ; -} -#East-West surface stress rate of accumulation -'East-West surface stress rate of accumulation' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 180 ; -} -#North-South surface stress rate of accumulation -'North-South surface stress rate of accumulation' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 181 ; -} + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 56 ; + } +#Mean vertical velocity +'Mean vertical velocity' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 232 ; + } +#Period corresponding to maximum individual wave height +'Period corresponding to maximum individual wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; + } +#Envelop-maximum individual wave height +'Envelop-maximum individual wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; + } +#Model bathymetry +'Model bathymetry' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; + } +#Mean wave period based on first moment +'Mean wave period based on first moment' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; + } +#Mean zero-crossing wave period +'Mean zero-crossing wave period' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 221 ; + } +#Wave spectral directional width +'Wave spectral directional width' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; + } +#Mean wave period based on first moment for wind waves +'Mean wave period based on first moment for wind waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; + } +#Mean wave period based on second moment for wind waves +'Mean wave period based on second moment for wind waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; + } +#Wave spectral directional width for wind waves +'Wave spectral directional width for wind waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; + } +#Mean wave period based on first moment for swell +'Mean wave period based on first moment for swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; + } +#Mean wave period based on second moment for swell +'Mean wave period based on second moment for swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; + } +#Wave spectral directional width for swell +'Wave spectral directional width for swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; + } +#Peak wave period +'Peak wave period' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 231 ; + } +#Coefficient of drag with waves +'Coefficient of drag with waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; + } +#Mean direction of wind waves +'Mean direction of wind waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 235 ; + } +#Significant height of total swell +'Significant height of total swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; + } +#Mean direction of total swell +'Mean direction of total swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 238 ; + } +#Mean period of total swell +'Mean period of total swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; + } #Standard deviation wave height 'Standard deviation wave height' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 240 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 240 ; + } #Mean of 10 metre wind speed 'Mean of 10 metre wind speed' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 241 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 241 ; + } #Mean wind direction 'Mean wind direction' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 242 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 242 ; + } #Standard deviation of 10 metre wind speed 'Standard deviation of 10 metre wind speed' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 243 ; -} -#Top net solar radiation, clear sky -'Top net solar radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 208 ; -} -#Top net thermal radiation, clear sky -'Top net thermal radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 209 ; -} -#Surface net solar radiation, clear sky -'Surface net solar radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 210 ; -} -#Surface net thermal radiation, clear sky -'Surface net thermal radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 211 ; -} -#Solar insolation rate of accumulation -'Solar insolation rate of accumulation' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 212 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 243 ; + } +#Mean square slope of waves +'Mean square slope of waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; + } +#10 metre wind speed +'10 metre wind speed' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; + } +#Altimeter wave height +'Altimeter wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; + } +#Altimeter corrected wave height +'Altimeter corrected wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; + } +#Altimeter range relative correction +'Altimeter range relative correction' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; + } +#10 metre wind direction +'10 metre wind direction' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; + } +#2D wave spectra (single) +'2D wave spectra (single)' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 251 ; + } +#Wave spectral kurtosis +'Wave spectral kurtosis' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; + } +#Benjamin-Feir index +'Benjamin-Feir index' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; + } #Wave spectral peakedness 'Wave spectral peakedness' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 254 ; + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 254 ; + } +#Sea water potential temperature +'Sea water potential temperature' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 129 ; + } +#Sea water practical salinity +'Sea water practical salinity' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 130 ; + } +#Eastward surface sea water velocity +'Eastward surface sea water velocity' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 131 ; + } +#Northward surface sea water velocity +'Northward surface sea water velocity' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 132 ; + } +#Upward sea water velocity +'Upward sea water velocity' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 133 ; + } +#Sea water sigma theta +'Sea water sigma theta' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 138 ; + } +#Sea surface height +'Sea surface height' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 145 ; + } +#Surface downward eastward stress +'Surface downward eastward stress' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 153 ; + } +#Surface downward northward stress +'Surface downward northward stress' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 154 ; + } +#Depth of 20C isotherm +'Depth of 20C isotherm' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 163 ; + } +#Average sea water practical salinity in the upper 300m +'Average sea water practical salinity in the upper 300m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 175 ; + } +#Skin reservoir content +'Skin reservoir content' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 198 ; + } +#Surface geopotential +'Surface geopotential' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 51 ; + } +#Total column vertically-integrated mass of atmosphere +'Total column vertically-integrated mass of atmosphere' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 53 ; + } +#Total column vertically-integrated temperature +'Total column vertically-integrated temperature' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 54 ; + } +#Total column vertically-integrated water vapour +'Total column vertically-integrated water vapour' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 55 ; + } +#Total column vertically-integrated cloud liquid water +'Total column vertically-integrated cloud liquid water' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 56 ; + } +#Total column vertically-integrated cloud frozen water +'Total column vertically-integrated cloud frozen water' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 57 ; + } +#Total column vertically-integrated ozone +'Total column vertically-integrated ozone' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 58 ; + } +#Total column vertically-integrated kinetic energy +'Total column vertically-integrated kinetic energy' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 59 ; + } +#Total column vertically-integrated enthalpy +'Total column vertically-integrated enthalpy' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 60 ; + } +#Total column vertically-integrated potential + internal energy +'Total column vertically-integrated potential + internal energy' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 61 ; + } +#Total column vertically-integrated potential+internal+latent energy +'Total column vertically-integrated potential+internal+latent energy' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 62 ; + } +#Total column vertically-integrated total energy +'Total column vertically-integrated total energy' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 63 ; + } +#Total column vertically-integrated energy conversion +'Total column vertically-integrated energy conversion' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 64 ; + } +#Total column vertically-integrated eastward mass flux +'Total column vertically-integrated eastward mass flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 65 ; + } +#Total column vertically-integrated northward mass flux +'Total column vertically-integrated northward mass flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 66 ; + } +#Total column vertically-integrated eastward kinetic energy flux +'Total column vertically-integrated eastward kinetic energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 67 ; + } +#Total column vertically-integrated northward kinetic energy flux +'Total column vertically-integrated northward kinetic energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 68 ; + } +#Total column vertically-integrated eastward heat flux +'Total column vertically-integrated eastward heat flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 69 ; + } +#Total column vertically-integrated northward heat flux +'Total column vertically-integrated northward heat flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 70 ; + } +#Total column vertically-integrated eastward water vapour flux +'Total column vertically-integrated eastward water vapour flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; + } +#Total column vertically-integrated northward water vapour flux +'Total column vertically-integrated northward water vapour flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; + } +#Total column vertically-integrated eastward geopotential flux +'Total column vertically-integrated eastward geopotential flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 73 ; + } +#Total column vertically-integrated northward geopotential flux +'Total column vertically-integrated northward geopotential flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 74 ; + } +#Total column vertically-integrated eastward total energy flux +'Total column vertically-integrated eastward total energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 75 ; + } +#Total column vertically-integrated northward total energy flux +'Total column vertically-integrated northward total energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 76 ; + } +#Total column vertically-integrated eastward ozone flux +'Total column vertically-integrated eastward ozone flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 77 ; + } +#Total column vertically-integrated northward ozone flux +'Total column vertically-integrated northward ozone flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 78 ; + } +#Total column vertically-integrated divergence of mass flux +'Total column vertically-integrated divergence of mass flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 81 ; + } +#Total column vertically-integrated divergence of kinetic energy flux +'Total column vertically-integrated divergence of kinetic energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 82 ; + } +#Total column vertically-integrated divergence of thermal energy flux +'Total column vertically-integrated divergence of thermal energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 83 ; + } +#Total column vertically-integrated moisture divergence flux +'Total column vertically-integrated moisture divergence flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 84 ; + } +#Total column vertically-integrated divergence of geopotential flux +'Total column vertically-integrated divergence of geopotential flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 85 ; + } +#Total column vertically-integrated divergence of total energy flux +'Total column vertically-integrated divergence of total energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 86 ; + } +#Total column vertically-integrated divergence of ozone flux +'Total column vertically-integrated divergence of ozone flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 87 ; + } +#Time-integrated temperature tendency due to short-wave radiation +'Time-integrated temperature tendency due to short-wave radiation' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; + } +#Time-integrated temperature tendency due to long-wave radiation +'Time-integrated temperature tendency due to long-wave radiation' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; + } +#Time-integrated temperature tendency due to short wave radiation, clear sky +'Time-integrated temperature tendency due to short wave radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; + } +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'Time-integrated temperature tendency due to long-wave radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; + } +#Time-integrated updraught mass flux +'Time-integrated updraught mass flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; + } +#Time-integrated downdraught mass flux +'Time-integrated downdraught mass flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; + } +#Time-integrated updraught detrainment rate +'Time-integrated updraught detrainment rate' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; + } +#Time-integrated downdraught detrainment rate +'Time-integrated downdraught detrainment rate' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; + } +#Time-integrated total precipitation flux +'Time-integrated total precipitation flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; + } +#Time-integrated turbulent diffusion coefficient for heat +'Time-integrated turbulent diffusion coefficient for heat' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; + } +#Time-integrated temperature tendency due to parametrisations +'Time-integrated temperature tendency due to parametrisations' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; + } +#Time-integrated specific humidity tendency due to parametrisations +'Time-integrated specific humidity tendency due to parametrisations' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; + } +#Time-integrated eastward wind tendency due to parametrisations +'Time-integrated eastward wind tendency due to parametrisations' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; + } +#Time-integrated northward wind tendency due to parametrisations +'Time-integrated northward wind tendency due to parametrisations' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; + } +#Variance of geopotential +'Variance of geopotential' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 206 ; + } +#Covariance of geopotential/temperature +'Covariance of geopotential/temperature' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 207 ; + } +#Variance of temperature +'Variance of temperature' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 208 ; + } +#Covariance of geopotential/specific humidity +'Covariance of geopotential/specific humidity' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 209 ; + } +#Covariance of temperature/specific humidity +'Covariance of temperature/specific humidity' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 210 ; + } +#Variance of specific humidity +'Variance of specific humidity' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 211 ; + } +#Covariance of u component/geopotential +'Covariance of u component/geopotential' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 212 ; + } +#Covariance of u component/temperature +'Covariance of u component/temperature' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 213 ; + } +#Covariance of u component/specific humidity +'Covariance of u component/specific humidity' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 214 ; + } +#Variance of u component +'Variance of u component' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 215 ; + } +#Mean large-scale precipitation rate +'Mean large-scale precipitation rate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; + } +#Mean convective precipitation rate +'Mean convective precipitation rate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; + } +#Mean total snowfall rate +'Mean total snowfall rate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 144 ; + } +#Mean surface sensible heat flux +'Mean surface sensible heat flux' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 146 ; + } +#Mean surface latent heat flux +'Mean surface latent heat flux' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 147 ; + } +#Mean surface downward solar radiation flux +'Mean surface downward solar radiation flux' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 169 ; + } +#Mean surface downward thermal radiation flux +'Mean surface downward thermal radiation flux' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 175 ; + } +#Mean surface net solar radiation flux +'Mean surface net solar radiation flux' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 176 ; + } +#Mean surface net thermal radiation flux +'Mean surface net thermal radiation flux' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 177 ; + } +#Mean top net solar radiation flux +'Mean top net solar radiation flux' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 178 ; + } +#Mean top net thermal radiation flux +'Mean top net thermal radiation flux' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 179 ; + } +#East-West surface stress rate of accumulation +'East-West surface stress rate of accumulation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 180 ; + } +#North-South surface stress rate of accumulation +'North-South surface stress rate of accumulation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 181 ; + } +#Evaporation +'Evaporation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 182 ; + } +#Mean runoff rate +'Mean runoff rate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky +'Top net solar radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky +'Top net thermal radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky +'Surface net solar radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky +'Surface net thermal radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 211 ; + } +#Solar insolation rate of accumulation +'Solar insolation rate of accumulation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 212 ; + } +#Mean total precipitation rate +'Mean total precipitation rate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 228 ; + } +#Surface runoff +'Surface runoff' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 8 ; + } +#Sea-ice thickness +'Sea-ice thickness' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 98 ; + } +#Snow depth +'Snow depth' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 141 ; + } +#Nitrogen dioxide mass mixing ratio +'Nitrogen dioxide mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 121 ; + } +#Sulphur dioxide mass mixing ratio +'Sulphur dioxide mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 122 ; + } +#Carbon monoxide mass mixing ratio +'Carbon monoxide mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 123 ; + } +#Ozone mass mixing ratio (full chemistry scheme) +'Ozone mass mixing ratio (full chemistry scheme)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 203 ; + } +#Nitrogen dioxide mass mixing ratio difference +'Nitrogen dioxide mass mixing ratio difference' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 121 ; + } +#Sulphur dioxide mass mixing ratio difference +'Sulphur dioxide mass mixing ratio difference' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 122 ; + } +#Carbon monoxide mass mixing ratio difference +'Carbon monoxide mass mixing ratio difference' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 123 ; + } +#Ozone mass mixing ratio difference (full chemistry scheme) +'Ozone mass mixing ratio difference (full chemistry scheme)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 203 ; + } +#Friction velocity +'Friction velocity' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; + } +#Time-mean 2 metre temperature +'Time-mean 2 metre temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 4 ; + } +#Time-mean 10 metre wind speed +'Time-mean 10 metre wind speed' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; + } +#Mean total cloud cover +'Mean total cloud cover' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; + } +#Lake total depth +'Lake total depth' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 7 ; + } +#Lake mix-layer temperature +'Lake mix-layer temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 8 ; + } +#Lake mix-layer depth +'Lake mix-layer depth' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 9 ; + } +#Lake bottom temperature +'Lake bottom temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 10 ; + } +#Lake total layer temperature +'Lake total layer temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 11 ; + } +#Lake shape factor +'Lake shape factor' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 12 ; + } +#Lake ice surface temperature +'Lake ice surface temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 13 ; + } +#Lake ice total depth +'Lake ice total depth' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 14 ; + } +#Minimum vertical gradient of refractivity inside trapping layer +'Minimum vertical gradient of refractivity inside trapping layer' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 15 ; + } +#Mean vertical gradient of refractivity inside trapping layer +'Mean vertical gradient of refractivity inside trapping layer' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 16 ; + } +#Duct base height +'Duct base height' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 17 ; + } +#Trapping layer base height +'Trapping layer base height' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 18 ; + } +#Trapping layer top height +'Trapping layer top height' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 19 ; + } +#10 metre u-component of neutral wind +'10 metre u-component of neutral wind' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 131 ; + } +#10 metre v-component of neutral wind +'10 metre v-component of neutral wind' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 132 ; + } +#U-component surface stokes drift +'U-component surface stokes drift' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; + } +#V-component surface stokes drift +'V-component surface stokes drift' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; + } +#100 metre U wind component +'100 metre U wind component' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 246 ; + } +#100 metre V wind component +'100 metre V wind component' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 247 ; } diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index 8bb06bf69..b4d5e1eab 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -18650,13 +18650,13 @@ parameterCategory = 171 ; parameterNumber = 255 ; } -#Snow evaporation +#Time-mean snow evaporation rate '172044' = { discipline = 192 ; parameterCategory = 172 ; parameterNumber = 44 ; } -#Snowmelt +#Time-mean snowmelt rate '172045' = { discipline = 192 ; parameterCategory = 172 ; @@ -18746,13 +18746,13 @@ parameterCategory = 172 ; parameterNumber = 255 ; } -#Snow evaporation anomaly +#Time-mean snow evaporation anomalous rate of accumulation '173044' = { discipline = 192 ; parameterCategory = 173 ; parameterNumber = 44 ; } -#Snowmelt anomaly +#Time-mean snowmelt anomalous rate of accumulation '173045' = { discipline = 192 ; parameterCategory = 173 ; @@ -18872,7 +18872,7 @@ parameterCategory = 173 ; parameterNumber = 181 ; } -#Evaporation anomalous rate of accumulation +#Time-mean evaporation anomalous rate of accumulation '173182' = { discipline = 192 ; parameterCategory = 173 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def index df813254f..4206da68d 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def @@ -1,1779 +1,1780 @@ -#Surface net solar radiation, clear sky -'210' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 210 ; -} -#Surface net thermal radiation, clear sky -'211' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 211 ; -} -#Eastward sea water velocity -'151131' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 131 ; -} -#Northward sea water velocity -'151132' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 132 ; -} -#Sea-ice thickness -'174098' = { - discipline = 192 ; - parameterCategory = 174 ; - parameterNumber = 98 ; -} -#Sea surface height -'151145' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 145 ; -} -#100 metre U wind component -'228246' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 246 ; -} -#100 metre V wind component -'228247' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 247 ; -} -#100 metre wind speed -'228249' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 249 ; -} -#0 degrees C isothermal level (atm) -'228024' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 24 ; -} -#Depth of 20C isotherm -'151163' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 163 ; -} -#Average salinity in the upper 300m -'151175' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 175 ; -} +# Automatically generated by ./create_def.pl, do not edit #Total precipitation of at least 1 mm '131060' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 60 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 60 ; + } #Total precipitation of at least 5 mm '131061' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 61 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 61 ; + } #Total precipitation of at least 40 mm '131082' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 82 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 82 ; + } #Total precipitation of at least 60 mm '131083' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 83 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 83 ; + } #Total precipitation of at least 80 mm '131084' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 84 ; -} -#Total precipitation of at least 150 mm -'131086' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 86 ; -} -#Total precipitation of at least 200 mm -'131087' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 87 ; -} -#Total precipitation of at least 300 mm -'131088' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 88 ; -} -#Total column cloud liquid water -'78' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 78 ; -} -#Total column cloud ice water -'79' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 79 ; -} -#Top net solar radiation -'178' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 178 ; -} -#Temperature of snow layer -'238' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 238 ; -} -#Sea-ice cover -'31' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 31 ; -} -#Snow density -'33' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 33 ; -} -#Sea surface temperature -'34' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 34 ; -} -#Surface solar radiation downwards -'169' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 169 ; -} -#Surface thermal radiation downwards -'175' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 175 ; -} -#Eastward turbulent surface stress -'180' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 180 ; -} -#Northward turbulent surface stress -'181' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 181 ; -} -#Surface runoff -'174008' = { - discipline = 192 ; - parameterCategory = 174 ; - parameterNumber = 8 ; -} -#Direct solar radiation -'47' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 47 ; -} -#Lake total layer temperature -'228011' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 11 ; -} -#Lake mix-layer temperature -'228008' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 8 ; -} -#Lake mix-layer depth -'228009' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 9 ; -} -#Lake bottom temperature -'228010' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 10 ; -} -#Lake shape factor -'228012' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 12 ; -} -#Lake ice surface temperature -'228013' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 13 ; -} -#Lake ice total depth -'228014' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 14 ; -} -#Lake total depth -'228007' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 7 ; -} -#GEMS Ozone -'210203' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 203 ; -} -#GEMS Ozone -'211203' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 203 ; -} -#Carbon monoxide -'210123' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 123 ; -} -#Carbon monoxide -'211123' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 123 ; -} -#Nitrogen dioxide -'210121' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 121 ; -} -#Nitrogen dioxide -'211121' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 121 ; -} -#Sulphur dioxide -'210122' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 122 ; -} -#Sulphur dioxide -'211122' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 122 ; -} -#Ammonia -'217019' = { - discipline = 192 ; - parameterCategory = 217 ; - parameterNumber = 19 ; -} -#Nitrogen monoxide -'217027' = { - discipline = 192 ; - parameterCategory = 217 ; - parameterNumber = 27 ; -} -#Particulate matter d <= 1 um -'210072' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 72 ; -} -#Particulate matter d <= 2.5 um -'210073' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 73 ; -} -#Particulate matter d <= 10 um -'210074' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 74 ; -} -#Runoff -'205' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 205 ; -} -#Total column vertically-integrated water vapour -'137' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 137 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 84 ; + } #Total precipitation of at least 100 mm '131085' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 85 ; -} -#Mean zero-crossing wave period -'140221' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 221 ; -} -#Peak wave period -'140231' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 231 ; -} -#Instantaneous total lightning flash density -'228050' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 50 ; -} -#Averaged total lightning flash density in the last hour -'228051' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 51 ; -} -#Instantaneous cloud-to-ground lightning flash density -'228052' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 52 ; -} -#Averaged cloud-to-ground lightning flash density in the last hour -'228053' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 53 ; -} -#Averaged total lightning flash density in the last 3 hours -'228057' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 57 ; -} -#Averaged total lightning flash density in the last 6 hours -'228058' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 58 ; -} -#Averaged cloud-to-ground lightning flash density in the last 3 hours -'228059' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 59 ; -} -#Averaged cloud-to-ground lightning flash density in the last 6 hours -'228060' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 60 ; -} -#Eastward gravity wave surface stress -'195' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 195 ; -} -#Friction velocity -'228003' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 3 ; -} -#Instantaneous eastward turbulent surface stress -'229' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 229 ; -} -#Instantaneous northward turbulent surface stress -'230' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 230 ; -} -#Instantaneous surface sensible heat flux -'231' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 231 ; -} -#Instantaneous moisture flux -'232' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 232 ; -} -#Large-scale precipitation -'142' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 142 ; -} -#Large-scale precipitation fraction -'50' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 50 ; -} -#Northward gravity wave surface stress -'196' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 196 ; -} -#Snow evaporation -'44' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 44 ; -} -#Snowfall -'144' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 144 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 85 ; + } +#Total precipitation of at least 150 mm +'131086' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 86 ; + } +#Total precipitation of at least 200 mm +'131087' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 87 ; + } +#Total precipitation of at least 300 mm +'131088' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 88 ; + } #Surface runoff '8' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 8 ; -} -#TOA incident solar radiation -'212' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 212 ; -} -#Top net thermal radiation, clear sky -'209' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 209 ; -} -#Top net solar radiation, clear sky -'208' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 208 ; -} -#Total cloud cover -'164' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 164 ; -} -#Total column rain water -'228089' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 89 ; -} -#Total column snow water -'228090' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 90 ; -} -#Vertical integral of eastward water vapour flux -'162071' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 71 ; -} -#Vertical integral of northward water vapour flux -'162072' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 72 ; -} -#Snow albedo -'32' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 32 ; -} -#Ice temperature -'228094' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 94 ; -} -#Snowmelt -'45' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 45 ; -} -#Downward UV radiation at the surface -'57' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 57 ; -} -#Photosynthetically active radiation at the surface -'58' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 58 ; -} -#Boundary layer height -'159' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 159 ; -} -#Evaporation -'182' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 182 ; -} -#Low cloud cover -'186' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 186 ; -} -#Medium cloud cover -'187' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 187 ; -} -#High cloud cover -'188' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 188 ; -} -#Gravity wave dissipation -'197' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 197 ; -} -#Potential evaporation -'228251' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 251 ; -} -#Unbalanced component of temperature -'21' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 21 ; -} -#Unbalanced component of logarithm of surface pressure -'22' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 22 ; -} -#Unbalanced component of divergence -'23' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 23 ; -} -#10 metre wind gust in the last 3 hours -'228028' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 28 ; -} -#Forecast albedo -'243' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 243 ; -} -#Forecast surface roughness -'244' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 244 ; -} -#Flux of Carbon Dioxide Net Ecosystem Exchange -'228083' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 195 ; -} -#Accumulated Carbon Dioxide Net Ecosystem Exchange -'228080' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 192 ; - typeOfStatisticalProcessing = 1 ; -} -#Flux of Carbon Dioxide Gross Primary Production -'228084' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 197 ; -} -#Accumulated Carbon Dioxide Gross Primary Production -'228081' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 193 ; - typeOfStatisticalProcessing = 1 ; -} -#Flux of Carbon Dioxide Ecosystem Respiration -'228085' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 196 ; -} -#Accumulated Carbon Dioxide Ecosystem Respiration -'228082' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 194 ; - typeOfStatisticalProcessing = 1 ; -} -#Albedo (climatological) -'174' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 174 ; -} -#UV visible albedo for direct radiation (climatological) -'15' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 15 ; -} -#UV visible albedo for diffuse radiation (climatological) -'16' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 16 ; -} -#Near IR albedo for direct radiation (climatological) -'17' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 17 ; -} -#Near IR albedo for diffuse radiation (climatological) -'18' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 18 ; -} -#Standard deviation of filtered subgrid orography (climatological) -'74' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 74 ; -} -#Logarithm of surface roughness length for heat (climatological) -'234' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 234 ; -} -#UV visible albedo for direct radiation, isotropic component (climatological) -'210186' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 186 ; -} -#UV visible albedo for direct radiation, volumetric component (climatological) -'210187' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 187 ; -} -#UV visible albedo for direct radiation, geometric component (climatological) -'210188' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 188 ; -} -#Near IR albedo for direct radiation, isotropic component (climatological) -'210189' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 189 ; -} -#Near IR albedo for direct radiation, volumetric component (climatological) -'210190' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 190 ; -} -#Near IR albedo for direct radiation, geometric component (climatological) -'210191' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 191 ; -} -#Vertically integrated moisture divergence -'213' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 213 ; -} -#Vertically integrated moisture divergence flux -'162084' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 84 ; -} -#Forecast logarithm of surface roughness for heat -'245' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 245 ; -} -#10 metre u-component of neutral wind -'228131' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 131 ; -} -#V-component of neutral wind -'228132' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 132 ; -} -#Magnitude of turbulent surface stress -'48' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 48 ; -} -#Vertical integral of mass of atmosphere -'162053' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 53 ; -} -#Height of zero-degree wet-bulb temperature -'228047' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 47 ; -} -#Height of one-degree wet-bulb temperature -'228048' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 48 ; -} -#Surface photosynthetically active radiation, clear sky -'20' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 20 ; -} -#Surface direct short-wave radiation, clear sky -'228022' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 22 ; -} -#Duct base height -'228017' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 17 ; -} -#Trapping layer base height -'228018' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 18 ; -} -#Trapping layer top height -'228019' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 19 ; -} -#Mean vertical gradient of refractivity inside trapping layer -'228016' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 16 ; -} -#Minimum vertical gradient of refractivity inside trapping layer -'228015' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 15 ; -} -#Vertical integral of eastward heat flux -'162069' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 69 ; -} -#Vertical integral of northward heat flux -'162070' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 70 ; -} -#Vertical integral of potential+internal+latent energy -'162062' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 62 ; -} -#Skin reservoir content -'198' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 198 ; -} -#Skin reservoir content -'160198' = { - discipline = 192 ; - parameterCategory = 160 ; - parameterNumber = 198 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; + } #Sub-surface runoff '9' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 9 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 9 ; + } +#UV visible albedo for direct radiation (climatological) +'15' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 15 ; + } +#UV visible albedo for diffuse radiation (climatological) +'16' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 16 ; + } +#Near IR albedo for direct radiation (climatological) +'17' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 17 ; + } +#Near IR albedo for diffuse radiation (climatological) +'18' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 18 ; + } +#Surface photosynthetically active radiation, clear sky +'20' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 20 ; + } +#Unbalanced component of temperature +'21' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure +'22' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence +'23' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; + } +#Lake cover +'26' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } #Low vegetation cover '27' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 27 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 27 ; + } #High vegetation cover '28' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 28 ; -} -#Leaf area index, low vegetation -'66' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 66 ; -} -#Leaf area index, high vegetation -'67' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 67 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 28 ; + } #Type of low vegetation '29' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 29 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 29 ; + } #Type of high vegetation '30' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 30 ; -} -#Mean direction of total swell -'140238' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 238 ; -} -#Mean direction of wind waves -'140235' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 235 ; -} -#Charnock -'148' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 148 ; -} -#2D wave spectra (single) -'140251' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 251 ; -} -#Vertical integral of thermal energy -'162060' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 60 ; -} -#Vertical integral of potential+internal energy -'162061' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 61 ; -} -#Vertical integral of kinetic energy -'162059' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 59 ; -} -#Vertical integral of total energy -'162063' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 63 ; -} -#UV visible albedo for diffuse radiation, isotropic component (climatological) -'210192' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 192 ; -} -#UV visible albedo for diffuse radiation, volumetric component (climatological) -'210193' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 193 ; -} -#UV visible albedo for diffuse radiation, geometric component (climatological) -'210194' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 194 ; -} -#Near IR albedo for diffuse radiation, isotropic component (climatological) -'210195' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 195 ; -} -#Near IR albedo for diffuse radiation, volumetric component (climatological) -'210196' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 196 ; -} -#Near IR albedo for diffuse radiation, geometric component (climatological) -'210197' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 197 ; -} -#Time-integrated temperature tendency due to short-wave radiation -'162100' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 100 ; -} -#Time-integrated temperature tendency due to long-wave radiation -'162101' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 101 ; -} -#Time-integrated temperature tendency due to short wave radiation, clear sky -'162102' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 102 ; -} -#Time-integrated temperature tendency due to long-wave radiation, clear sky -'162103' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 103 ; -} -#Time-integrated updraught mass flux -'162104' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 104 ; -} -#Time-integrated downdraught mass flux -'162105' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 105 ; -} -#Time-integrated updraught detrainment rate -'162106' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 106 ; -} -#Time-integrated downdraught detrainment rate -'162107' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 107 ; -} -#Time-integrated total precipitation flux -'162108' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 108 ; -} -#Time-integrated turbulent diffusion coefficient for heat -'162109' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 109 ; -} -#Time-integrated temperature tendency due to parametrisations -'162110' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 110 ; -} -#Time-integrated specific humidity tendency due to parametrisations -'162111' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 111 ; -} -#Time-integrated eastward wind tendency due to parametrisations -'162112' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 112 ; -} -#Time-integrated northward wind tendency due to parametrisations -'162113' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 113 ; -} -#Period corresponding to maximum individual wave height -'140217' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 217 ; -} -#Maximum individual wave height -'140218' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 218 ; -} -#Model bathymetry -'140219' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 219 ; -} -#Mean wave period based on first moment -'140220' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 220 ; -} -#Wave spectral directional width -'140222' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 222 ; -} -#Mean wave period based on first moment for wind waves -'140223' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 223 ; -} -#Mean wave period based on second moment for wind waves -'140224' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 224 ; -} -#Wave spectral directional width for wind waves -'140225' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 225 ; -} -#Mean wave period based on first moment for swell -'140226' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 226 ; -} -#Mean wave period based on second moment for swell -'140227' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 227 ; -} -#Wave spectral directional width for swell -'140228' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 228 ; -} -#Coefficient of drag with waves -'140233' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 233 ; -} -#Significant height of total swell -'140237' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 237 ; -} -#Mean period of total swell -'140239' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 239 ; -} -#Mean square slope of waves -'140244' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 244 ; -} -#Benjamin-Feir index -'140253' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 253 ; -} -#Montgomery stream Function + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 30 ; + } +#Sea ice area fraction +'31' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 31 ; + } +#Snow albedo +'32' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; + } +#Snow density +'33' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 33 ; + } +#Sea surface temperature +'34' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 34 ; + } +#Snow evaporation +'44' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; + } +#Snowmelt +'45' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; + } +#Surface direct normal short-wave (solar) radiation +'47' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 47 ; + } +#Time-integrated magnitude of turbulent surface stress +'48' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 48 ; + } +#Large-scale precipitation fraction +'50' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; + } +#Montgomery potential '53' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 53 ; -} -#Water fraction -'26' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 26 ; -} -#Anisotropy of sub-gridscale orography -'161' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 161 ; -} -#Angle of sub-gridscale orography -'162' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 162 ; -} -#Slope of sub-gridscale orography -'163' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 163 ; -} -#U-component surface stokes drift -'140215' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 215 ; -} -#V-component surface stokes drift -'140216' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 216 ; -} -#Total column ozone -'206' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 206 ; -} -#Convective snowfall -'239' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 239 ; -} -#Large-scale snowfall -'240' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 240 ; -} -#Altimeter wave height -'140246' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 246 ; -} -#Altimeter corrected wave height -'140247' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 247 ; -} -#Altimeter range relative correction -'140248' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 248 ; -} -#Total sky direct solar radiation at surface -'228021' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 21 ; -} -#Surface solar radiation downward clear-sky -'228129' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 129 ; -} -#Surface thermal radiation downward clear-sky -'228130' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 130 ; -} -#Standard deviation of orography -'160' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 160 ; -} -#Cloud base height -'228023' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 23 ; -} -#Wave spectral kurtosis -'140252' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 252 ; -} -#10 metre wind speed -'140245' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 245 ; -} -#10 metre wind direction -'140249' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 249 ; -} -#Mean temperature at 2 metres -'228004' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 4 ; -} -#Mean surface net radiation flux -'172149' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 149 ; -} -#Surface net radiation -'149' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 149 ; -} -#Top net radiation -'150' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 150 ; -} -#Surface emissivity -'124' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 124 ; -} -#Vertical integral of water vapour -'162055' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 55 ; -} -#Snow depth -'190141' = { - discipline = 192 ; - parameterCategory = 190 ; - parameterNumber = 141 ; -} -#Mean total snowfall rate -'172144' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 144 ; -} -#Evaporation -'172182' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 182 ; -} -#Mean total precipitation rate -'172228' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 228 ; -} -#Mean large-scale precipitation rate -'172142' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 142 ; -} -#Mean convective precipitation rate -'172143' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 143 ; -} -#Mean runoff rate -'172205' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 205 ; -} -#Mean total cloud cover -'228006' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 6 ; -} -#Mean of 10 metre wind speed -'228005' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 5 ; -} -#Sea water potential temperature -'151129' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 129 ; -} -#Sea water practical salinity -'151130' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 130 ; -} -#Upward sea water velocity -'151133' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 133 ; -} -#Sea water sigma theta -'151138' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 138 ; -} -#Surface downward eastward stress -'151153' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 153 ; -} -#Surface downward northward stress -'151154' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 154 ; -} -#Surface geopotential -'162051' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 51 ; -} -#Vertical integral of temperature -'162054' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 54 ; -} -#Vertical integral of cloud liquid water -'162056' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 56 ; -} -#Vertical integral of cloud frozen water -'162057' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 57 ; -} -#Vertical integral of ozone -'162058' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 58 ; -} -#Vertical integral of energy conversion -'162064' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 64 ; -} -#Vertical integral of eastward mass flux -'162065' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 65 ; -} -#Vertical integral of northward mass flux -'162066' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 66 ; -} -#Vertical integral of eastward kinetic energy flux -'162067' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 67 ; -} -#Vertical integral of northward kinetic energy flux -'162068' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 68 ; -} -#Vertical integral of eastward geopotential flux -'162073' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 73 ; -} -#Vertical integral of northward geopotential flux -'162074' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 74 ; -} -#Vertical integral of eastward total energy flux -'162075' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 75 ; -} -#Vertical integral of northward total energy flux -'162076' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 76 ; -} -#Vertical integral of eastward ozone flux -'162077' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 77 ; -} -#Vertical integral of northward ozone flux -'162078' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 78 ; -} -#Vertical integral of divergence of mass flux -'162081' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 81 ; -} -#Vertical integral of divergence of kinetic energy flux -'162082' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 82 ; -} -#Vertical integral of divergence of thermal energy flux -'162083' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 83 ; -} -#Vertical integral of divergence of geopotential flux -'162085' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 85 ; -} -#Vertical integral of divergence of total energy flux -'162086' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 86 ; -} -#Vertical integral of divergence of ozone flux -'162087' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 87 ; -} -#Variance of geopotential -'162206' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 206 ; -} -#Covariance of geopotential/temperature -'162207' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 207 ; -} -#Variance of temperature -'162208' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 208 ; -} -#Covariance of geopotential/specific humidity -'162209' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 209 ; -} -#Covariance of temperature/specific humidity -'162210' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 210 ; -} -#Variance of specific humidity -'162211' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 211 ; -} -#Covariance of u component/geopotential -'162212' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 212 ; -} -#Covariance of u component/temperature -'162213' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 213 ; -} -#Covariance of u component/specific humidity -'162214' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 214 ; -} -#Variance of u component -'162215' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 215 ; -} -#Mean vertical velocity -'130232' = { - discipline = 192 ; - parameterCategory = 130 ; - parameterNumber = 232 ; -} -#Mean surface sensible heat flux -'172146' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 146 ; -} -#Mean surface latent heat flux -'172147' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 147 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; + } #Mean temperature at 2 metres in the last 24 hours '55' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 55 ; -} -#Mean 2 metre temperature in the last 24 hours gradient -'129055' = { - discipline = 192 ; - parameterCategory = 129 ; - parameterNumber = 55 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 55 ; + } #Mean 2 metre dewpoint temperature in the last 24 hours '56' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 56 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 56 ; + } +#Surface downward UV radiation +'57' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface +'58' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; + } +#Leaf area index, low vegetation +'66' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'67' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 67 ; + } +#Standard deviation of filtered subgrid orography (climatological) +'74' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 74 ; + } +#Total column cloud liquid water +'78' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 78 ; + } +#Total column cloud ice water +'79' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 79 ; + } +#Surface emissivity +'124' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 124 ; + } +#Total column vertically-integrated water vapour +'137' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 137 ; + } +#Large-scale precipitation +'142' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; + } +#Snowfall +'144' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; + } +#Charnock +'148' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 148 ; + } +#Surface net radiation (SW and LW) +'149' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 149 ; + } +#Top net radiation (SW and LW) +'150' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 150 ; + } +#Boundary layer height +'159' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; + } +#Standard deviation of sub-gridscale orography +'160' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography +'161' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography +'162' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography +'163' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; + } +#Total cloud cover +'164' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; + } +#Surface short-wave (solar) radiation downwards +'169' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 169 ; + } +#Albedo (climatological) +'174' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 174 ; + } +#Surface long-wave (thermal) radiation downwards +'175' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 175 ; + } +#Top net short-wave (solar) radiation +'178' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 178 ; + } +#Time-integrated eastward turbulent surface stress +'180' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 180 ; + } +#Time-integrated northward turbulent surface stress +'181' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 181 ; + } +#Evaporation +'182' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; + } +#Low cloud cover +'186' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; + } +#Medium cloud cover +'187' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; + } +#High cloud cover +'188' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; + } +#Eastward gravity wave surface stress +'195' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; + } +#Northward gravity wave surface stress +'196' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation +'197' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; + } +#Skin reservoir content +'198' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 198 ; + } +#Runoff +'205' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 205 ; + } +#Total column ozone +'206' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; + } +#Top net short-wave (solar) radiation, clear sky +'208' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; + } +#Top net long-wave (thermal) radiation, clear sky +'209' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; + } +#Surface net short-wave (solar) radiation, clear sky +'210' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 210 ; + } +#Surface net long-wave (thermal) radiation, clear sky +'211' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 211 ; + } +#TOA incident short-wave (solar) radiation +'212' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; + } +#Vertically integrated moisture divergence +'213' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 213 ; + } +#Instantaneous eastward turbulent surface stress +'229' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; + } +#Instantaneous northward turbulent surface stress +'230' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; + } +#Instantaneous surface sensible heat net flux +'231' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux +'232' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; + } +#Logarithm of surface roughness length for heat (climatological) +'234' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 234 ; + } +#Temperature of snow layer +'238' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 238 ; + } +#Convective snowfall +'239' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; + } +#Large-scale snowfall +'240' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; + } +#Forecast albedo +'243' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 243 ; + } +#Forecast surface roughness +'244' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat +'245' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 245 ; + } +#Mean surface net radiation flux +'172149' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 149 ; + } +#Particulate matter d <= 1 um +'210072' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 72 ; + } +#Particulate matter d <= 2.5 um +'210073' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 73 ; + } +#Particulate matter d <= 10 um +'210074' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 74 ; + } +#UV visible albedo for direct radiation, isotropic component (climatological) +'210186' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 186 ; + } +#UV visible albedo for direct radiation, volumetric component (climatological) +'210187' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 187 ; + } +#UV visible albedo for direct radiation, geometric component (climatological) +'210188' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 188 ; + } +#Near IR albedo for direct radiation, isotropic component (climatological) +'210189' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 189 ; + } +#Near IR albedo for direct radiation, volumetric component (climatological) +'210190' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 190 ; + } +#Near IR albedo for direct radiation, geometric component (climatological) +'210191' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 191 ; + } +#UV visible albedo for diffuse radiation, isotropic component (climatological) +'210192' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; + } +#UV visible albedo for diffuse radiation, volumetric component (climatological) +'210193' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; + } +#UV visible albedo for diffuse radiation, geometric component (climatological) +'210194' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; + } +#Near IR albedo for diffuse radiation, isotropic component (climatological) +'210195' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; + } +#Near IR albedo for diffuse radiation, volumetric component (climatological) +'210196' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; + } +#Near IR albedo for diffuse radiation, geometric component (climatological) +'210197' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; + } +#Ammonia mass mixing ratio +'217019' = { + discipline = 192 ; + parameterCategory = 217 ; + parameterNumber = 19 ; + } +#Nitrogen monoxide mass mixing ratio +'217027' = { + discipline = 192 ; + parameterCategory = 217 ; + parameterNumber = 27 ; + } +#Surface direct short-wave (solar) radiation +'228021' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; + } +#Surface direct short-wave radiation, clear sky +'228022' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 22 ; + } +#Cloud base height +'228023' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; + } +#0 degrees C isothermal level (atm) +'228024' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 24 ; + } +#Maximum 10 metre wind gust in the last 3 hours +'228028' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; + } +#Height of zero-degree wet-bulb temperature +'228047' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 47 ; + } +#Height of one-degree wet-bulb temperature +'228048' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 48 ; + } +#Instantaneous total lightning flash density +'228050' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 50 ; + } +#Averaged total lightning flash density in the last hour +'228051' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 51 ; + } +#Instantaneous cloud-to-ground lightning flash density +'228052' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 52 ; + } +#Averaged cloud-to-ground lightning flash density in the last hour +'228053' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 53 ; + } +#Averaged total lightning flash density in the last 3 hours +'228057' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 57 ; + } +#Averaged total lightning flash density in the last 6 hours +'228058' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 58 ; + } +#Averaged cloud-to-ground lightning flash density in the last 3 hours +'228059' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 59 ; + } +#Averaged cloud-to-ground lightning flash density in the last 6 hours +'228060' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 60 ; + } +#Accumulated Carbon Dioxide Net Ecosystem Exchange +'228080' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated Carbon Dioxide Gross Primary Production +'228081' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated Carbon Dioxide Ecosystem Respiration +'228082' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 1 ; + } +#Carbon dioxide net ecosystem exchange flux +'228083' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#Carbon dioxide gross primary production flux +'228084' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#Carbon dioxide ecosystem respiration flux +'228085' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#Total column rain water +'228089' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; + } +#Total column snow water +'228090' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; + } +#Ice temperature +'228094' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; + } +#Surface short-wave (solar) radiation downward clear-sky +'228129' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; + } +#Surface long-wave (thermal) radiation downward clear-sky +'228130' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; + } +#100 metre wind speed +'228249' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 249 ; + } +#Potential evaporation +'228251' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; + } +#Mean 2 metre temperature in the last 24 hours gradient +'129055' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 55 ; + } #Mean 2 metre dewpoint temperature in the last 24 hours gradient '129056' = { - discipline = 192 ; - parameterCategory = 129 ; - parameterNumber = 56 ; -} -#Mean surface downward solar radiation flux -'172169' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 169 ; -} -#Mean surface downward thermal radiation flux -'172175' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 175 ; -} -#Mean surface net solar radiation flux -'172176' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 176 ; -} -#Mean surface net thermal radiation flux -'172177' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 177 ; -} -#Mean top net solar radiation flux -'172178' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 178 ; -} -#Mean top net thermal radiation flux -'172179' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 179 ; -} -#East-West surface stress rate of accumulation -'172180' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 180 ; -} -#North-South surface stress rate of accumulation -'172181' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 181 ; -} + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 56 ; + } +#Mean vertical velocity +'130232' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 232 ; + } +#Period corresponding to maximum individual wave height +'140217' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; + } +#Envelop-maximum individual wave height +'140218' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; + } +#Model bathymetry +'140219' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; + } +#Mean wave period based on first moment +'140220' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; + } +#Mean zero-crossing wave period +'140221' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 221 ; + } +#Wave spectral directional width +'140222' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; + } +#Mean wave period based on first moment for wind waves +'140223' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; + } +#Mean wave period based on second moment for wind waves +'140224' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; + } +#Wave spectral directional width for wind waves +'140225' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; + } +#Mean wave period based on first moment for swell +'140226' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; + } +#Mean wave period based on second moment for swell +'140227' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; + } +#Wave spectral directional width for swell +'140228' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; + } +#Peak wave period +'140231' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 231 ; + } +#Coefficient of drag with waves +'140233' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; + } +#Mean direction of wind waves +'140235' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 235 ; + } +#Significant height of total swell +'140237' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; + } +#Mean direction of total swell +'140238' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 238 ; + } +#Mean period of total swell +'140239' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; + } #Standard deviation wave height '140240' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 240 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 240 ; + } #Mean of 10 metre wind speed '140241' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 241 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 241 ; + } #Mean wind direction '140242' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 242 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 242 ; + } #Standard deviation of 10 metre wind speed '140243' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 243 ; -} -#Top net solar radiation, clear sky -'172208' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 208 ; -} -#Top net thermal radiation, clear sky -'172209' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 209 ; -} -#Surface net solar radiation, clear sky -'172210' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 210 ; -} -#Surface net thermal radiation, clear sky -'172211' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 211 ; -} -#Solar insolation rate of accumulation -'172212' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 212 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 243 ; + } +#Mean square slope of waves +'140244' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; + } +#10 metre wind speed +'140245' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; + } +#Altimeter wave height +'140246' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; + } +#Altimeter corrected wave height +'140247' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; + } +#Altimeter range relative correction +'140248' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; + } +#10 metre wind direction +'140249' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; + } +#2D wave spectra (single) +'140251' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 251 ; + } +#Wave spectral kurtosis +'140252' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; + } +#Benjamin-Feir index +'140253' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; + } #Wave spectral peakedness '140254' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 254 ; + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 254 ; + } +#Sea water potential temperature +'151129' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 129 ; + } +#Sea water practical salinity +'151130' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 130 ; + } +#Eastward surface sea water velocity +'151131' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 131 ; + } +#Northward surface sea water velocity +'151132' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 132 ; + } +#Upward sea water velocity +'151133' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 133 ; + } +#Sea water sigma theta +'151138' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 138 ; + } +#Sea surface height +'151145' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 145 ; + } +#Surface downward eastward stress +'151153' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 153 ; + } +#Surface downward northward stress +'151154' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 154 ; + } +#Depth of 20C isotherm +'151163' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 163 ; + } +#Average sea water practical salinity in the upper 300m +'151175' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 175 ; + } +#Skin reservoir content +'160198' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 198 ; + } +#Surface geopotential +'162051' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 51 ; + } +#Total column vertically-integrated mass of atmosphere +'162053' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 53 ; + } +#Total column vertically-integrated temperature +'162054' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 54 ; + } +#Total column vertically-integrated water vapour +'162055' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 55 ; + } +#Total column vertically-integrated cloud liquid water +'162056' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 56 ; + } +#Total column vertically-integrated cloud frozen water +'162057' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 57 ; + } +#Total column vertically-integrated ozone +'162058' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 58 ; + } +#Total column vertically-integrated kinetic energy +'162059' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 59 ; + } +#Total column vertically-integrated enthalpy +'162060' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 60 ; + } +#Total column vertically-integrated potential + internal energy +'162061' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 61 ; + } +#Total column vertically-integrated potential+internal+latent energy +'162062' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 62 ; + } +#Total column vertically-integrated total energy +'162063' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 63 ; + } +#Total column vertically-integrated energy conversion +'162064' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 64 ; + } +#Total column vertically-integrated eastward mass flux +'162065' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 65 ; + } +#Total column vertically-integrated northward mass flux +'162066' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 66 ; + } +#Total column vertically-integrated eastward kinetic energy flux +'162067' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 67 ; + } +#Total column vertically-integrated northward kinetic energy flux +'162068' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 68 ; + } +#Total column vertically-integrated eastward heat flux +'162069' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 69 ; + } +#Total column vertically-integrated northward heat flux +'162070' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 70 ; + } +#Total column vertically-integrated eastward water vapour flux +'162071' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; + } +#Total column vertically-integrated northward water vapour flux +'162072' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; + } +#Total column vertically-integrated eastward geopotential flux +'162073' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 73 ; + } +#Total column vertically-integrated northward geopotential flux +'162074' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 74 ; + } +#Total column vertically-integrated eastward total energy flux +'162075' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 75 ; + } +#Total column vertically-integrated northward total energy flux +'162076' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 76 ; + } +#Total column vertically-integrated eastward ozone flux +'162077' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 77 ; + } +#Total column vertically-integrated northward ozone flux +'162078' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 78 ; + } +#Total column vertically-integrated divergence of mass flux +'162081' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 81 ; + } +#Total column vertically-integrated divergence of kinetic energy flux +'162082' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 82 ; + } +#Total column vertically-integrated divergence of thermal energy flux +'162083' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 83 ; + } +#Total column vertically-integrated moisture divergence flux +'162084' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 84 ; + } +#Total column vertically-integrated divergence of geopotential flux +'162085' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 85 ; + } +#Total column vertically-integrated divergence of total energy flux +'162086' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 86 ; + } +#Total column vertically-integrated divergence of ozone flux +'162087' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 87 ; + } +#Time-integrated temperature tendency due to short-wave radiation +'162100' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; + } +#Time-integrated temperature tendency due to long-wave radiation +'162101' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; + } +#Time-integrated temperature tendency due to short wave radiation, clear sky +'162102' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; + } +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'162103' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; + } +#Time-integrated updraught mass flux +'162104' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; + } +#Time-integrated downdraught mass flux +'162105' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; + } +#Time-integrated updraught detrainment rate +'162106' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; + } +#Time-integrated downdraught detrainment rate +'162107' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; + } +#Time-integrated total precipitation flux +'162108' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; + } +#Time-integrated turbulent diffusion coefficient for heat +'162109' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; + } +#Time-integrated temperature tendency due to parametrisations +'162110' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; + } +#Time-integrated specific humidity tendency due to parametrisations +'162111' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; + } +#Time-integrated eastward wind tendency due to parametrisations +'162112' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; + } +#Time-integrated northward wind tendency due to parametrisations +'162113' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; + } +#Variance of geopotential +'162206' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 206 ; + } +#Covariance of geopotential/temperature +'162207' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 207 ; + } +#Variance of temperature +'162208' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 208 ; + } +#Covariance of geopotential/specific humidity +'162209' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 209 ; + } +#Covariance of temperature/specific humidity +'162210' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 210 ; + } +#Variance of specific humidity +'162211' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 211 ; + } +#Covariance of u component/geopotential +'162212' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 212 ; + } +#Covariance of u component/temperature +'162213' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 213 ; + } +#Covariance of u component/specific humidity +'162214' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 214 ; + } +#Variance of u component +'162215' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 215 ; + } +#Mean large-scale precipitation rate +'172142' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; + } +#Mean convective precipitation rate +'172143' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; + } +#Mean total snowfall rate +'172144' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 144 ; + } +#Mean surface sensible heat flux +'172146' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 146 ; + } +#Mean surface latent heat flux +'172147' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 147 ; + } +#Mean surface downward solar radiation flux +'172169' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 169 ; + } +#Mean surface downward thermal radiation flux +'172175' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 175 ; + } +#Mean surface net solar radiation flux +'172176' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 176 ; + } +#Mean surface net thermal radiation flux +'172177' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 177 ; + } +#Mean top net solar radiation flux +'172178' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 178 ; + } +#Mean top net thermal radiation flux +'172179' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 179 ; + } +#East-West surface stress rate of accumulation +'172180' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 180 ; + } +#North-South surface stress rate of accumulation +'172181' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 181 ; + } +#Evaporation +'172182' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 182 ; + } +#Mean runoff rate +'172205' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky +'172208' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky +'172209' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky +'172210' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky +'172211' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 211 ; + } +#Solar insolation rate of accumulation +'172212' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 212 ; + } +#Mean total precipitation rate +'172228' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 228 ; + } +#Surface runoff +'174008' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 8 ; + } +#Sea-ice thickness +'174098' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 98 ; + } +#Snow depth +'190141' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 141 ; + } +#Nitrogen dioxide mass mixing ratio +'210121' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 121 ; + } +#Sulphur dioxide mass mixing ratio +'210122' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 122 ; + } +#Carbon monoxide mass mixing ratio +'210123' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 123 ; + } +#Ozone mass mixing ratio (full chemistry scheme) +'210203' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 203 ; + } +#Nitrogen dioxide mass mixing ratio difference +'211121' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 121 ; + } +#Sulphur dioxide mass mixing ratio difference +'211122' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 122 ; + } +#Carbon monoxide mass mixing ratio difference +'211123' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 123 ; + } +#Ozone mass mixing ratio difference (full chemistry scheme) +'211203' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 203 ; + } +#Friction velocity +'228003' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; + } +#Time-mean 2 metre temperature +'228004' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 4 ; + } +#Time-mean 10 metre wind speed +'228005' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; + } +#Mean total cloud cover +'228006' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; + } +#Lake total depth +'228007' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 7 ; + } +#Lake mix-layer temperature +'228008' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 8 ; + } +#Lake mix-layer depth +'228009' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 9 ; + } +#Lake bottom temperature +'228010' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 10 ; + } +#Lake total layer temperature +'228011' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 11 ; + } +#Lake shape factor +'228012' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 12 ; + } +#Lake ice surface temperature +'228013' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 13 ; + } +#Lake ice total depth +'228014' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 14 ; + } +#Minimum vertical gradient of refractivity inside trapping layer +'228015' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 15 ; + } +#Mean vertical gradient of refractivity inside trapping layer +'228016' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 16 ; + } +#Duct base height +'228017' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 17 ; + } +#Trapping layer base height +'228018' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 18 ; + } +#Trapping layer top height +'228019' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 19 ; + } +#10 metre u-component of neutral wind +'228131' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 131 ; + } +#10 metre v-component of neutral wind +'228132' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 132 ; + } +#U-component surface stokes drift +'140215' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; + } +#V-component surface stokes drift +'140216' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; + } +#100 metre U wind component +'228246' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 246 ; + } +#100 metre V wind component +'228247' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 247 ; } diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 2f4055501..92cd6d219 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -18650,13 +18650,13 @@ parameterCategory = 171 ; parameterNumber = 255 ; } -#Snow evaporation +#Time-mean snow evaporation rate 'esrate' = { discipline = 192 ; parameterCategory = 172 ; parameterNumber = 44 ; } -#Snowmelt +#Time-mean snowmelt rate '~' = { discipline = 192 ; parameterCategory = 172 ; @@ -18746,13 +18746,13 @@ parameterCategory = 172 ; parameterNumber = 255 ; } -#Snow evaporation anomaly +#Time-mean snow evaporation anomalous rate of accumulation '~' = { discipline = 192 ; parameterCategory = 173 ; parameterNumber = 44 ; } -#Snowmelt anomaly +#Time-mean snowmelt anomalous rate of accumulation '~' = { discipline = 192 ; parameterCategory = 173 ; @@ -18872,7 +18872,7 @@ parameterCategory = 173 ; parameterNumber = 181 ; } -#Evaporation anomalous rate of accumulation +#Time-mean evaporation anomalous rate of accumulation 'evara' = { discipline = 192 ; parameterCategory = 173 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def index 498f6a3c1..2e9a391ed 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def @@ -1,1779 +1,1780 @@ -#Surface net solar radiation, clear sky -'ssrc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 210 ; -} -#Surface net thermal radiation, clear sky -'strc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 211 ; -} -#Eastward sea water velocity -'ocu' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 131 ; -} -#Northward sea water velocity -'ocv' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 132 ; -} -#Sea-ice thickness -'sithick' = { - discipline = 192 ; - parameterCategory = 174 ; - parameterNumber = 98 ; -} -#Sea surface height -'zos' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 145 ; -} -#100 metre U wind component -'100u' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 246 ; -} -#100 metre V wind component -'100v' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 247 ; -} -#100 metre wind speed -'100si' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 249 ; -} -#0 degrees C isothermal level (atm) -'deg0l' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 24 ; -} -#Depth of 20C isotherm -'t20d' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 163 ; -} -#Average salinity in the upper 300m -'sav300' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 175 ; -} +# Automatically generated by ./create_def.pl, do not edit #Total precipitation of at least 1 mm 'tpg1' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 60 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 60 ; + } #Total precipitation of at least 5 mm 'tpg5' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 61 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 61 ; + } #Total precipitation of at least 40 mm 'tpg40' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 82 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 82 ; + } #Total precipitation of at least 60 mm 'tpg60' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 83 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 83 ; + } #Total precipitation of at least 80 mm 'tpg80' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 84 ; -} -#Total precipitation of at least 150 mm -'tpg150' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 86 ; -} -#Total precipitation of at least 200 mm -'tpg200' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 87 ; -} -#Total precipitation of at least 300 mm -'tpg300' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 88 ; -} -#Total column cloud liquid water -'tclw' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 78 ; -} -#Total column cloud ice water -'tciw' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 79 ; -} -#Top net solar radiation -'tsr' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 178 ; -} -#Temperature of snow layer -'tsn' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 238 ; -} -#Sea-ice cover -'ci' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 31 ; -} -#Snow density -'rsn' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 33 ; -} -#Sea surface temperature -'sst' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 34 ; -} -#Surface solar radiation downwards -'ssrd' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 169 ; -} -#Surface thermal radiation downwards -'strd' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 175 ; -} -#Eastward turbulent surface stress -'ewss' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 180 ; -} -#Northward turbulent surface stress -'nsss' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 181 ; -} -#Surface runoff -'sro' = { - discipline = 192 ; - parameterCategory = 174 ; - parameterNumber = 8 ; -} -#Direct solar radiation -'dsrp' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 47 ; -} -#Lake total layer temperature -'ltlt' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 11 ; -} -#Lake mix-layer temperature -'lmlt' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 8 ; -} -#Lake mix-layer depth -'lmld' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 9 ; -} -#Lake bottom temperature -'lblt' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 10 ; -} -#Lake shape factor -'lshf' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 12 ; -} -#Lake ice surface temperature -'lict' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 13 ; -} -#Lake ice total depth -'licd' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 14 ; -} -#Lake total depth -'dl' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 7 ; -} -#GEMS Ozone -'go3' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 203 ; -} -#GEMS Ozone -'go3diff' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 203 ; -} -#Carbon monoxide -'co' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 123 ; -} -#Carbon monoxide -'codiff' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 123 ; -} -#Nitrogen dioxide -'no2' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 121 ; -} -#Nitrogen dioxide -'no2diff' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 121 ; -} -#Sulphur dioxide -'so2' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 122 ; -} -#Sulphur dioxide -'so2diff' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 122 ; -} -#Ammonia -'nh3' = { - discipline = 192 ; - parameterCategory = 217 ; - parameterNumber = 19 ; -} -#Nitrogen monoxide -'no' = { - discipline = 192 ; - parameterCategory = 217 ; - parameterNumber = 27 ; -} -#Particulate matter d <= 1 um -'pm1' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 72 ; -} -#Particulate matter d <= 2.5 um -'pm2p5' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 73 ; -} -#Particulate matter d <= 10 um -'pm10' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 74 ; -} -#Runoff -'ro' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 205 ; -} -#Total column vertically-integrated water vapour -'tcwv' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 137 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 84 ; + } #Total precipitation of at least 100 mm 'tpg100' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 85 ; -} -#Mean zero-crossing wave period -'mp2' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 221 ; -} -#Peak wave period -'pp1d' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 231 ; -} -#Instantaneous total lightning flash density -'litoti' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 50 ; -} -#Averaged total lightning flash density in the last hour -'litota1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 51 ; -} -#Instantaneous cloud-to-ground lightning flash density -'licgi' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 52 ; -} -#Averaged cloud-to-ground lightning flash density in the last hour -'licga1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 53 ; -} -#Averaged total lightning flash density in the last 3 hours -'litota3' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 57 ; -} -#Averaged total lightning flash density in the last 6 hours -'litota6' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 58 ; -} -#Averaged cloud-to-ground lightning flash density in the last 3 hours -'licga3' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 59 ; -} -#Averaged cloud-to-ground lightning flash density in the last 6 hours -'licga6' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 60 ; -} -#Eastward gravity wave surface stress -'lgws' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 195 ; -} -#Friction velocity -'zust' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 3 ; -} -#Instantaneous eastward turbulent surface stress -'iews' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 229 ; -} -#Instantaneous northward turbulent surface stress -'inss' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 230 ; -} -#Instantaneous surface sensible heat flux -'ishf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 231 ; -} -#Instantaneous moisture flux -'ie' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 232 ; -} -#Large-scale precipitation -'lsp' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 142 ; -} -#Large-scale precipitation fraction -'lspf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 50 ; -} -#Northward gravity wave surface stress -'mgws' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 196 ; -} -#Snow evaporation -'es' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 44 ; -} -#Snowfall -'sf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 144 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 85 ; + } +#Total precipitation of at least 150 mm +'tpg150' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 86 ; + } +#Total precipitation of at least 200 mm +'tpg200' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 87 ; + } +#Total precipitation of at least 300 mm +'tpg300' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 88 ; + } #Surface runoff 'sro' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 8 ; -} -#TOA incident solar radiation -'tisr' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 212 ; -} -#Top net thermal radiation, clear sky -'ttrc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 209 ; -} -#Top net solar radiation, clear sky -'tsrc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 208 ; -} -#Total cloud cover -'tcc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 164 ; -} -#Total column rain water -'tcrw' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 89 ; -} -#Total column snow water -'tcsw' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 90 ; -} -#Vertical integral of eastward water vapour flux -'viwve' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 71 ; -} -#Vertical integral of northward water vapour flux -'viwvn' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 72 ; -} -#Snow albedo -'asn' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 32 ; -} -#Ice temperature -'ist' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 94 ; -} -#Snowmelt -'smlt' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 45 ; -} -#Downward UV radiation at the surface -'uvb' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 57 ; -} -#Photosynthetically active radiation at the surface -'par' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 58 ; -} -#Boundary layer height -'blh' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 159 ; -} -#Evaporation -'e' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 182 ; -} -#Low cloud cover -'lcc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 186 ; -} -#Medium cloud cover -'mcc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 187 ; -} -#High cloud cover -'hcc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 188 ; -} -#Gravity wave dissipation -'gwd' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 197 ; -} -#Potential evaporation -'pev' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 251 ; -} -#Unbalanced component of temperature -'uctp' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 21 ; -} -#Unbalanced component of logarithm of surface pressure -'ucln' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 22 ; -} -#Unbalanced component of divergence -'ucdv' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 23 ; -} -#10 metre wind gust in the last 3 hours -'10fg3' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 28 ; -} -#Forecast albedo -'fal' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 243 ; -} -#Forecast surface roughness -'fsr' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 244 ; -} -#Flux of Carbon Dioxide Net Ecosystem Exchange -'fco2nee' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 195 ; -} -#Accumulated Carbon Dioxide Net Ecosystem Exchange -'aco2nee' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 192 ; - typeOfStatisticalProcessing = 1 ; -} -#Flux of Carbon Dioxide Gross Primary Production -'fco2gpp' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 197 ; -} -#Accumulated Carbon Dioxide Gross Primary Production -'aco2gpp' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 193 ; - typeOfStatisticalProcessing = 1 ; -} -#Flux of Carbon Dioxide Ecosystem Respiration -'fco2rec' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 196 ; -} -#Accumulated Carbon Dioxide Ecosystem Respiration -'aco2rec' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 194 ; - typeOfStatisticalProcessing = 1 ; -} -#Albedo (climatological) -'al' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 174 ; -} -#UV visible albedo for direct radiation (climatological) -'aluvp' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 15 ; -} -#UV visible albedo for diffuse radiation (climatological) -'aluvd' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 16 ; -} -#Near IR albedo for direct radiation (climatological) -'alnip' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 17 ; -} -#Near IR albedo for diffuse radiation (climatological) -'alnid' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 18 ; -} -#Standard deviation of filtered subgrid orography (climatological) -'sdfor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 74 ; -} -#Logarithm of surface roughness length for heat (climatological) -'lsrh' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 234 ; -} -#UV visible albedo for direct radiation, isotropic component (climatological) -'aluvpi' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 186 ; -} -#UV visible albedo for direct radiation, volumetric component (climatological) -'aluvpv' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 187 ; -} -#UV visible albedo for direct radiation, geometric component (climatological) -'aluvpg' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 188 ; -} -#Near IR albedo for direct radiation, isotropic component (climatological) -'alnipi' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 189 ; -} -#Near IR albedo for direct radiation, volumetric component (climatological) -'alnipv' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 190 ; -} -#Near IR albedo for direct radiation, geometric component (climatological) -'alnipg' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 191 ; -} -#Vertically integrated moisture divergence -'vimd' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 213 ; -} -#Vertically integrated moisture divergence flux -'viwvd' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 84 ; -} -#Forecast logarithm of surface roughness for heat -'flsr' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 245 ; -} -#10 metre u-component of neutral wind -'u10n' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 131 ; -} -#V-component of neutral wind -'v10n' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 132 ; -} -#Magnitude of turbulent surface stress -'magss' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 48 ; -} -#Vertical integral of mass of atmosphere -'vima' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 53 ; -} -#Height of zero-degree wet-bulb temperature -'hwbt0' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 47 ; -} -#Height of one-degree wet-bulb temperature -'hwbt1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 48 ; -} -#Surface photosynthetically active radiation, clear sky -'parcs' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 20 ; -} -#Surface direct short-wave radiation, clear sky -'cdir' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 22 ; -} -#Duct base height -'dctb' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 17 ; -} -#Trapping layer base height -'tplb' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 18 ; -} -#Trapping layer top height -'tplt' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 19 ; -} -#Mean vertical gradient of refractivity inside trapping layer -'dndza' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 16 ; -} -#Minimum vertical gradient of refractivity inside trapping layer -'dndzn' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 15 ; -} -#Vertical integral of eastward heat flux -'vithee' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 69 ; -} -#Vertical integral of northward heat flux -'vithen' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 70 ; -} -#Vertical integral of potential+internal+latent energy -'vipile' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 62 ; -} -#Skin reservoir content -'src' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 198 ; -} -#Skin reservoir content -'srcrea' = { - discipline = 192 ; - parameterCategory = 160 ; - parameterNumber = 198 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; + } #Sub-surface runoff 'ssro' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 9 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 9 ; + } +#UV visible albedo for direct radiation (climatological) +'aluvp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 15 ; + } +#UV visible albedo for diffuse radiation (climatological) +'aluvd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 16 ; + } +#Near IR albedo for direct radiation (climatological) +'alnip' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 17 ; + } +#Near IR albedo for diffuse radiation (climatological) +'alnid' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 18 ; + } +#Surface photosynthetically active radiation, clear sky +'parcs' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 20 ; + } +#Unbalanced component of temperature +'uctp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure +'ucln' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence +'ucdv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; + } +#Lake cover +'cl' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } #Low vegetation cover 'cvl' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 27 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 27 ; + } #High vegetation cover 'cvh' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 28 ; -} -#Leaf area index, low vegetation -'lai_lv' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 66 ; -} -#Leaf area index, high vegetation -'lai_hv' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 67 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 28 ; + } #Type of low vegetation 'tvl' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 29 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 29 ; + } #Type of high vegetation 'tvh' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 30 ; -} -#Mean direction of total swell -'mdts' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 238 ; -} -#Mean direction of wind waves -'mdww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 235 ; -} -#Charnock -'chnk' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 148 ; -} -#2D wave spectra (single) -'2dfd' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 251 ; -} -#Vertical integral of thermal energy -'vithe' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 60 ; -} -#Vertical integral of potential+internal energy -'vipie' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 61 ; -} -#Vertical integral of kinetic energy -'vike' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 59 ; -} -#Vertical integral of total energy -'vitoe' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 63 ; -} -#UV visible albedo for diffuse radiation, isotropic component (climatological) -'aluvdi' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 192 ; -} -#UV visible albedo for diffuse radiation, volumetric component (climatological) -'aluvdv' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 193 ; -} -#UV visible albedo for diffuse radiation, geometric component (climatological) -'aluvdg' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 194 ; -} -#Near IR albedo for diffuse radiation, isotropic component (climatological) -'alnidi' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 195 ; -} -#Near IR albedo for diffuse radiation, volumetric component (climatological) -'alnidv' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 196 ; -} -#Near IR albedo for diffuse radiation, geometric component (climatological) -'alnidg' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 197 ; -} -#Time-integrated temperature tendency due to short-wave radiation -'srta' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 100 ; -} -#Time-integrated temperature tendency due to long-wave radiation -'trta' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 101 ; -} -#Time-integrated temperature tendency due to short wave radiation, clear sky -'srtca' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 102 ; -} -#Time-integrated temperature tendency due to long-wave radiation, clear sky -'trtca' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 103 ; -} -#Time-integrated updraught mass flux -'umfa' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 104 ; -} -#Time-integrated downdraught mass flux -'dmfa' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 105 ; -} -#Time-integrated updraught detrainment rate -'udra' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 106 ; -} -#Time-integrated downdraught detrainment rate -'ddra' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 107 ; -} -#Time-integrated total precipitation flux -'tpfa' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 108 ; -} -#Time-integrated turbulent diffusion coefficient for heat -'tdcha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 109 ; -} -#Time-integrated temperature tendency due to parametrisations -'ttpha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 110 ; -} -#Time-integrated specific humidity tendency due to parametrisations -'qtpha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 111 ; -} -#Time-integrated eastward wind tendency due to parametrisations -'utpha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 112 ; -} -#Time-integrated northward wind tendency due to parametrisations -'vtpha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 113 ; -} -#Period corresponding to maximum individual wave height -'tmax' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 217 ; -} -#Maximum individual wave height -'hmax' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 218 ; -} -#Model bathymetry -'wmb' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 219 ; -} -#Mean wave period based on first moment -'mp1' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 220 ; -} -#Wave spectral directional width -'wdw' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 222 ; -} -#Mean wave period based on first moment for wind waves -'p1ww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 223 ; -} -#Mean wave period based on second moment for wind waves -'p2ww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 224 ; -} -#Wave spectral directional width for wind waves -'dwww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 225 ; -} -#Mean wave period based on first moment for swell -'p1ps' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 226 ; -} -#Mean wave period based on second moment for swell -'p2ps' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 227 ; -} -#Wave spectral directional width for swell -'dwps' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 228 ; -} -#Coefficient of drag with waves -'cdww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 233 ; -} -#Significant height of total swell -'shts' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 237 ; -} -#Mean period of total swell -'mpts' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 239 ; -} -#Mean square slope of waves -'msqs' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 244 ; -} -#Benjamin-Feir index -'bfi' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 253 ; -} -#Montgomery stream Function -'mntsf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 53 ; -} -#Water fraction -'fldfrc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 26 ; -} -#Anisotropy of sub-gridscale orography -'isor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 161 ; -} -#Angle of sub-gridscale orography -'anor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 162 ; -} -#Slope of sub-gridscale orography -'slor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 163 ; -} -#U-component surface stokes drift -'ust' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 215 ; -} -#V-component surface stokes drift -'vst' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 216 ; -} -#Total column ozone -'tco3' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 206 ; -} -#Convective snowfall -'csf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 239 ; -} -#Large-scale snowfall -'lsf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 240 ; -} -#Altimeter wave height -'awh' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 246 ; -} -#Altimeter corrected wave height -'acwh' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 247 ; -} -#Altimeter range relative correction -'arrc' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 248 ; -} -#Total sky direct solar radiation at surface -'fdir' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 21 ; -} -#Surface solar radiation downward clear-sky -'ssrdc' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 129 ; -} -#Surface thermal radiation downward clear-sky -'strdc' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 130 ; -} -#Standard deviation of orography -'sdor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 160 ; -} -#Cloud base height -'cbh' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 23 ; -} -#Wave spectral kurtosis -'wsk' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 252 ; -} -#10 metre wind speed -'wind' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 245 ; -} -#10 metre wind direction -'dwi' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 249 ; -} -#Mean temperature at 2 metres -'mean2t' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 4 ; -} -#Mean surface net radiation flux -'msnrf' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 149 ; -} -#Surface net radiation -'snr' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 149 ; -} -#Top net radiation -'tnr' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 150 ; -} -#Surface emissivity -'emis' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 124 ; -} -#Vertical integral of water vapour -'viwv' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 55 ; -} -#Snow depth -'sdsien' = { - discipline = 192 ; - parameterCategory = 190 ; - parameterNumber = 141 ; -} -#Mean total snowfall rate -'mtsfr' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 144 ; -} -#Evaporation -'erate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 182 ; -} -#Mean total precipitation rate -'tprate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 228 ; -} -#Mean large-scale precipitation rate -'mlsprt' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 142 ; -} -#Mean convective precipitation rate -'cprate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 143 ; -} -#Mean runoff rate -'mrort' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 205 ; -} -#Mean total cloud cover -'meantcc' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 6 ; -} -#Mean of 10 metre wind speed -'mean10ws' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 5 ; -} -#Sea water potential temperature -'thetao' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 129 ; -} -#Sea water practical salinity -'so' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 130 ; -} -#Upward sea water velocity -'wo' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 133 ; -} -#Sea water sigma theta -'sigmat' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 138 ; -} -#Surface downward eastward stress -'taueo' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 153 ; -} -#Surface downward northward stress -'tauno' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 154 ; -} -#Surface geopotential -'~' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 51 ; -} -#Vertical integral of temperature -'vit' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 54 ; -} -#Vertical integral of cloud liquid water -'vilw' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 56 ; -} -#Vertical integral of cloud frozen water -'viiw' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 57 ; -} -#Vertical integral of ozone -'vioz' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 58 ; -} -#Vertical integral of energy conversion -'viec' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 64 ; -} -#Vertical integral of eastward mass flux -'vimae' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 65 ; -} -#Vertical integral of northward mass flux -'viman' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 66 ; -} -#Vertical integral of eastward kinetic energy flux -'vikee' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 67 ; -} -#Vertical integral of northward kinetic energy flux -'viken' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 68 ; -} -#Vertical integral of eastward geopotential flux -'vige' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 73 ; -} -#Vertical integral of northward geopotential flux -'vign' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 74 ; -} -#Vertical integral of eastward total energy flux -'vitoee' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 75 ; -} -#Vertical integral of northward total energy flux -'vitoen' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 76 ; -} -#Vertical integral of eastward ozone flux -'vioze' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 77 ; -} -#Vertical integral of northward ozone flux -'viozn' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 78 ; -} -#Vertical integral of divergence of mass flux -'vimad' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 81 ; -} -#Vertical integral of divergence of kinetic energy flux -'viked' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 82 ; -} -#Vertical integral of divergence of thermal energy flux -'vithed' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 83 ; -} -#Vertical integral of divergence of geopotential flux -'vigd' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 85 ; -} -#Vertical integral of divergence of total energy flux -'vitoed' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 86 ; -} -#Vertical integral of divergence of ozone flux -'viozd' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 87 ; -} -#Variance of geopotential -'~' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 206 ; -} -#Covariance of geopotential/temperature -'~' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 207 ; -} -#Variance of temperature -'~' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 208 ; -} -#Covariance of geopotential/specific humidity -'~' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 209 ; -} -#Covariance of temperature/specific humidity -'~' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 210 ; -} -#Variance of specific humidity -'~' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 211 ; -} -#Covariance of u component/geopotential -'~' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 212 ; -} -#Covariance of u component/temperature -'~' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 213 ; -} -#Covariance of u component/specific humidity -'~' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 214 ; -} -#Variance of u component -'~' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 215 ; -} -#Mean vertical velocity -'mvv' = { - discipline = 192 ; - parameterCategory = 130 ; - parameterNumber = 232 ; -} -#Mean surface sensible heat flux -'msshfl' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 146 ; -} -#Mean surface latent heat flux -'mslhfl' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 147 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 30 ; + } +#Sea ice area fraction +'ci' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 31 ; + } +#Snow albedo +'asn' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; + } +#Snow density +'rsn' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 33 ; + } +#Sea surface temperature +'sst' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 34 ; + } +#Snow evaporation +'es' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; + } +#Snowmelt +'smlt' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; + } +#Surface direct normal short-wave (solar) radiation +'dsrp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 47 ; + } +#Time-integrated magnitude of turbulent surface stress +'magss' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 48 ; + } +#Large-scale precipitation fraction +'lspf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; + } +#Montgomery potential +'mont' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; + } #Mean temperature at 2 metres in the last 24 hours 'mean2t24' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 55 ; -} -#Mean 2 metre temperature in the last 24 hours gradient -'mean2t24grd' = { - discipline = 192 ; - parameterCategory = 129 ; - parameterNumber = 55 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 55 ; + } #Mean 2 metre dewpoint temperature in the last 24 hours 'mn2d24' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 56 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 56 ; + } +#Surface downward UV radiation +'uvb' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface +'par' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; + } +#Leaf area index, low vegetation +'lai_lv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'lai_hv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 67 ; + } +#Standard deviation of filtered subgrid orography (climatological) +'sdfor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 74 ; + } +#Total column cloud liquid water +'tclw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 78 ; + } +#Total column cloud ice water +'tciw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 79 ; + } +#Surface emissivity +'emis' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 124 ; + } +#Total column vertically-integrated water vapour +'tcwv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 137 ; + } +#Large-scale precipitation +'lsp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; + } +#Snowfall +'sf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; + } +#Charnock +'chnk' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 148 ; + } +#Surface net radiation (SW and LW) +'snr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 149 ; + } +#Top net radiation (SW and LW) +'tnr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 150 ; + } +#Boundary layer height +'blh' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; + } +#Standard deviation of sub-gridscale orography +'sdor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography +'isor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography +'anor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography +'slor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; + } +#Total cloud cover +'tcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; + } +#Surface short-wave (solar) radiation downwards +'ssrd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 169 ; + } +#Albedo (climatological) +'al' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 174 ; + } +#Surface long-wave (thermal) radiation downwards +'strd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 175 ; + } +#Top net short-wave (solar) radiation +'tsr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 178 ; + } +#Time-integrated eastward turbulent surface stress +'ewss' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 180 ; + } +#Time-integrated northward turbulent surface stress +'nsss' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 181 ; + } +#Evaporation +'e' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; + } +#Low cloud cover +'lcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; + } +#Medium cloud cover +'mcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; + } +#High cloud cover +'hcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; + } +#Eastward gravity wave surface stress +'lgws' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; + } +#Northward gravity wave surface stress +'mgws' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation +'gwd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; + } +#Skin reservoir content +'src' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 198 ; + } +#Runoff +'ro' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 205 ; + } +#Total column ozone +'tco3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; + } +#Top net short-wave (solar) radiation, clear sky +'tsrc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; + } +#Top net long-wave (thermal) radiation, clear sky +'ttrc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; + } +#Surface net short-wave (solar) radiation, clear sky +'ssrc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 210 ; + } +#Surface net long-wave (thermal) radiation, clear sky +'strc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 211 ; + } +#TOA incident short-wave (solar) radiation +'tisr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; + } +#Vertically integrated moisture divergence +'vimd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 213 ; + } +#Instantaneous eastward turbulent surface stress +'iews' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; + } +#Instantaneous northward turbulent surface stress +'inss' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; + } +#Instantaneous surface sensible heat net flux +'ishf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux +'ie' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; + } +#Logarithm of surface roughness length for heat (climatological) +'lsrh' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 234 ; + } +#Temperature of snow layer +'tsn' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 238 ; + } +#Convective snowfall +'csf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; + } +#Large-scale snowfall +'lsf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; + } +#Forecast albedo +'fal' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 243 ; + } +#Forecast surface roughness +'fsr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat +'flsr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 245 ; + } +#Mean surface net radiation flux +'msnrf' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 149 ; + } +#Particulate matter d <= 1 um +'pm1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 72 ; + } +#Particulate matter d <= 2.5 um +'pm2p5' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 73 ; + } +#Particulate matter d <= 10 um +'pm10' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 74 ; + } +#UV visible albedo for direct radiation, isotropic component (climatological) +'aluvpi' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 186 ; + } +#UV visible albedo for direct radiation, volumetric component (climatological) +'aluvpv' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 187 ; + } +#UV visible albedo for direct radiation, geometric component (climatological) +'aluvpg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 188 ; + } +#Near IR albedo for direct radiation, isotropic component (climatological) +'alnipi' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 189 ; + } +#Near IR albedo for direct radiation, volumetric component (climatological) +'alnipv' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 190 ; + } +#Near IR albedo for direct radiation, geometric component (climatological) +'alnipg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 191 ; + } +#UV visible albedo for diffuse radiation, isotropic component (climatological) +'aluvdi' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; + } +#UV visible albedo for diffuse radiation, volumetric component (climatological) +'aluvdv' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; + } +#UV visible albedo for diffuse radiation, geometric component (climatological) +'aluvdg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; + } +#Near IR albedo for diffuse radiation, isotropic component (climatological) +'alnidi' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; + } +#Near IR albedo for diffuse radiation, volumetric component (climatological) +'alnidv' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; + } +#Near IR albedo for diffuse radiation, geometric component (climatological) +'alnidg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; + } +#Ammonia mass mixing ratio +'nh3' = { + discipline = 192 ; + parameterCategory = 217 ; + parameterNumber = 19 ; + } +#Nitrogen monoxide mass mixing ratio +'no' = { + discipline = 192 ; + parameterCategory = 217 ; + parameterNumber = 27 ; + } +#Surface direct short-wave (solar) radiation +'fdir' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; + } +#Surface direct short-wave radiation, clear sky +'cdir' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 22 ; + } +#Cloud base height +'cbh' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; + } +#0 degrees C isothermal level (atm) +'deg0l' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 24 ; + } +#Maximum 10 metre wind gust in the last 3 hours +'10fg3' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; + } +#Height of zero-degree wet-bulb temperature +'hwbt0' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 47 ; + } +#Height of one-degree wet-bulb temperature +'hwbt1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 48 ; + } +#Instantaneous total lightning flash density +'litoti' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 50 ; + } +#Averaged total lightning flash density in the last hour +'litota1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 51 ; + } +#Instantaneous cloud-to-ground lightning flash density +'licgi' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 52 ; + } +#Averaged cloud-to-ground lightning flash density in the last hour +'licga1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 53 ; + } +#Averaged total lightning flash density in the last 3 hours +'litota3' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 57 ; + } +#Averaged total lightning flash density in the last 6 hours +'litota6' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 58 ; + } +#Averaged cloud-to-ground lightning flash density in the last 3 hours +'licga3' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 59 ; + } +#Averaged cloud-to-ground lightning flash density in the last 6 hours +'licga6' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 60 ; + } +#Accumulated Carbon Dioxide Net Ecosystem Exchange +'aco2nee' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated Carbon Dioxide Gross Primary Production +'aco2gpp' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated Carbon Dioxide Ecosystem Respiration +'aco2rec' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 1 ; + } +#Carbon dioxide net ecosystem exchange flux +'fco2nee' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#Carbon dioxide gross primary production flux +'fco2gpp' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#Carbon dioxide ecosystem respiration flux +'fco2rec' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#Total column rain water +'tcrw' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; + } +#Total column snow water +'tcsw' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; + } +#Ice temperature +'ist' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; + } +#Surface short-wave (solar) radiation downward clear-sky +'ssrdc' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; + } +#Surface long-wave (thermal) radiation downward clear-sky +'strdc' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; + } +#100 metre wind speed +'100si' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 249 ; + } +#Potential evaporation +'pev' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; + } +#Mean 2 metre temperature in the last 24 hours gradient +'mean2t24grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 55 ; + } #Mean 2 metre dewpoint temperature in the last 24 hours gradient 'mn2d24grd' = { - discipline = 192 ; - parameterCategory = 129 ; - parameterNumber = 56 ; -} -#Mean surface downward solar radiation flux -'msdsrf' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 169 ; -} -#Mean surface downward thermal radiation flux -'msdtrf' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 175 ; -} -#Mean surface net solar radiation flux -'msnsrf' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 176 ; -} -#Mean surface net thermal radiation flux -'msntrf' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 177 ; -} -#Mean top net solar radiation flux -'mtnsrf' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 178 ; -} -#Mean top net thermal radiation flux -'mtntrf' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 179 ; -} -#East-West surface stress rate of accumulation -'ewssra' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 180 ; -} -#North-South surface stress rate of accumulation -'nsssra' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 181 ; -} + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 56 ; + } +#Mean vertical velocity +'mvv' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 232 ; + } +#Period corresponding to maximum individual wave height +'tmax' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; + } +#Envelop-maximum individual wave height +'hmax' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; + } +#Model bathymetry +'wmb' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; + } +#Mean wave period based on first moment +'mp1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; + } +#Mean zero-crossing wave period +'mp2' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 221 ; + } +#Wave spectral directional width +'wdw' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; + } +#Mean wave period based on first moment for wind waves +'p1ww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; + } +#Mean wave period based on second moment for wind waves +'p2ww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; + } +#Wave spectral directional width for wind waves +'dwww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; + } +#Mean wave period based on first moment for swell +'p1ps' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; + } +#Mean wave period based on second moment for swell +'p2ps' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; + } +#Wave spectral directional width for swell +'dwps' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; + } +#Peak wave period +'pp1d' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 231 ; + } +#Coefficient of drag with waves +'cdww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; + } +#Mean direction of wind waves +'mdww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 235 ; + } +#Significant height of total swell +'shts' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; + } +#Mean direction of total swell +'mdts' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 238 ; + } +#Mean period of total swell +'mpts' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; + } #Standard deviation wave height 'sdhs' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 240 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 240 ; + } #Mean of 10 metre wind speed 'mu10' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 241 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 241 ; + } #Mean wind direction 'mdwi' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 242 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 242 ; + } #Standard deviation of 10 metre wind speed 'sdu' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 243 ; -} -#Top net solar radiation, clear sky -'~' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 208 ; -} -#Top net thermal radiation, clear sky -'~' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 209 ; -} -#Surface net solar radiation, clear sky -'~' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 210 ; -} -#Surface net thermal radiation, clear sky -'~' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 211 ; -} -#Solar insolation rate of accumulation -'soira' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 212 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 243 ; + } +#Mean square slope of waves +'msqs' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; + } +#10 metre wind speed +'wind' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; + } +#Altimeter wave height +'awh' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; + } +#Altimeter corrected wave height +'acwh' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; + } +#Altimeter range relative correction +'arrc' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; + } +#10 metre wind direction +'dwi' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; + } +#2D wave spectra (single) +'2dfd' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 251 ; + } +#Wave spectral kurtosis +'wsk' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; + } +#Benjamin-Feir index +'bfi' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; + } #Wave spectral peakedness 'wsp' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 254 ; + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 254 ; + } +#Sea water potential temperature +'thetao' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 129 ; + } +#Sea water practical salinity +'so' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 130 ; + } +#Eastward surface sea water velocity +'ocu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 131 ; + } +#Northward surface sea water velocity +'ocv' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 132 ; + } +#Upward sea water velocity +'wo' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 133 ; + } +#Sea water sigma theta +'sigmat' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 138 ; + } +#Sea surface height +'zos' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 145 ; + } +#Surface downward eastward stress +'taueo' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 153 ; + } +#Surface downward northward stress +'tauno' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 154 ; + } +#Depth of 20C isotherm +'t20d' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 163 ; + } +#Average sea water practical salinity in the upper 300m +'sav300' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 175 ; + } +#Skin reservoir content +'srcon' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 198 ; + } +#Surface geopotential +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 51 ; + } +#Total column vertically-integrated mass of atmosphere +'vima' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 53 ; + } +#Total column vertically-integrated temperature +'vit' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 54 ; + } +#Total column vertically-integrated water vapour +'viwv' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 55 ; + } +#Total column vertically-integrated cloud liquid water +'vilw' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 56 ; + } +#Total column vertically-integrated cloud frozen water +'viiw' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 57 ; + } +#Total column vertically-integrated ozone +'vioz' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 58 ; + } +#Total column vertically-integrated kinetic energy +'vike' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 59 ; + } +#Total column vertically-integrated enthalpy +'vithe' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 60 ; + } +#Total column vertically-integrated potential + internal energy +'vipie' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 61 ; + } +#Total column vertically-integrated potential+internal+latent energy +'vipile' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 62 ; + } +#Total column vertically-integrated total energy +'vitoe' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 63 ; + } +#Total column vertically-integrated energy conversion +'viec' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 64 ; + } +#Total column vertically-integrated eastward mass flux +'vimae' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 65 ; + } +#Total column vertically-integrated northward mass flux +'viman' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 66 ; + } +#Total column vertically-integrated eastward kinetic energy flux +'vikee' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 67 ; + } +#Total column vertically-integrated northward kinetic energy flux +'viken' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 68 ; + } +#Total column vertically-integrated eastward heat flux +'vithee' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 69 ; + } +#Total column vertically-integrated northward heat flux +'vithen' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 70 ; + } +#Total column vertically-integrated eastward water vapour flux +'viwve' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; + } +#Total column vertically-integrated northward water vapour flux +'viwvn' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; + } +#Total column vertically-integrated eastward geopotential flux +'vige' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 73 ; + } +#Total column vertically-integrated northward geopotential flux +'vign' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 74 ; + } +#Total column vertically-integrated eastward total energy flux +'vitee' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 75 ; + } +#Total column vertically-integrated northward total energy flux +'viten' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 76 ; + } +#Total column vertically-integrated eastward ozone flux +'vioze' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 77 ; + } +#Total column vertically-integrated northward ozone flux +'viozn' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 78 ; + } +#Total column vertically-integrated divergence of mass flux +'vimad' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 81 ; + } +#Total column vertically-integrated divergence of kinetic energy flux +'viked' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 82 ; + } +#Total column vertically-integrated divergence of thermal energy flux +'vithed' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 83 ; + } +#Total column vertically-integrated moisture divergence flux +'vimdf' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 84 ; + } +#Total column vertically-integrated divergence of geopotential flux +'vigd' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 85 ; + } +#Total column vertically-integrated divergence of total energy flux +'vited' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 86 ; + } +#Total column vertically-integrated divergence of ozone flux +'viozd' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 87 ; + } +#Time-integrated temperature tendency due to short-wave radiation +'srta' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; + } +#Time-integrated temperature tendency due to long-wave radiation +'trta' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; + } +#Time-integrated temperature tendency due to short wave radiation, clear sky +'srtca' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; + } +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'trtca' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; + } +#Time-integrated updraught mass flux +'umfa' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; + } +#Time-integrated downdraught mass flux +'dmfa' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; + } +#Time-integrated updraught detrainment rate +'udra' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; + } +#Time-integrated downdraught detrainment rate +'ddra' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; + } +#Time-integrated total precipitation flux +'tpfa' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; + } +#Time-integrated turbulent diffusion coefficient for heat +'tdcha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; + } +#Time-integrated temperature tendency due to parametrisations +'ttpha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; + } +#Time-integrated specific humidity tendency due to parametrisations +'qtpha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; + } +#Time-integrated eastward wind tendency due to parametrisations +'utpha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; + } +#Time-integrated northward wind tendency due to parametrisations +'vtpha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; + } +#Variance of geopotential +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 206 ; + } +#Covariance of geopotential/temperature +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 207 ; + } +#Variance of temperature +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 208 ; + } +#Covariance of geopotential/specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 209 ; + } +#Covariance of temperature/specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 210 ; + } +#Variance of specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 211 ; + } +#Covariance of u component/geopotential +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 212 ; + } +#Covariance of u component/temperature +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 213 ; + } +#Covariance of u component/specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 214 ; + } +#Variance of u component +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 215 ; + } +#Mean large-scale precipitation rate +'mlsprt' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; + } +#Mean convective precipitation rate +'cprate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; + } +#Mean total snowfall rate +'mtsfr' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 144 ; + } +#Mean surface sensible heat flux +'msshfl' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 146 ; + } +#Mean surface latent heat flux +'mslhfl' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 147 ; + } +#Mean surface downward solar radiation flux +'msdsrf' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 169 ; + } +#Mean surface downward thermal radiation flux +'msdtrf' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 175 ; + } +#Mean surface net solar radiation flux +'msnsrf' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 176 ; + } +#Mean surface net thermal radiation flux +'msntrf' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 177 ; + } +#Mean top net solar radiation flux +'mtnsrf' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 178 ; + } +#Mean top net thermal radiation flux +'mtntrf' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 179 ; + } +#East-West surface stress rate of accumulation +'ewssra' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 180 ; + } +#North-South surface stress rate of accumulation +'nsssra' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 181 ; + } +#Evaporation +'erate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 182 ; + } +#Mean runoff rate +'mrort' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 211 ; + } +#Solar insolation rate of accumulation +'soira' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 212 ; + } +#Mean total precipitation rate +'tprate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 228 ; + } +#Surface runoff +'sro' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 8 ; + } +#Sea-ice thickness +'sithick' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 98 ; + } +#Snow depth +'sdsien' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 141 ; + } +#Nitrogen dioxide mass mixing ratio +'no2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 121 ; + } +#Sulphur dioxide mass mixing ratio +'so2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 122 ; + } +#Carbon monoxide mass mixing ratio +'co' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 123 ; + } +#Ozone mass mixing ratio (full chemistry scheme) +'go3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 203 ; + } +#Nitrogen dioxide mass mixing ratio difference +'no2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 121 ; + } +#Sulphur dioxide mass mixing ratio difference +'so2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 122 ; + } +#Carbon monoxide mass mixing ratio difference +'codiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 123 ; + } +#Ozone mass mixing ratio difference (full chemistry scheme) +'go3diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 203 ; + } +#Friction velocity +'zust' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; + } +#Time-mean 2 metre temperature +'avg_2t' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 4 ; + } +#Time-mean 10 metre wind speed +'avg_10ws' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; + } +#Mean total cloud cover +'meantcc' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; + } +#Lake total depth +'dl' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 7 ; + } +#Lake mix-layer temperature +'lmlt' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 8 ; + } +#Lake mix-layer depth +'lmld' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 9 ; + } +#Lake bottom temperature +'lblt' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 10 ; + } +#Lake total layer temperature +'ltlt' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 11 ; + } +#Lake shape factor +'lshf' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 12 ; + } +#Lake ice surface temperature +'lict' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 13 ; + } +#Lake ice total depth +'licd' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 14 ; + } +#Minimum vertical gradient of refractivity inside trapping layer +'dndzn' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 15 ; + } +#Mean vertical gradient of refractivity inside trapping layer +'dndza' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 16 ; + } +#Duct base height +'dctb' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 17 ; + } +#Trapping layer base height +'tplb' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 18 ; + } +#Trapping layer top height +'tplt' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 19 ; + } +#10 metre u-component of neutral wind +'u10n' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 131 ; + } +#10 metre v-component of neutral wind +'v10n' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 132 ; + } +#U-component surface stokes drift +'ust' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; + } +#V-component surface stokes drift +'vst' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; + } +#100 metre U wind component +'100u' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 246 ; + } +#100 metre V wind component +'100v' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 247 ; } diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index 642222341..b699cdebf 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -18650,13 +18650,13 @@ parameterCategory = 171 ; parameterNumber = 255 ; } -#Snow evaporation +#Time-mean snow evaporation rate 'm of water equivalent s**-1' = { discipline = 192 ; parameterCategory = 172 ; parameterNumber = 44 ; } -#Snowmelt +#Time-mean snowmelt rate 'm of water equivalent s**-1' = { discipline = 192 ; parameterCategory = 172 ; @@ -18746,13 +18746,13 @@ parameterCategory = 172 ; parameterNumber = 255 ; } -#Snow evaporation anomaly +#Time-mean snow evaporation anomalous rate of accumulation 'm of water equivalent s**-1' = { discipline = 192 ; parameterCategory = 173 ; parameterNumber = 44 ; } -#Snowmelt anomaly +#Time-mean snowmelt anomalous rate of accumulation 'm of water equivalent s**-1' = { discipline = 192 ; parameterCategory = 173 ; @@ -18872,7 +18872,7 @@ parameterCategory = 173 ; parameterNumber = 181 ; } -#Evaporation anomalous rate of accumulation +#Time-mean evaporation anomalous rate of accumulation 'm of water equivalent s**-1' = { discipline = 192 ; parameterCategory = 173 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.legacy.def b/definitions/grib2/localConcepts/ecmf/units.legacy.def index d7675c4d6..f2484c10b 100644 --- a/definitions/grib2/localConcepts/ecmf/units.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/units.legacy.def @@ -1,1779 +1,1780 @@ -#Surface net solar radiation, clear sky -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 210 ; -} -#Surface net thermal radiation, clear sky -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 211 ; -} -#Eastward sea water velocity -'m s**-1' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 131 ; -} -#Northward sea water velocity -'m s**-1' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 132 ; -} -#Sea-ice thickness -'m' = { - discipline = 192 ; - parameterCategory = 174 ; - parameterNumber = 98 ; -} -#Sea surface height -'m' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 145 ; -} -#100 metre U wind component -'m s**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 246 ; -} -#100 metre V wind component -'m s**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 247 ; -} -#100 metre wind speed -'m s**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 249 ; -} -#0 degrees C isothermal level (atm) -'m' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 24 ; -} -#Depth of 20C isotherm -'m' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 163 ; -} -#Average salinity in the upper 300m -'psu' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 175 ; -} +# Automatically generated by ./create_def.pl, do not edit #Total precipitation of at least 1 mm '%' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 60 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 60 ; + } #Total precipitation of at least 5 mm '%' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 61 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 61 ; + } #Total precipitation of at least 40 mm '%' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 82 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 82 ; + } #Total precipitation of at least 60 mm '%' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 83 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 83 ; + } #Total precipitation of at least 80 mm '%' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 84 ; -} -#Total precipitation of at least 150 mm -'%' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 86 ; -} -#Total precipitation of at least 200 mm -'%' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 87 ; -} -#Total precipitation of at least 300 mm -'%' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 88 ; -} -#Total column cloud liquid water -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 78 ; -} -#Total column cloud ice water -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 79 ; -} -#Top net solar radiation -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 178 ; -} -#Temperature of snow layer -'K' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 238 ; -} -#Sea-ice cover -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 31 ; -} -#Snow density -'kg m**-3' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 33 ; -} -#Sea surface temperature -'K' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 34 ; -} -#Surface solar radiation downwards -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 169 ; -} -#Surface thermal radiation downwards -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 175 ; -} -#Eastward turbulent surface stress -'N m**-2 s' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 180 ; -} -#Northward turbulent surface stress -'N m**-2 s' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 181 ; -} -#Surface runoff -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 174 ; - parameterNumber = 8 ; -} -#Direct solar radiation -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 47 ; -} -#Lake total layer temperature -'K' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 11 ; -} -#Lake mix-layer temperature -'K' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 8 ; -} -#Lake mix-layer depth -'m' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 9 ; -} -#Lake bottom temperature -'K' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 10 ; -} -#Lake shape factor -'dimensionless' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 12 ; -} -#Lake ice surface temperature -'K' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 13 ; -} -#Lake ice total depth -'m' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 14 ; -} -#Lake total depth -'m' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 7 ; -} -#GEMS Ozone -'kg kg**-1' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 203 ; -} -#GEMS Ozone -'kg kg**-1' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 203 ; -} -#Carbon monoxide -'kg kg**-1' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 123 ; -} -#Carbon monoxide -'kg kg**-1' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 123 ; -} -#Nitrogen dioxide -'kg kg**-1' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 121 ; -} -#Nitrogen dioxide -'kg kg**-1' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 121 ; -} -#Sulphur dioxide -'kg kg**-1' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 122 ; -} -#Sulphur dioxide -'kg kg**-1' = { - discipline = 192 ; - parameterCategory = 211 ; - parameterNumber = 122 ; -} -#Ammonia -'kg kg**-1' = { - discipline = 192 ; - parameterCategory = 217 ; - parameterNumber = 19 ; -} -#Nitrogen monoxide -'kg kg**-1' = { - discipline = 192 ; - parameterCategory = 217 ; - parameterNumber = 27 ; -} -#Particulate matter d <= 1 um -'kg m**-3' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 72 ; -} -#Particulate matter d <= 2.5 um -'kg m**-3' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 73 ; -} -#Particulate matter d <= 10 um -'kg m**-3' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 74 ; -} -#Runoff -'m' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 205 ; -} -#Total column vertically-integrated water vapour -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 137 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 84 ; + } #Total precipitation of at least 100 mm '%' = { - discipline = 192 ; - parameterCategory = 131 ; - parameterNumber = 85 ; -} -#Mean zero-crossing wave period -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 221 ; -} -#Peak wave period -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 231 ; -} -#Instantaneous total lightning flash density -'km**-2 day**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 50 ; -} -#Averaged total lightning flash density in the last hour -'km**-2 day**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 51 ; -} -#Instantaneous cloud-to-ground lightning flash density -'km**-2 day**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 52 ; -} -#Averaged cloud-to-ground lightning flash density in the last hour -'km**-2 day**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 53 ; -} -#Averaged total lightning flash density in the last 3 hours -'km**-2 day**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 57 ; -} -#Averaged total lightning flash density in the last 6 hours -'km**-2 day**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 58 ; -} -#Averaged cloud-to-ground lightning flash density in the last 3 hours -'km**-2 day**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 59 ; -} -#Averaged cloud-to-ground lightning flash density in the last 6 hours -'km**-2 day**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 60 ; -} -#Eastward gravity wave surface stress -'N m**-2 s' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 195 ; -} -#Friction velocity -'m s**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 3 ; -} -#Instantaneous eastward turbulent surface stress -'N m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 229 ; -} -#Instantaneous northward turbulent surface stress -'N m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 230 ; -} -#Instantaneous surface sensible heat flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 231 ; -} -#Instantaneous moisture flux -'kg m**-2 s**-1' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 232 ; -} -#Large-scale precipitation -'m' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 142 ; -} -#Large-scale precipitation fraction -'s' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 50 ; -} -#Northward gravity wave surface stress -'N m**-2 s' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 196 ; -} -#Snow evaporation -'m of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 44 ; -} -#Snowfall -'m of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 144 ; -} + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 85 ; + } +#Total precipitation of at least 150 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 86 ; + } +#Total precipitation of at least 200 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 87 ; + } +#Total precipitation of at least 300 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 88 ; + } #Surface runoff 'm' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 8 ; -} -#TOA incident solar radiation -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 212 ; -} -#Top net thermal radiation, clear sky -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 209 ; -} -#Top net solar radiation, clear sky -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 208 ; -} -#Total cloud cover -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 164 ; -} -#Total column rain water -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 89 ; -} -#Total column snow water -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 90 ; -} -#Vertical integral of eastward water vapour flux -'kg m**-1 s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 71 ; -} -#Vertical integral of northward water vapour flux -'kg m**-1 s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 72 ; -} -#Snow albedo -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 32 ; -} -#Ice temperature -'K' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 94 ; -} -#Snowmelt -'m of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 45 ; -} -#Downward UV radiation at the surface -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 57 ; -} -#Photosynthetically active radiation at the surface -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 58 ; -} -#Boundary layer height -'m' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 159 ; -} -#Evaporation -'m of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 182 ; -} -#Low cloud cover -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 186 ; -} -#Medium cloud cover -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 187 ; -} -#High cloud cover -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 188 ; -} -#Gravity wave dissipation -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 197 ; -} -#Potential evaporation -'m' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 251 ; -} -#Unbalanced component of temperature -'K' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 21 ; -} -#Unbalanced component of logarithm of surface pressure -'~' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 22 ; -} -#Unbalanced component of divergence -'s**-1' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 23 ; -} -#10 metre wind gust in the last 3 hours -'m s**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 28 ; -} -#Forecast albedo -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 243 ; -} -#Forecast surface roughness -'m' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 244 ; -} -#Flux of Carbon Dioxide Net Ecosystem Exchange -'kg m**-2 s**-1' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 195 ; -} -#Accumulated Carbon Dioxide Net Ecosystem Exchange -'kg m**-2' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 192 ; - typeOfStatisticalProcessing = 1 ; -} -#Flux of Carbon Dioxide Gross Primary Production -'kg m**-2 s**-1' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 197 ; -} -#Accumulated Carbon Dioxide Gross Primary Production -'kg m**-2' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 193 ; - typeOfStatisticalProcessing = 1 ; -} -#Flux of Carbon Dioxide Ecosystem Respiration -'kg m**-2 s**-1' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 196 ; -} -#Accumulated Carbon Dioxide Ecosystem Respiration -'kg m**-2' = { - localTablesVersion = 1 ; - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 194 ; - typeOfStatisticalProcessing = 1 ; -} -#Albedo (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 174 ; -} -#UV visible albedo for direct radiation (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 15 ; -} -#UV visible albedo for diffuse radiation (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 16 ; -} -#Near IR albedo for direct radiation (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 17 ; -} -#Near IR albedo for diffuse radiation (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 18 ; -} -#Standard deviation of filtered subgrid orography (climatological) -'m' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 74 ; -} -#Logarithm of surface roughness length for heat (climatological) -'~' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 234 ; -} -#UV visible albedo for direct radiation, isotropic component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 186 ; -} -#UV visible albedo for direct radiation, volumetric component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 187 ; -} -#UV visible albedo for direct radiation, geometric component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 188 ; -} -#Near IR albedo for direct radiation, isotropic component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 189 ; -} -#Near IR albedo for direct radiation, volumetric component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 190 ; -} -#Near IR albedo for direct radiation, geometric component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 191 ; -} -#Vertically integrated moisture divergence -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 213 ; -} -#Vertically integrated moisture divergence flux -'kg m**-2 s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 84 ; -} -#Forecast logarithm of surface roughness for heat -'Numeric' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 245 ; -} -#10 metre u-component of neutral wind -'m s**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 131 ; -} -#V-component of neutral wind -'m s**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 132 ; -} -#Magnitude of turbulent surface stress -'N m**-2 s' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 48 ; -} -#Vertical integral of mass of atmosphere -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 53 ; -} -#Height of zero-degree wet-bulb temperature -'m' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 47 ; -} -#Height of one-degree wet-bulb temperature -'m' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 48 ; -} -#Surface photosynthetically active radiation, clear sky -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 20 ; -} -#Surface direct short-wave radiation, clear sky -'J m**-2' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 22 ; -} -#Duct base height -'m' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 17 ; -} -#Trapping layer base height -'m' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 18 ; -} -#Trapping layer top height -'m' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 19 ; -} -#Mean vertical gradient of refractivity inside trapping layer -'m**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 16 ; -} -#Minimum vertical gradient of refractivity inside trapping layer -'m**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 15 ; -} -#Vertical integral of eastward heat flux -'W m**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 69 ; -} -#Vertical integral of northward heat flux -'W m**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 70 ; -} -#Vertical integral of potential+internal+latent energy -'J m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 62 ; -} -#Skin reservoir content -'m of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 198 ; -} -#Skin reservoir content -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 160 ; - parameterNumber = 198 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; + } #Sub-surface runoff 'm' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 9 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 9 ; + } +#UV visible albedo for direct radiation (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 15 ; + } +#UV visible albedo for diffuse radiation (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 16 ; + } +#Near IR albedo for direct radiation (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 17 ; + } +#Near IR albedo for diffuse radiation (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 18 ; + } +#Surface photosynthetically active radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 20 ; + } +#Unbalanced component of temperature +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence +'s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; + } +#Lake cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } #Low vegetation cover '(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 27 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 27 ; + } #High vegetation cover '(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 28 ; -} -#Leaf area index, low vegetation -'m**2 m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 66 ; -} -#Leaf area index, high vegetation -'m**2 m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 67 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 28 ; + } #Type of low vegetation -'(code table 4.234)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 29 ; -} +'(Code table 4.234)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 29 ; + } #Type of high vegetation -'(code table 4.234)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 30 ; -} -#Mean direction of total swell -'degrees' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 238 ; -} -#Mean direction of wind waves -'degrees' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 235 ; -} -#Charnock -'Numeric' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 148 ; -} -#2D wave spectra (single) -'m**2 s radian**-1' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 251 ; -} -#Vertical integral of thermal energy -'J m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 60 ; -} -#Vertical integral of potential+internal energy -'J m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 61 ; -} -#Vertical integral of kinetic energy -'J m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 59 ; -} -#Vertical integral of total energy -'J m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 63 ; -} -#UV visible albedo for diffuse radiation, isotropic component (climatological) +'(Code table 4.234)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 30 ; + } +#Sea ice area fraction '(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 192 ; -} -#UV visible albedo for diffuse radiation, volumetric component (climatological) + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 31 ; + } +#Snow albedo '(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 193 ; -} -#UV visible albedo for diffuse radiation, geometric component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 194 ; -} -#Near IR albedo for diffuse radiation, isotropic component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 195 ; -} -#Near IR albedo for diffuse radiation, volumetric component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 196 ; -} -#Near IR albedo for diffuse radiation, geometric component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 197 ; -} -#Time-integrated temperature tendency due to short-wave radiation -'K' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 100 ; -} -#Time-integrated temperature tendency due to long-wave radiation -'K' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 101 ; -} -#Time-integrated temperature tendency due to short wave radiation, clear sky -'K' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 102 ; -} -#Time-integrated temperature tendency due to long-wave radiation, clear sky -'K' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 103 ; -} -#Time-integrated updraught mass flux -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 104 ; -} -#Time-integrated downdraught mass flux -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 105 ; -} -#Time-integrated updraught detrainment rate + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; + } +#Snow density 'kg m**-3' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 106 ; -} -#Time-integrated downdraught detrainment rate -'kg m**-3' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 107 ; -} -#Time-integrated total precipitation flux -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 108 ; -} -#Time-integrated turbulent diffusion coefficient for heat -'m**2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 109 ; -} -#Time-integrated temperature tendency due to parametrisations + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 33 ; + } +#Sea surface temperature 'K' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 110 ; -} -#Time-integrated specific humidity tendency due to parametrisations -'kg kg**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 111 ; -} -#Time-integrated eastward wind tendency due to parametrisations -'m s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 112 ; -} -#Time-integrated northward wind tendency due to parametrisations -'m s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 113 ; -} -#Period corresponding to maximum individual wave height -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 217 ; -} -#Maximum individual wave height -'m' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 218 ; -} -#Model bathymetry -'m' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 219 ; -} -#Mean wave period based on first moment -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 220 ; -} -#Wave spectral directional width -'radians' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 222 ; -} -#Mean wave period based on first moment for wind waves -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 223 ; -} -#Mean wave period based on second moment for wind waves -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 224 ; -} -#Wave spectral directional width for wind waves -'radians' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 225 ; -} -#Mean wave period based on first moment for swell -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 226 ; -} -#Mean wave period based on second moment for swell -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 227 ; -} -#Wave spectral directional width for swell -'radians' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 228 ; -} -#Coefficient of drag with waves -'dimensionless' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 233 ; -} -#Significant height of total swell -'m' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 237 ; -} -#Mean period of total swell -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 239 ; -} -#Mean square slope of waves -'dimensionless' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 244 ; -} -#Benjamin-Feir index -'dimensionless' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 253 ; -} -#Montgomery stream Function -'m**2 s**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 53 ; -} -#Water fraction -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 26 ; -} -#Anisotropy of sub-gridscale orography -'~' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 161 ; -} -#Angle of sub-gridscale orography -'radians' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 162 ; -} -#Slope of sub-gridscale orography -'Numeric' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 163 ; -} -#U-component surface stokes drift -'m s**-1' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 215 ; -} -#V-component surface stokes drift -'m s**-1' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 216 ; -} -#Total column ozone -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 206 ; -} -#Convective snowfall + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 34 ; + } +#Snow evaporation 'm of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 239 ; -} -#Large-scale snowfall + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; + } +#Snowmelt 'm of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 240 ; -} -#Altimeter wave height -'m' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 246 ; -} -#Altimeter corrected wave height -'m' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 247 ; -} -#Altimeter range relative correction -'~' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 248 ; -} -#Total sky direct solar radiation at surface + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; + } +#Surface direct normal short-wave (solar) radiation 'J m**-2' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 21 ; -} -#Surface solar radiation downward clear-sky -'J m**-2' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 129 ; -} -#Surface thermal radiation downward clear-sky -'J m**-2' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 130 ; -} -#Standard deviation of orography -'m' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 160 ; -} -#Cloud base height -'m' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 23 ; -} -#Wave spectral kurtosis -'dimensionless' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 252 ; -} -#10 metre wind speed -'m s**-1' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 245 ; -} -#10 metre wind direction -'degrees' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 249 ; -} -#Mean temperature at 2 metres -'K' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 4 ; -} -#Mean surface net radiation flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 149 ; -} -#Surface net radiation -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 149 ; -} -#Top net radiation -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 150 ; -} -#Surface emissivity -'dimensionless' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 124 ; -} -#Vertical integral of water vapour -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 55 ; -} -#Snow depth -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 190 ; - parameterNumber = 141 ; -} -#Mean total snowfall rate -'m of water equivalent s**-1' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 144 ; -} -#Evaporation -'m of water s**-1' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 182 ; -} -#Mean total precipitation rate -'m s**-1' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 228 ; -} -#Mean large-scale precipitation rate -'m s**-1' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 142 ; -} -#Mean convective precipitation rate -'m s**-1' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 143 ; -} -#Mean runoff rate -'m s**-1' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 205 ; -} -#Mean total cloud cover -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 6 ; -} -#Mean of 10 metre wind speed -'m s**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 5 ; -} -#Sea water potential temperature -'deg C' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 129 ; -} -#Sea water practical salinity -'psu' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 130 ; -} -#Upward sea water velocity -'m s**-1' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 133 ; -} -#Sea water sigma theta -'kg m**-3' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 138 ; -} -#Surface downward eastward stress -'N m**-2' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 153 ; -} -#Surface downward northward stress -'N m**-2' = { - discipline = 192 ; - parameterCategory = 151 ; - parameterNumber = 154 ; -} -#Surface geopotential + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 47 ; + } +#Time-integrated magnitude of turbulent surface stress +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 48 ; + } +#Large-scale precipitation fraction +'s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; + } +#Montgomery potential 'm**2 s**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 51 ; -} -#Vertical integral of temperature -'K kg m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 54 ; -} -#Vertical integral of cloud liquid water -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 56 ; -} -#Vertical integral of cloud frozen water -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 57 ; -} -#Vertical integral of ozone -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 58 ; -} -#Vertical integral of energy conversion -'W m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 64 ; -} -#Vertical integral of eastward mass flux -'kg m**-1 s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 65 ; -} -#Vertical integral of northward mass flux -'kg m**-1 s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 66 ; -} -#Vertical integral of eastward kinetic energy flux -'W m**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 67 ; -} -#Vertical integral of northward kinetic energy flux -'W m**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 68 ; -} -#Vertical integral of eastward geopotential flux -'W m**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 73 ; -} -#Vertical integral of northward geopotential flux -'W m**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 74 ; -} -#Vertical integral of eastward total energy flux -'W m**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 75 ; -} -#Vertical integral of northward total energy flux -'W m**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 76 ; -} -#Vertical integral of eastward ozone flux -'kg m**-1 s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 77 ; -} -#Vertical integral of northward ozone flux -'kg m**-1 s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 78 ; -} -#Vertical integral of divergence of mass flux -'kg m**-2 s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 81 ; -} -#Vertical integral of divergence of kinetic energy flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 82 ; -} -#Vertical integral of divergence of thermal energy flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 83 ; -} -#Vertical integral of divergence of geopotential flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 85 ; -} -#Vertical integral of divergence of total energy flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 86 ; -} -#Vertical integral of divergence of ozone flux -'kg m**-2 s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 87 ; -} -#Variance of geopotential -'m**4 s**-4' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 206 ; -} -#Covariance of geopotential/temperature -'m**2 K s**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 207 ; -} -#Variance of temperature -'K**2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 208 ; -} -#Covariance of geopotential/specific humidity -'m**2 s**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 209 ; -} -#Covariance of temperature/specific humidity -'K' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 210 ; -} -#Variance of specific humidity -'~' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 211 ; -} -#Covariance of u component/geopotential -'m**3 s**-3' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 212 ; -} -#Covariance of u component/temperature -'m s**-1 K' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 213 ; -} -#Covariance of u component/specific humidity -'m s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 214 ; -} -#Variance of u component -'m**2 s**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 215 ; -} -#Mean vertical velocity -'Pa s**-1' = { - discipline = 192 ; - parameterCategory = 130 ; - parameterNumber = 232 ; -} -#Mean surface sensible heat flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 146 ; -} -#Mean surface latent heat flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 147 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; + } #Mean temperature at 2 metres in the last 24 hours 'K' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 55 ; -} -#Mean 2 metre temperature in the last 24 hours gradient -'K' = { - discipline = 192 ; - parameterCategory = 129 ; - parameterNumber = 55 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 55 ; + } #Mean 2 metre dewpoint temperature in the last 24 hours 'K' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 56 ; -} + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 56 ; + } +#Surface downward UV radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; + } +#Leaf area index, low vegetation +'m**2 m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'m**2 m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 67 ; + } +#Standard deviation of filtered subgrid orography (climatological) +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 74 ; + } +#Total column cloud liquid water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 78 ; + } +#Total column cloud ice water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 79 ; + } +#Surface emissivity +'Proportion' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 124 ; + } +#Total column vertically-integrated water vapour +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 137 ; + } +#Large-scale precipitation +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; + } +#Snowfall +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; + } +#Charnock +'Numeric' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 148 ; + } +#Surface net radiation (SW and LW) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 149 ; + } +#Top net radiation (SW and LW) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 150 ; + } +#Boundary layer height +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; + } +#Standard deviation of sub-gridscale orography +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography +'Numeric' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography +'radians' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography +'Numeric' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; + } +#Total cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; + } +#Surface short-wave (solar) radiation downwards +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 169 ; + } +#Albedo (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 174 ; + } +#Surface long-wave (thermal) radiation downwards +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 175 ; + } +#Top net short-wave (solar) radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 178 ; + } +#Time-integrated eastward turbulent surface stress +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 180 ; + } +#Time-integrated northward turbulent surface stress +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 181 ; + } +#Evaporation +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; + } +#Low cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; + } +#Medium cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; + } +#High cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; + } +#Eastward gravity wave surface stress +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; + } +#Northward gravity wave surface stress +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; + } +#Skin reservoir content +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 198 ; + } +#Runoff +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 205 ; + } +#Total column ozone +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; + } +#Top net short-wave (solar) radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; + } +#Top net long-wave (thermal) radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; + } +#Surface net short-wave (solar) radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 210 ; + } +#Surface net long-wave (thermal) radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 211 ; + } +#TOA incident short-wave (solar) radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; + } +#Vertically integrated moisture divergence +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 213 ; + } +#Instantaneous eastward turbulent surface stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; + } +#Instantaneous northward turbulent surface stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; + } +#Instantaneous surface sensible heat net flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; + } +#Logarithm of surface roughness length for heat (climatological) +'Numeric' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 234 ; + } +#Temperature of snow layer +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 238 ; + } +#Convective snowfall +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; + } +#Large-scale snowfall +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; + } +#Forecast albedo +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 243 ; + } +#Forecast surface roughness +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat +'Numeric' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 245 ; + } +#Mean surface net radiation flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 149 ; + } +#Particulate matter d <= 1 um +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 72 ; + } +#Particulate matter d <= 2.5 um +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 73 ; + } +#Particulate matter d <= 10 um +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 74 ; + } +#UV visible albedo for direct radiation, isotropic component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 186 ; + } +#UV visible albedo for direct radiation, volumetric component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 187 ; + } +#UV visible albedo for direct radiation, geometric component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 188 ; + } +#Near IR albedo for direct radiation, isotropic component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 189 ; + } +#Near IR albedo for direct radiation, volumetric component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 190 ; + } +#Near IR albedo for direct radiation, geometric component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 191 ; + } +#UV visible albedo for diffuse radiation, isotropic component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; + } +#UV visible albedo for diffuse radiation, volumetric component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; + } +#UV visible albedo for diffuse radiation, geometric component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; + } +#Near IR albedo for diffuse radiation, isotropic component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; + } +#Near IR albedo for diffuse radiation, volumetric component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; + } +#Near IR albedo for diffuse radiation, geometric component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; + } +#Ammonia mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 217 ; + parameterNumber = 19 ; + } +#Nitrogen monoxide mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 217 ; + parameterNumber = 27 ; + } +#Surface direct short-wave (solar) radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; + } +#Surface direct short-wave radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 22 ; + } +#Cloud base height +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; + } +#0 degrees C isothermal level (atm) +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 24 ; + } +#Maximum 10 metre wind gust in the last 3 hours +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; + } +#Height of zero-degree wet-bulb temperature +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 47 ; + } +#Height of one-degree wet-bulb temperature +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 48 ; + } +#Instantaneous total lightning flash density +'km**-2 day**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 50 ; + } +#Averaged total lightning flash density in the last hour +'km**-2 day**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 51 ; + } +#Instantaneous cloud-to-ground lightning flash density +'km**-2 day**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 52 ; + } +#Averaged cloud-to-ground lightning flash density in the last hour +'km**-2 day**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 53 ; + } +#Averaged total lightning flash density in the last 3 hours +'km**-2 day**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 57 ; + } +#Averaged total lightning flash density in the last 6 hours +'km**-2 day**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 58 ; + } +#Averaged cloud-to-ground lightning flash density in the last 3 hours +'km**-2 day**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 59 ; + } +#Averaged cloud-to-ground lightning flash density in the last 6 hours +'km**-2 day**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 60 ; + } +#Accumulated Carbon Dioxide Net Ecosystem Exchange +'kg m**-2' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated Carbon Dioxide Gross Primary Production +'kg m**-2' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated Carbon Dioxide Ecosystem Respiration +'kg m**-2' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 1 ; + } +#Carbon dioxide net ecosystem exchange flux +'kg m**-2 s**-1' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#Carbon dioxide gross primary production flux +'kg m**-2 s**-1' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#Carbon dioxide ecosystem respiration flux +'kg m**-2 s**-1' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#Total column rain water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; + } +#Total column snow water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; + } +#Ice temperature +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; + } +#Surface short-wave (solar) radiation downward clear-sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; + } +#Surface long-wave (thermal) radiation downward clear-sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; + } +#100 metre wind speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 249 ; + } +#Potential evaporation +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; + } +#Mean 2 metre temperature in the last 24 hours gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 55 ; + } #Mean 2 metre dewpoint temperature in the last 24 hours gradient 'K' = { - discipline = 192 ; - parameterCategory = 129 ; - parameterNumber = 56 ; -} -#Mean surface downward solar radiation flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 169 ; -} -#Mean surface downward thermal radiation flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 175 ; -} -#Mean surface net solar radiation flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 176 ; -} -#Mean surface net thermal radiation flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 177 ; -} -#Mean top net solar radiation flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 178 ; -} -#Mean top net thermal radiation flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 179 ; -} -#East-West surface stress rate of accumulation -'N m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 180 ; -} -#North-South surface stress rate of accumulation -'N m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 181 ; -} + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 56 ; + } +#Mean vertical velocity +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 232 ; + } +#Period corresponding to maximum individual wave height +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; + } +#Envelop-maximum individual wave height +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; + } +#Model bathymetry +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; + } +#Mean wave period based on first moment +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; + } +#Mean zero-crossing wave period +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 221 ; + } +#Wave spectral directional width +'radians' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; + } +#Mean wave period based on first moment for wind waves +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; + } +#Mean wave period based on second moment for wind waves +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; + } +#Wave spectral directional width for wind waves +'radians' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; + } +#Mean wave period based on first moment for swell +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; + } +#Mean wave period based on second moment for swell +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; + } +#Wave spectral directional width for swell +'radians' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; + } +#Peak wave period +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 231 ; + } +#Coefficient of drag with waves +'dimensionless' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; + } +#Mean direction of wind waves +'degrees' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 235 ; + } +#Significant height of total swell +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; + } +#Mean direction of total swell +'degrees' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 238 ; + } +#Mean period of total swell +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; + } #Standard deviation wave height 'm' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 240 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 240 ; + } #Mean of 10 metre wind speed 'm s**-1' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 241 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 241 ; + } #Mean wind direction 'degrees' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 242 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 242 ; + } #Standard deviation of 10 metre wind speed 'm s**-1' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 243 ; -} -#Top net solar radiation, clear sky -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 208 ; -} -#Top net thermal radiation, clear sky -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 209 ; -} -#Surface net solar radiation, clear sky -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 210 ; -} -#Surface net thermal radiation, clear sky -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 211 ; -} -#Solar insolation rate of accumulation -'W m**-2' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 212 ; -} + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 243 ; + } +#Mean square slope of waves +'dimensionless' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; + } +#10 metre wind speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; + } +#Altimeter wave height +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; + } +#Altimeter corrected wave height +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; + } +#Altimeter range relative correction +'~' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; + } +#10 metre wind direction +'degrees' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; + } +#2D wave spectra (single) +'m**2 s radian**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 251 ; + } +#Wave spectral kurtosis +'dimensionless' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; + } +#Benjamin-Feir index +'dimensionless' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; + } #Wave spectral peakedness 'dimensionless' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 254 ; + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 254 ; + } +#Sea water potential temperature +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 129 ; + } +#Sea water practical salinity +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 130 ; + } +#Eastward surface sea water velocity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 131 ; + } +#Northward surface sea water velocity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 132 ; + } +#Upward sea water velocity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 133 ; + } +#Sea water sigma theta +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 138 ; + } +#Sea surface height +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 145 ; + } +#Surface downward eastward stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 153 ; + } +#Surface downward northward stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 154 ; + } +#Depth of 20C isotherm +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 163 ; + } +#Average sea water practical salinity in the upper 300m +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 175 ; + } +#Skin reservoir content +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 198 ; + } +#Surface geopotential +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 51 ; + } +#Total column vertically-integrated mass of atmosphere +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 53 ; + } +#Total column vertically-integrated temperature +'K kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 54 ; + } +#Total column vertically-integrated water vapour +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 55 ; + } +#Total column vertically-integrated cloud liquid water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 56 ; + } +#Total column vertically-integrated cloud frozen water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 57 ; + } +#Total column vertically-integrated ozone +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 58 ; + } +#Total column vertically-integrated kinetic energy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 59 ; + } +#Total column vertically-integrated enthalpy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 60 ; + } +#Total column vertically-integrated potential + internal energy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 61 ; + } +#Total column vertically-integrated potential+internal+latent energy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 62 ; + } +#Total column vertically-integrated total energy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 63 ; + } +#Total column vertically-integrated energy conversion +'W m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 64 ; + } +#Total column vertically-integrated eastward mass flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 65 ; + } +#Total column vertically-integrated northward mass flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 66 ; + } +#Total column vertically-integrated eastward kinetic energy flux +'W m**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 67 ; + } +#Total column vertically-integrated northward kinetic energy flux +'W m**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 68 ; + } +#Total column vertically-integrated eastward heat flux +'W m**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 69 ; + } +#Total column vertically-integrated northward heat flux +'W m**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 70 ; + } +#Total column vertically-integrated eastward water vapour flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; + } +#Total column vertically-integrated northward water vapour flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; + } +#Total column vertically-integrated eastward geopotential flux +'W m**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 73 ; + } +#Total column vertically-integrated northward geopotential flux +'W m**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 74 ; + } +#Total column vertically-integrated eastward total energy flux +'W m**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 75 ; + } +#Total column vertically-integrated northward total energy flux +'W m**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 76 ; + } +#Total column vertically-integrated eastward ozone flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 77 ; + } +#Total column vertically-integrated northward ozone flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 78 ; + } +#Total column vertically-integrated divergence of mass flux +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 81 ; + } +#Total column vertically-integrated divergence of kinetic energy flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 82 ; + } +#Total column vertically-integrated divergence of thermal energy flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 83 ; + } +#Total column vertically-integrated moisture divergence flux +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 84 ; + } +#Total column vertically-integrated divergence of geopotential flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 85 ; + } +#Total column vertically-integrated divergence of total energy flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 86 ; + } +#Total column vertically-integrated divergence of ozone flux +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 87 ; + } +#Time-integrated temperature tendency due to short-wave radiation +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; + } +#Time-integrated temperature tendency due to long-wave radiation +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; + } +#Time-integrated temperature tendency due to short wave radiation, clear sky +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; + } +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; + } +#Time-integrated updraught mass flux +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; + } +#Time-integrated downdraught mass flux +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; + } +#Time-integrated updraught detrainment rate +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; + } +#Time-integrated downdraught detrainment rate +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; + } +#Time-integrated total precipitation flux +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; + } +#Time-integrated turbulent diffusion coefficient for heat +'m**2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; + } +#Time-integrated temperature tendency due to parametrisations +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; + } +#Time-integrated specific humidity tendency due to parametrisations +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; + } +#Time-integrated eastward wind tendency due to parametrisations +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; + } +#Time-integrated northward wind tendency due to parametrisations +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; + } +#Variance of geopotential +'m**4 s**-4' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 206 ; + } +#Covariance of geopotential/temperature +'m**2 K s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 207 ; + } +#Variance of temperature +'K**2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 208 ; + } +#Covariance of geopotential/specific humidity +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 209 ; + } +#Covariance of temperature/specific humidity +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 210 ; + } +#Variance of specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 211 ; + } +#Covariance of u component/geopotential +'m**3 s**-3' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 212 ; + } +#Covariance of u component/temperature +'m s**-1 K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 213 ; + } +#Covariance of u component/specific humidity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 214 ; + } +#Variance of u component +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 215 ; + } +#Mean large-scale precipitation rate +'m s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; + } +#Mean convective precipitation rate +'m s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; + } +#Mean total snowfall rate +'m of water equivalent s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 144 ; + } +#Mean surface sensible heat flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 146 ; + } +#Mean surface latent heat flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 147 ; + } +#Mean surface downward solar radiation flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 169 ; + } +#Mean surface downward thermal radiation flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 175 ; + } +#Mean surface net solar radiation flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 176 ; + } +#Mean surface net thermal radiation flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 177 ; + } +#Mean top net solar radiation flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 178 ; + } +#Mean top net thermal radiation flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 179 ; + } +#East-West surface stress rate of accumulation +'N m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 180 ; + } +#North-South surface stress rate of accumulation +'N m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 181 ; + } +#Evaporation +'m of water equivalent s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 182 ; + } +#Mean runoff rate +'m s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 211 ; + } +#Solar insolation rate of accumulation +'W m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 212 ; + } +#Mean total precipitation rate +'m s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 228 ; + } +#Surface runoff +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 8 ; + } +#Sea-ice thickness +'m' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 98 ; + } +#Snow depth +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 141 ; + } +#Nitrogen dioxide mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 121 ; + } +#Sulphur dioxide mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 122 ; + } +#Carbon monoxide mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 123 ; + } +#Ozone mass mixing ratio (full chemistry scheme) +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 203 ; + } +#Nitrogen dioxide mass mixing ratio difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 121 ; + } +#Sulphur dioxide mass mixing ratio difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 122 ; + } +#Carbon monoxide mass mixing ratio difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 123 ; + } +#Ozone mass mixing ratio difference (full chemistry scheme) +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 203 ; + } +#Friction velocity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; + } +#Time-mean 2 metre temperature +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 4 ; + } +#Time-mean 10 metre wind speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; + } +#Mean total cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; + } +#Lake total depth +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 7 ; + } +#Lake mix-layer temperature +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 8 ; + } +#Lake mix-layer depth +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 9 ; + } +#Lake bottom temperature +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 10 ; + } +#Lake total layer temperature +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 11 ; + } +#Lake shape factor +'dimensionless' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 12 ; + } +#Lake ice surface temperature +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 13 ; + } +#Lake ice total depth +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 14 ; + } +#Minimum vertical gradient of refractivity inside trapping layer +'m**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 15 ; + } +#Mean vertical gradient of refractivity inside trapping layer +'m**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 16 ; + } +#Duct base height +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 17 ; + } +#Trapping layer base height +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 18 ; + } +#Trapping layer top height +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 19 ; + } +#10 metre u-component of neutral wind +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 131 ; + } +#10 metre v-component of neutral wind +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 132 ; + } +#U-component surface stokes drift +'m s**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; + } +#V-component surface stokes drift +'m s**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; + } +#100 metre U wind component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 246 ; + } +#100 metre V wind component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 247 ; } diff --git a/definitions/grib2/localConcepts/ecmf/unstructuredGridType.def b/definitions/grib2/localConcepts/ecmf/unstructuredGridType.def index dfcc93e2f..8264d8121 100644 --- a/definitions/grib2/localConcepts/ecmf/unstructuredGridType.def +++ b/definitions/grib2/localConcepts/ecmf/unstructuredGridType.def @@ -8,3 +8,4 @@ 'eORCA12' = { numberOfGridUsed = 7; } 'CORE2' = { numberOfGridUsed = 8; } 'NG5' = { numberOfGridUsed = 9; } +'DART' = { numberOfGridUsed = 10; } diff --git a/definitions/grib2/localConcepts/era6/modelVersionConcept_AIFS.def b/definitions/grib2/localConcepts/era6/modelVersionConcept.AIFS.def similarity index 100% rename from definitions/grib2/localConcepts/era6/modelVersionConcept_AIFS.def rename to definitions/grib2/localConcepts/era6/modelVersionConcept.AIFS.def diff --git a/definitions/grib2/localConcepts/era6/modelVersionConcept_IFS.def b/definitions/grib2/localConcepts/era6/modelVersionConcept.IFS.def similarity index 100% rename from definitions/grib2/localConcepts/era6/modelVersionConcept_IFS.def rename to definitions/grib2/localConcepts/era6/modelVersionConcept.IFS.def diff --git a/definitions/grib2/localConcepts/era6/name.def b/definitions/grib2/localConcepts/era6/name.def index 635f9c0da..8a4b79d14 100644 --- a/definitions/grib2/localConcepts/era6/name.def +++ b/definitions/grib2/localConcepts/era6/name.def @@ -426,30 +426,70 @@ constituentType = 0 ; typeOfStatisticalProcessing = 1 ; } -#Mean carbon dioxide net ecosystem exchange flux -'Mean carbon dioxide net ecosystem exchange flux' = { +#Time-mean carbon dioxide net ecosystem exchange flux +'Time-mean carbon dioxide net ecosystem exchange flux' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 59 ; constituentType = 3 ; typeOfStatisticalProcessing = 0 ; } -#Mean carbon dioxide gross primary production flux -'Mean carbon dioxide gross primary production flux' = { +#Time-mean carbon dioxide gross primary production flux +'Time-mean carbon dioxide gross primary production flux' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 60 ; constituentType = 3 ; typeOfStatisticalProcessing = 0 ; } -#Mean carbon dioxide ecosystem respiration flux -'Mean carbon dioxide ecosystem respiration flux' = { +#Time-mean carbon dioxide ecosystem respiration flux +'Time-mean carbon dioxide ecosystem respiration flux' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 61 ; constituentType = 3 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean U component of wind +'Time-mean U component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U component of wind +'Time-mean U component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V component of wind +'Time-mean V component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V component of wind +'Time-mean V component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean logarithm of surface pressure 'Time-mean logarithm of surface pressure' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/era6/paramId.def b/definitions/grib2/localConcepts/era6/paramId.def index 2e1ceceb7..afbb3fd2c 100644 --- a/definitions/grib2/localConcepts/era6/paramId.def +++ b/definitions/grib2/localConcepts/era6/paramId.def @@ -426,7 +426,7 @@ constituentType = 0 ; typeOfStatisticalProcessing = 1 ; } -#Mean carbon dioxide net ecosystem exchange flux +#Time-mean carbon dioxide net ecosystem exchange flux '235062' = { discipline = 2 ; parameterCategory = 0 ; @@ -434,7 +434,7 @@ constituentType = 3 ; typeOfStatisticalProcessing = 0 ; } -#Mean carbon dioxide gross primary production flux +#Time-mean carbon dioxide gross primary production flux '235063' = { discipline = 2 ; parameterCategory = 0 ; @@ -442,7 +442,7 @@ constituentType = 3 ; typeOfStatisticalProcessing = 0 ; } -#Mean carbon dioxide ecosystem respiration flux +#Time-mean carbon dioxide ecosystem respiration flux '235064' = { discipline = 2 ; parameterCategory = 0 ; @@ -450,6 +450,46 @@ constituentType = 3 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean U component of wind +'235131' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U component of wind +'235131' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V component of wind +'235132' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V component of wind +'235132' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean logarithm of surface pressure '235152' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/era6/shortName.def b/definitions/grib2/localConcepts/era6/shortName.def index 769ddfe09..2fefe0ab7 100644 --- a/definitions/grib2/localConcepts/era6/shortName.def +++ b/definitions/grib2/localConcepts/era6/shortName.def @@ -426,30 +426,70 @@ constituentType = 0 ; typeOfStatisticalProcessing = 1 ; } -#Mean carbon dioxide net ecosystem exchange flux -'mcdneef' = { +#Time-mean carbon dioxide net ecosystem exchange flux +'avg_fco2nee' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 59 ; constituentType = 3 ; typeOfStatisticalProcessing = 0 ; } -#Mean carbon dioxide gross primary production flux -'mcdgppf' = { +#Time-mean carbon dioxide gross primary production flux +'avg_fco2gpp' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 60 ; constituentType = 3 ; typeOfStatisticalProcessing = 0 ; } -#Mean carbon dioxide ecosystem respiration flux -'mcderf' = { +#Time-mean carbon dioxide ecosystem respiration flux +'avg_fco2rec' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 61 ; constituentType = 3 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean U component of wind +'avg_u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U component of wind +'avg_u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V component of wind +'avg_v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V component of wind +'avg_v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean logarithm of surface pressure 'avg_lnsp' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/era6/units.def b/definitions/grib2/localConcepts/era6/units.def index ada2d609f..15a30baaa 100644 --- a/definitions/grib2/localConcepts/era6/units.def +++ b/definitions/grib2/localConcepts/era6/units.def @@ -426,7 +426,7 @@ constituentType = 0 ; typeOfStatisticalProcessing = 1 ; } -#Mean carbon dioxide net ecosystem exchange flux +#Time-mean carbon dioxide net ecosystem exchange flux 'kg m**-2 s**-1' = { discipline = 2 ; parameterCategory = 0 ; @@ -434,7 +434,7 @@ constituentType = 3 ; typeOfStatisticalProcessing = 0 ; } -#Mean carbon dioxide gross primary production flux +#Time-mean carbon dioxide gross primary production flux 'kg m**-2 s**-1' = { discipline = 2 ; parameterCategory = 0 ; @@ -442,7 +442,7 @@ constituentType = 3 ; typeOfStatisticalProcessing = 0 ; } -#Mean carbon dioxide ecosystem respiration flux +#Time-mean carbon dioxide ecosystem respiration flux 'kg m**-2 s**-1' = { discipline = 2 ; parameterCategory = 0 ; @@ -450,6 +450,46 @@ constituentType = 3 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean U component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean logarithm of surface pressure 'Numeric' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/s2s/name.def b/definitions/grib2/localConcepts/s2s/name.def index c94074156..39c9a18bd 100644 --- a/definitions/grib2/localConcepts/s2s/name.def +++ b/definitions/grib2/localConcepts/s2s/name.def @@ -29,6 +29,15 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Convective available potential energy +'Convective available potential energy' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Maximum temperature at 2 metres in the last 6 hours 'Maximum temperature at 2 metres in the last 6 hours' = { discipline = 0 ; @@ -173,6 +182,13 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Snow albedo +'Snow albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 0 ; + } #Soil moisture top 20 cm 'Soil moisture top 20 cm' = { discipline = 2 ; @@ -299,4 +315,13 @@ parameterCategory = 1 ; parameterNumber = 60 ; typeOfStatisticalProcessing = 0 ; + } +#Total Cloud Cover +'Total Cloud Cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/s2s/paramId.def b/definitions/grib2/localConcepts/s2s/paramId.def index 25e615250..c28ed5169 100644 --- a/definitions/grib2/localConcepts/s2s/paramId.def +++ b/definitions/grib2/localConcepts/s2s/paramId.def @@ -29,6 +29,15 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Convective available potential energy +'59' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Maximum temperature at 2 metres in the last 6 hours '121' = { discipline = 0 ; @@ -173,6 +182,13 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Snow albedo +'228032' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 0 ; + } #Soil moisture top 20 cm '228086' = { discipline = 2 ; @@ -299,4 +315,13 @@ parameterCategory = 1 ; parameterNumber = 60 ; typeOfStatisticalProcessing = 0 ; + } +#Total Cloud Cover +'228164' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/s2s/shortName.def b/definitions/grib2/localConcepts/s2s/shortName.def index a4b7406c1..b88af4de6 100644 --- a/definitions/grib2/localConcepts/s2s/shortName.def +++ b/definitions/grib2/localConcepts/s2s/shortName.def @@ -29,6 +29,15 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Convective available potential energy +'cape' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Maximum temperature at 2 metres in the last 6 hours 'mx2t6' = { discipline = 0 ; @@ -173,6 +182,13 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Snow albedo +'asn' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 0 ; + } #Soil moisture top 20 cm 'sm20' = { discipline = 2 ; @@ -299,4 +315,13 @@ parameterCategory = 1 ; parameterNumber = 60 ; typeOfStatisticalProcessing = 0 ; + } +#Total Cloud Cover +'tcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/s2s/units.def b/definitions/grib2/localConcepts/s2s/units.def index 96c31aab0..a187fb1cb 100644 --- a/definitions/grib2/localConcepts/s2s/units.def +++ b/definitions/grib2/localConcepts/s2s/units.def @@ -29,6 +29,15 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Convective available potential energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Maximum temperature at 2 metres in the last 6 hours 'K' = { discipline = 0 ; @@ -173,6 +182,13 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Snow albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 0 ; + } #Soil moisture top 20 cm 'kg m**-3' = { discipline = 2 ; @@ -299,4 +315,13 @@ parameterCategory = 1 ; parameterNumber = 60 ; typeOfStatisticalProcessing = 0 ; + } +#Total Cloud Cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/uerra/cfName.def b/definitions/grib2/localConcepts/uerra/cfName.def index 3e3c697fa..68687f4e4 100644 --- a/definitions/grib2/localConcepts/uerra/cfName.def +++ b/definitions/grib2/localConcepts/uerra/cfName.def @@ -80,6 +80,13 @@ typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 1 ; } +#Forecast albedo +'surface_albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Sea-ice thickness 'sea_ice_thickness' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/uerra/cfVarName.def b/definitions/grib2/localConcepts/uerra/cfVarName.def index 889fc101a..9372191e9 100644 --- a/definitions/grib2/localConcepts/uerra/cfVarName.def +++ b/definitions/grib2/localConcepts/uerra/cfVarName.def @@ -184,4 +184,14 @@ scaledValueOfFirstFixedSurface = 2 ; scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; + } +#10 metre wind direction +'wdir10' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/uerra/name.def b/definitions/grib2/localConcepts/uerra/name.def index 01f895fb5..2d84f6645 100644 --- a/definitions/grib2/localConcepts/uerra/name.def +++ b/definitions/grib2/localConcepts/uerra/name.def @@ -356,6 +356,27 @@ parameterNumber = 84 ; typeOfStatisticalProcessing = 0 ; } +#Low cloud cover +'Low cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + } +#Medium cloud cover +'Medium cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 0 ; + } +#High cloud cover +'High cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + } #2 metre specific humidity '2 metre specific humidity' = { discipline = 0 ; @@ -367,6 +388,13 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } +#Snow albedo +'Snow albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 0 ; + } #Total column vertically-integrated graupel (snow pellets) 'Total column vertically-integrated graupel (snow pellets)' = { discipline = 0 ; @@ -470,6 +498,16 @@ typeOfStatisticalProcessing = 1 ; lengthOfTimeRange = 24 ; } +#10 metre wind direction +'10 metre wind direction' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Time-integrated surface direct short wave radiation flux 'Time-integrated surface direct short wave radiation flux' = { discipline = 0 ; @@ -501,6 +539,13 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Forecast albedo +'Forecast albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Sea ice surface temperature 'Sea ice surface temperature' = { discipline = 10 ; @@ -525,6 +570,20 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Visibility +'Visibility' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Wind direction +'Wind direction' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Snowmelt 'Snowmelt' = { discipline = 0 ; @@ -549,4 +608,13 @@ parameterCategory = 1 ; parameterNumber = 60 ; typeOfStatisticalProcessing = 0 ; + } +#Total Cloud Cover +'Total Cloud Cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/uerra/paramId.def b/definitions/grib2/localConcepts/uerra/paramId.def index aeed988df..0b6f94053 100644 --- a/definitions/grib2/localConcepts/uerra/paramId.def +++ b/definitions/grib2/localConcepts/uerra/paramId.def @@ -356,6 +356,27 @@ parameterNumber = 84 ; typeOfStatisticalProcessing = 0 ; } +#Low cloud cover +'3073' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + } +#Medium cloud cover +'3074' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 0 ; + } +#High cloud cover +'3075' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + } #2 metre specific humidity '174096' = { discipline = 0 ; @@ -367,6 +388,13 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } +#Snow albedo +'228032' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 0 ; + } #Total column vertically-integrated graupel (snow pellets) '260001' = { discipline = 0 ; @@ -470,6 +498,16 @@ typeOfStatisticalProcessing = 1 ; lengthOfTimeRange = 24 ; } +#10 metre wind direction +'260260' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Time-integrated surface direct short wave radiation flux '260264' = { discipline = 0 ; @@ -501,6 +539,13 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Forecast albedo +'260509' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Sea ice surface temperature '260649' = { discipline = 10 ; @@ -525,6 +570,20 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Visibility +'3020' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Wind direction +'3031' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Snowmelt '3099' = { discipline = 0 ; @@ -549,4 +608,13 @@ parameterCategory = 1 ; parameterNumber = 60 ; typeOfStatisticalProcessing = 0 ; + } +#Total Cloud Cover +'228164' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/uerra/shortName.def b/definitions/grib2/localConcepts/uerra/shortName.def index 5a58eed8b..6d06466e9 100644 --- a/definitions/grib2/localConcepts/uerra/shortName.def +++ b/definitions/grib2/localConcepts/uerra/shortName.def @@ -356,6 +356,27 @@ parameterNumber = 84 ; typeOfStatisticalProcessing = 0 ; } +#Low cloud cover +'lcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + } +#Medium cloud cover +'mcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 0 ; + } +#High cloud cover +'hcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + } #2 metre specific humidity '2sh' = { discipline = 0 ; @@ -367,6 +388,13 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } +#Snow albedo +'asn' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 0 ; + } #Total column vertically-integrated graupel (snow pellets) 'tcolg' = { discipline = 0 ; @@ -470,6 +498,16 @@ typeOfStatisticalProcessing = 1 ; lengthOfTimeRange = 24 ; } +#10 metre wind direction +'10wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Time-integrated surface direct short wave radiation flux 'tidirswrf' = { discipline = 0 ; @@ -501,6 +539,13 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Forecast albedo +'al' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Sea ice surface temperature 'sist' = { discipline = 10 ; @@ -525,6 +570,20 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Visibility +'vis' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Wind direction +'wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Snowmelt 'snom' = { discipline = 0 ; @@ -549,4 +608,13 @@ parameterCategory = 1 ; parameterNumber = 60 ; typeOfStatisticalProcessing = 0 ; + } +#Total Cloud Cover +'tcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/uerra/units.def b/definitions/grib2/localConcepts/uerra/units.def index e7a5e35d0..816d49be8 100644 --- a/definitions/grib2/localConcepts/uerra/units.def +++ b/definitions/grib2/localConcepts/uerra/units.def @@ -356,6 +356,27 @@ parameterNumber = 84 ; typeOfStatisticalProcessing = 0 ; } +#Low cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + } +#Medium cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 0 ; + } +#High cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + } #2 metre specific humidity 'kg kg**-1' = { discipline = 0 ; @@ -367,6 +388,13 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } +#Snow albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 0 ; + } #Total column vertically-integrated graupel (snow pellets) 'kg m**-2' = { discipline = 0 ; @@ -470,6 +498,16 @@ typeOfStatisticalProcessing = 1 ; lengthOfTimeRange = 24 ; } +#10 metre wind direction +'Degree true' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Time-integrated surface direct short wave radiation flux 'J m**-2' = { discipline = 0 ; @@ -501,6 +539,13 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Forecast albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Sea ice surface temperature 'K' = { discipline = 10 ; @@ -525,6 +570,20 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Visibility +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Wind direction +'Degree true' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Snowmelt 'kg m**-2' = { discipline = 0 ; @@ -549,4 +608,13 @@ parameterCategory = 1 ; parameterNumber = 60 ; typeOfStatisticalProcessing = 0 ; + } +#Total Cloud Cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/marsLevtypeConcept.def b/definitions/grib2/marsLevtypeConcept.def index 4f9c8ae0b..5d1d69d85 100644 --- a/definitions/grib2/marsLevtypeConcept.def +++ b/definitions/grib2/marsLevtypeConcept.def @@ -1,70 +1,70 @@ # Concept marsLevtype -'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=255;} -'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=8;} -'o2d' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=9;} -'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=162;} -'sfc' = {typeOfFirstFixedSurface=2; typeOfSecondFixedSurface=255;} -'sfc' = {typeOfFirstFixedSurface=7; typeOfSecondFixedSurface=255;} -'sfc' = {typeOfFirstFixedSurface=8; typeOfSecondFixedSurface=255;} -'sfc' = {typeOfFirstFixedSurface=17; typeOfSecondFixedSurface=255;} -'sfc' = {typeOfFirstFixedSurface=18; typeOfSecondFixedSurface=255;} -'o2d' = {typeOfFirstFixedSurface=20; scaleFactorOfFirstFixedSurface=-2; - scaledValueOfFirstFixedSurface=29315; typeOfSecondFixedSurface=255;} -'o2d' = {typeOfFirstFixedSurface=20; typeOfSecondFixedSurface=255;} -'pl' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=255;} -'pl' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=100;} -'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=100; - scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=80000;} -'sfc' = {typeOfFirstFixedSurface=100; scaleFactorOfFirstFixedSurface=0; scaledValueOfFirstFixedSurface=80000; - typeOfSecondFixedSurface=100; scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=45000;} -'sfc' = {typeOfFirstFixedSurface=100; scaleFactorOfFirstFixedSurface=0; - scaledValueOfFirstFixedSurface=45000; typeOfSecondFixedSurface=8;} -'sfc' = {typeOfFirstFixedSurface=101; typeOfSecondFixedSurface=255;} -'sfc' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;} -'sfc' = {typeOfFirstFixedSurface=103; typeOfSecondFixedSurface=255;} -'sfc' = {typeOfFirstFixedSurface=103; typeOfSecondFixedSurface=103;} -'ml' = {typeOfFirstFixedSurface=105; typeOfSecondFixedSurface=255;} -'ml' = {typeOfFirstFixedSurface=105; typeOfSecondFixedSurface=105;} -'sfc' = {typeOfFirstFixedSurface=106; typeOfSecondFixedSurface=255;} -'sfc' = {typeOfFirstFixedSurface=106;typeOfSecondFixedSurface=106;} -'pt' = {typeOfFirstFixedSurface=107; typeOfSecondFixedSurface=255;} -'pt' = {typeOfFirstFixedSurface=107; typeOfSecondFixedSurface=107;} -'pv' = {typeOfFirstFixedSurface=109; typeOfSecondFixedSurface=255;} -'sol' = {typeOfFirstFixedSurface=114; typeOfSecondFixedSurface=255;} -'sol' = {typeOfFirstFixedSurface=114; typeOfSecondFixedSurface=114;} -'hhl' = {typeOfFirstFixedSurface=118; typeOfSecondFixedSurface=255;} -'hpl' = {typeOfFirstFixedSurface=119; typeOfSecondFixedSurface=255;} -'sol' = {typeOfFirstFixedSurface=151; typeOfSecondFixedSurface=255;} -'sol' = {typeOfFirstFixedSurface=151; typeOfSecondFixedSurface=151;} -'sol' = {typeOfFirstFixedSurface=152; typeOfSecondFixedSurface=255;} -'sol' = {typeOfFirstFixedSurface=152; typeOfSecondFixedSurface=152;} -'o2d' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=255;} -'o2d' = {typeOfFirstFixedSurface=160; scaleFactorOfFirstFixedSurface=0; - scaledValueOfFirstFixedSurface=0; typeOfSecondFixedSurface=255;} -'o2d' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=160;} -'o2d' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=9;} -'o2d' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=20; - scaledValueOfFirstFixedSurface=0; scaleFactorOfFirstFixedSurface=0;} -'sfc' = {typeOfFirstFixedSurface=162; typeOfSecondFixedSurface=255;} -'sfc' = {typeOfFirstFixedSurface=166; typeOfSecondFixedSurface=255;} -'o3d' = {typeOfFirstFixedSurface=168; typeOfSecondFixedSurface=255;} -'o3d' = {typeOfFirstFixedSurface=168; typeOfSecondFixedSurface=168;} -'o2d' = {typeOfFirstFixedSurface=169; typeOfSecondFixedSurface=255;} -'o2d' = {typeOfFirstFixedSurface=170; typeOfSecondFixedSurface=255;} -'o2d' = {typeOfFirstFixedSurface=171; typeOfSecondFixedSurface=255;} -'o2d' = {typeOfFirstFixedSurface=173; typeOfSecondFixedSurface=255;} -'o2d' = {typeOfFirstFixedSurface=173; typeOfSecondFixedSurface=175;} -'o2d' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=255;} -'sfc' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=255; discipline=1;} -'o2d' = {typeOfFirstFixedSurface=175; typeOfSecondFixedSurface=255;} -'o2d' = {typeOfFirstFixedSurface=176; typeOfSecondFixedSurface=255;} -'o2d' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=160; - scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=0;} -'o2d' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=176;} -'sfc' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=176; discipline=1;} -'o2d' = {typeOfFirstFixedSurface=175; typeOfSecondFixedSurface=176;} -'sfc' = {typeOfFirstFixedSurface=177; typeOfSecondFixedSurface=255;} -'o2d' = {typeOfFirstFixedSurface=188; typeOfSecondFixedSurface=189;} +'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=8;} +'o2d' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=9;} +'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=162;} +'sfc' = {typeOfFirstFixedSurface=2; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=7; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=8; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=17; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=18; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=19; typeOfSecondFixedSurface=255;} +'o2d' = {discipline=10; typeOfFirstFixedSurface=20; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=20; typeOfSecondFixedSurface=255;} +'pl' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=255;} +'pl' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=100;} +'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=100; + scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=80000;} +'sfc' = {typeOfFirstFixedSurface=100; scaleFactorOfFirstFixedSurface=0; scaledValueOfFirstFixedSurface=80000; + typeOfSecondFixedSurface=100; scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=45000;} +'sfc' = {typeOfFirstFixedSurface=100; scaleFactorOfFirstFixedSurface=0; + scaledValueOfFirstFixedSurface=45000; typeOfSecondFixedSurface=8;} +'sfc' = {typeOfFirstFixedSurface=101; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=103; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=103; typeOfSecondFixedSurface=103;} +'ml' = {typeOfFirstFixedSurface=105; typeOfSecondFixedSurface=255;} +'ml' = {typeOfFirstFixedSurface=105; typeOfSecondFixedSurface=105;} +'sfc' = {typeOfFirstFixedSurface=106; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=106;typeOfSecondFixedSurface=106;} +'pt' = {typeOfFirstFixedSurface=107; typeOfSecondFixedSurface=255;} +'pt' = {typeOfFirstFixedSurface=107; typeOfSecondFixedSurface=107;} +'pv' = {typeOfFirstFixedSurface=109; typeOfSecondFixedSurface=255;} +'sol' = {typeOfFirstFixedSurface=114; typeOfSecondFixedSurface=255;} +'sol' = {typeOfFirstFixedSurface=114; typeOfSecondFixedSurface=114;} +'hhl' = {typeOfFirstFixedSurface=118; typeOfSecondFixedSurface=255;} +'hpl' = {typeOfFirstFixedSurface=119; typeOfSecondFixedSurface=255;} +'sol' = {typeOfFirstFixedSurface=151; typeOfSecondFixedSurface=255;} +'sol' = {typeOfFirstFixedSurface=151; typeOfSecondFixedSurface=151;} +'sol' = {typeOfFirstFixedSurface=152; typeOfSecondFixedSurface=255;} +'sol' = {typeOfFirstFixedSurface=152; typeOfSecondFixedSurface=152;} +'o2d' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=160; scaleFactorOfFirstFixedSurface=0; + scaledValueOfFirstFixedSurface=0; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=160;} +'o2d' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=9;} +'o2d' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=20; + scaledValueOfFirstFixedSurface=0; scaleFactorOfFirstFixedSurface=0;} +'sfc' = {typeOfFirstFixedSurface=162; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=166; typeOfSecondFixedSurface=255;} +'o3d' = {typeOfFirstFixedSurface=168; typeOfSecondFixedSurface=255;} +'o3d' = {typeOfFirstFixedSurface=168; typeOfSecondFixedSurface=168;} +'o2d' = {typeOfFirstFixedSurface=169; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=170; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=171; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=173; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=173; typeOfSecondFixedSurface=175;} +'o2d' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=255; discipline=1;} +'o2d' = {typeOfFirstFixedSurface=175; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=176; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=160; + scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=0;} +'o2d' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=176;} +'sfc' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=176; discipline=1;} +'o2d' = {typeOfFirstFixedSurface=175; typeOfSecondFixedSurface=176;} +'sfc' = {typeOfFirstFixedSurface=177; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=188; typeOfSecondFixedSurface=189;} 'sfc' = {typeOfFirstFixedSurface=5; typeOfSecondFixedSurface=255;} 'sfc' = {typeOfFirstFixedSurface=14; typeOfSecondFixedSurface=255;} diff --git a/definitions/grib2/mars_labeling.def b/definitions/grib2/mars_labeling.def index 6905210ce..ad51ad962 100644 --- a/definitions/grib2/mars_labeling.def +++ b/definitions/grib2/mars_labeling.def @@ -1,39 +1,42 @@ # (C) Copyright 2005- ECMWF. -codetable[2] marsClass "mars/class.table" = "od" : dump,string_type,lowercase; +codetable[2] marsClass "mars/class.table" = "od" : dump,string_type,lowercase; codetable[2] marsType "mars/type.table" = "an" : dump,string_type,no_fail,lowercase; -codetable[2] marsStream "mars/stream.table" = "oper" : dump,string_type,lowercase ; +codetable[2] marsStream "mars/stream.table" = "oper" : dump,string_type,lowercase; ksec1expver[4] experimentVersionNumber = "0001" : dump; -meta class g2_mars_labeling(0,marsClass, - marsType, - marsStream, - experimentVersionNumber, - typeOfProcessedData, - productDefinitionTemplateNumber, - stepType, - derivedForecast, - typeOfGeneratingProcess); +meta class g2_mars_labeling( + 0,marsClass, + marsType, + marsStream, + experimentVersionNumber, + typeOfProcessedData, + productDefinitionTemplateNumber, + stepType, + derivedForecast, + typeOfGeneratingProcess); -meta type g2_mars_labeling(1,marsClass, - marsType, - marsStream, - experimentVersionNumber, - typeOfProcessedData, - productDefinitionTemplateNumber, - stepType, - derivedForecast, - typeOfGeneratingProcess); +meta type g2_mars_labeling( + 1,marsClass, + marsType, + marsStream, + experimentVersionNumber, + typeOfProcessedData, + productDefinitionTemplateNumber, + stepType, + derivedForecast, + typeOfGeneratingProcess); -meta stream g2_mars_labeling(2,marsClass, - marsType, - marsStream, - experimentVersionNumber, - typeOfProcessedData, - productDefinitionTemplateNumber, - stepType, - derivedForecast, - typeOfGeneratingProcess); +meta stream g2_mars_labeling( + 2,marsClass, + marsType, + marsStream, + experimentVersionNumber, + typeOfProcessedData, + productDefinitionTemplateNumber, + stepType, + derivedForecast, + typeOfGeneratingProcess); alias ls.dataType = marsType; @@ -41,5 +44,4 @@ alias mars.class = class; alias mars.type = type; alias mars.stream = stream; alias mars.expver = experimentVersionNumber; - -alias mars.domain = globalDomain; # For now... +alias mars.domain = globalDomain; # For now... diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 3ac979f33..d659a415b 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -1305,6 +1305,372 @@ parameterCategory = 0 ; parameterNumber = 84 ; } +#Time-mean wave induced mean sea level correction +'Time-mean wave induced mean sea level correction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean ratio of wave angular and frequency width +'Time-mean ratio of wave angular and frequency width' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean number of events in freak waves statistics +'Time-mean number of events in freak waves statistics' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U-component of atmospheric surface momentum flux +'Time-mean U-component of atmospheric surface momentum flux' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V-component of atmospheric surface momentum flux +'Time-mean V-component of atmospheric surface momentum flux' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U-component of surface momentum flux into ocean +'Time-mean U-component of surface momentum flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V-component of surface momentum flux into ocean +'Time-mean V-component of surface momentum flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave turbulent energy flux into ocean +'Time-mean wave turbulent energy flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave directional width of first swell partition +'Time-mean wave directional width of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave frequency width of first swell partition +'Time-mean wave frequency width of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave directional width of second swell partition +'Time-mean wave directional width of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave frequency width of second swell partition +'Time-mean wave frequency width of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave directional width of third swell partition +'Time-mean wave directional width of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave frequency width of third swell partition +'Time-mean wave frequency width of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave energy flux magnitude +'Time-mean wave energy flux magnitude' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave energy flux mean direction +'Time-mean wave energy flux mean direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'Time-mean significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'Time-mean significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'Time-mean significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'Time-mean significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'Time-mean significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'Time-mean significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-mean significant wave height of all waves with period larger than 10s +'Time-mean significant wave height of all waves with period larger than 10s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-mean significant wave height of first swell partition +'Time-mean significant wave height of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave direction of first swell partition +'Time-mean mean wave direction of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period of first swell partition +'Time-mean mean wave period of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant wave height of second swell partition +'Time-mean significant wave height of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave direction of second swell partition +'Time-mean mean wave direction of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period of second swell partition +'Time-mean mean wave period of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant wave height of third swell partition +'Time-mean significant wave height of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave direction of third swell partition +'Time-mean mean wave direction of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period of third swell partition +'Time-mean mean wave period of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean time domain maximum individual crest height +'Time-mean time domain maximum individual crest height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean time domain maximum individual wave height +'Time-mean time domain maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean space time maximum individual crest height +'Time-mean space time maximum individual crest height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean space time maximum individual wave height +'Time-mean space time maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave Spectral Skewness +'Time-mean wave Spectral Skewness' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean free convective velocity over the oceans +'Time-mean free convective velocity over the oceans' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean air density over the oceans +'Time-mean air density over the oceans' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean normalized energy flux into waves +'Time-mean normalized energy flux into waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean normalized energy flux into ocean +'Time-mean normalized energy flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean normalized stress into ocean +'Time-mean normalized stress into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U-component surface stokes drift +'Time-mean U-component surface stokes drift' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V-component surface stokes drift +'Time-mean V-component surface stokes drift' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean period corresponding to maximum individual wave height +'Time-mean period corresponding to maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean envelop-maximum individual wave height +'Time-mean envelop-maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on first moment +'Time-mean mean wave period based on first moment' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean mean zero-crossing wave period 'Time-mean mean zero-crossing wave period' = { discipline = 10 ; @@ -1312,6 +1678,55 @@ parameterNumber = 28 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean wave spectral directional width +'Time-mean wave spectral directional width' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on first moment for wind waves +'Time-mean mean wave period based on first moment for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on second moment for wind waves +'Time-mean mean wave period based on second moment for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral directional width for wind waves +'Time-mean wave spectral directional width for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on first moment for swell +'Time-mean mean wave period based on first moment for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on second moment for swell +'Time-mean mean wave period based on second moment for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral directional width for swell +'Time-mean wave spectral directional width for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean significant height of combined wind waves and swell 'Time-mean significant height of combined wind waves and swell' = { discipline = 10 ; @@ -1319,6 +1734,13 @@ parameterNumber = 3 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean mean wave direction +'Time-mean mean wave direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean peak wave period 'Time-mean peak wave period' = { discipline = 10 ; @@ -1333,6 +1755,1772 @@ parameterNumber = 15 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean coefficient of drag with waves +'Time-mean coefficient of drag with waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant height of wind waves +'Time-mean significant height of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean direction of wind waves +'Time-mean mean direction of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean period of wind waves +'Time-mean mean period of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant height of total swell +'Time-mean significant height of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean direction of total swell +'Time-mean mean direction of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean period of total swell +'Time-mean mean period of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean square slope of waves +'Time-mean mean square slope of waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre wind speed +'Time-mean 10 metre wind speed' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre wind direction +'Time-mean 10 metre wind direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 2D wave spectra (single) +'Time-mean 2D wave spectra (single)' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral kurtosis +'Time-mean wave spectral kurtosis' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean benjamin-Feir index +'Time-mean benjamin-Feir index' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral peakedness +'Time-mean wave spectral peakedness' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-maximum wave induced mean sea level correction +'Time-maximum wave induced mean sea level correction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum ratio of wave angular and frequency width +'Time-maximum ratio of wave angular and frequency width' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum number of events in freak waves statistics +'Time-maximum number of events in freak waves statistics' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum U-component of atmospheric surface momentum flux +'Time-maximum U-component of atmospheric surface momentum flux' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum V-component of atmospheric surface momentum flux +'Time-maximum V-component of atmospheric surface momentum flux' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum U-component of surface momentum flux into ocean +'Time-maximum U-component of surface momentum flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum V-component of surface momentum flux into ocean +'Time-maximum V-component of surface momentum flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave turbulent energy flux into ocean +'Time-maximum wave turbulent energy flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave directional width of first swell partition +'Time-maximum wave directional width of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave frequency width of first swell partition +'Time-maximum wave frequency width of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave directional width of second swell partition +'Time-maximum wave directional width of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave frequency width of second swell partition +'Time-maximum wave frequency width of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave directional width of third swell partition +'Time-maximum wave directional width of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave frequency width of third swell partition +'Time-maximum wave frequency width of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave energy flux magnitude +'Time-maximum wave energy flux magnitude' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave energy flux mean direction +'Time-maximum wave energy flux mean direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'Time-maximum significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'Time-maximum significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'Time-maximum significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'Time-maximum significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'Time-maximum significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'Time-maximum significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-maximum significant wave height of all waves with period larger than 10s +'Time-maximum significant wave height of all waves with period larger than 10s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-maximum significant wave height of first swell partition +'Time-maximum significant wave height of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction of first swell partition +'Time-maximum mean wave direction of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period of first swell partition +'Time-maximum mean wave period of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant wave height of second swell partition +'Time-maximum significant wave height of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction of second swell partition +'Time-maximum mean wave direction of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period of second swell partition +'Time-maximum mean wave period of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant wave height of third swell partition +'Time-maximum significant wave height of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction of third swell partition +'Time-maximum mean wave direction of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period of third swell partition +'Time-maximum mean wave period of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum time domain maximum individual crest height +'Time-maximum time domain maximum individual crest height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum time domain maximum individual wave height +'Time-maximum time domain maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum space time maximum individual crest height +'Time-maximum space time maximum individual crest height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum space time maximum individual wave height +'Time-maximum space time maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave Spectral Skewness +'Time-maximum wave Spectral Skewness' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum free convective velocity over the oceans +'Time-maximum free convective velocity over the oceans' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum air density over the oceans +'Time-maximum air density over the oceans' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum normalized energy flux into waves +'Time-maximum normalized energy flux into waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum normalized energy flux into ocean +'Time-maximum normalized energy flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum normalized stress into ocean +'Time-maximum normalized stress into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum U-component surface stokes drift +'Time-maximum U-component surface stokes drift' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum V-component surface stokes drift +'Time-maximum V-component surface stokes drift' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum period corresponding to maximum individual wave height +'Time-maximum period corresponding to maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum envelop-maximum individual wave height +'Time-maximum envelop-maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on first moment +'Time-maximum mean wave period based on first moment' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean zero-crossing wave period +'Time-maximum mean zero-crossing wave period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral directional width +'Time-maximum wave spectral directional width' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on first moment for wind waves +'Time-maximum mean wave period based on first moment for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on second moment for wind waves +'Time-maximum mean wave period based on second moment for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral directional width for wind waves +'Time-maximum wave spectral directional width for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on first moment for swell +'Time-maximum mean wave period based on first moment for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on second moment for swell +'Time-maximum mean wave period based on second moment for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral directional width for swell +'Time-maximum wave spectral directional width for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant height of combined wind waves and swell +'Time-maximum significant height of combined wind waves and swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction +'Time-maximum mean wave direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum peak wave period +'Time-maximum peak wave period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period +'Time-maximum mean wave period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum coefficient of drag with waves +'Time-maximum coefficient of drag with waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant height of wind waves +'Time-maximum significant height of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean direction of wind waves +'Time-maximum mean direction of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean period of wind waves +'Time-maximum mean period of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant height of total swell +'Time-maximum significant height of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean direction of total swell +'Time-maximum mean direction of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean period of total swell +'Time-maximum mean period of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean square slope of waves +'Time-maximum mean square slope of waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind speed +'Time-maximum 10 metre wind speed' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind direction +'Time-maximum 10 metre wind direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2D wave spectra (single) +'Time-maximum 2D wave spectra (single)' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral kurtosis +'Time-maximum wave spectral kurtosis' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum benjamin-Feir index +'Time-maximum benjamin-Feir index' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral peakedness +'Time-maximum wave spectral peakedness' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum wave induced mean sea level correction +'Time-minimum wave induced mean sea level correction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum ratio of wave angular and frequency width +'Time-minimum ratio of wave angular and frequency width' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum number of events in freak waves statistics +'Time-minimum number of events in freak waves statistics' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum U-component of atmospheric surface momentum flux +'Time-minimum U-component of atmospheric surface momentum flux' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum V-component of atmospheric surface momentum flux +'Time-minimum V-component of atmospheric surface momentum flux' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum U-component of surface momentum flux into ocean +'Time-minimum U-component of surface momentum flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum V-component of surface momentum flux into ocean +'Time-minimum V-component of surface momentum flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave turbulent energy flux into ocean +'Time-minimum wave turbulent energy flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave directional width of first swell partition +'Time-minimum wave directional width of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave frequency width of first swell partition +'Time-minimum wave frequency width of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave directional width of second swell partition +'Time-minimum wave directional width of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave frequency width of second swell partition +'Time-minimum wave frequency width of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave directional width of third swell partition +'Time-minimum wave directional width of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave frequency width of third swell partition +'Time-minimum wave frequency width of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave energy flux magnitude +'Time-minimum wave energy flux magnitude' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave energy flux mean direction +'Time-minimum wave energy flux mean direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'Time-minimum significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'Time-minimum significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'Time-minimum significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'Time-minimum significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'Time-minimum significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'Time-minimum significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-minimum significant wave height of all waves with period larger than 10s +'Time-minimum significant wave height of all waves with period larger than 10s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-minimum significant wave height of first swell partition +'Time-minimum significant wave height of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction of first swell partition +'Time-minimum mean wave direction of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period of first swell partition +'Time-minimum mean wave period of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant wave height of second swell partition +'Time-minimum significant wave height of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction of second swell partition +'Time-minimum mean wave direction of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period of second swell partition +'Time-minimum mean wave period of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant wave height of third swell partition +'Time-minimum significant wave height of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction of third swell partition +'Time-minimum mean wave direction of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period of third swell partition +'Time-minimum mean wave period of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum time domain maximum individual crest height +'Time-minimum time domain maximum individual crest height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum time domain maximum individual wave height +'Time-minimum time domain maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum space time maximum individual crest height +'Time-minimum space time maximum individual crest height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum space time maximum individual wave height +'Time-minimum space time maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave Spectral Skewness +'Time-minimum wave Spectral Skewness' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum free convective velocity over the oceans +'Time-minimum free convective velocity over the oceans' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum air density over the oceans +'Time-minimum air density over the oceans' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum normalized energy flux into waves +'Time-minimum normalized energy flux into waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum normalized energy flux into ocean +'Time-minimum normalized energy flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum normalized stress into ocean +'Time-minimum normalized stress into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum U-component surface stokes drift +'Time-minimum U-component surface stokes drift' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum V-component surface stokes drift +'Time-minimum V-component surface stokes drift' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum period corresponding to maximum individual wave height +'Time-minimum period corresponding to maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum envelop-maximum individual wave height +'Time-minimum envelop-maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on first moment +'Time-minimum mean wave period based on first moment' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean zero-crossing wave period +'Time-minimum mean zero-crossing wave period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral directional width +'Time-minimum wave spectral directional width' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on first moment for wind waves +'Time-minimum mean wave period based on first moment for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on second moment for wind waves +'Time-minimum mean wave period based on second moment for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral directional width for wind waves +'Time-minimum wave spectral directional width for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on first moment for swell +'Time-minimum mean wave period based on first moment for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on second moment for swell +'Time-minimum mean wave period based on second moment for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral directional width for swell +'Time-minimum wave spectral directional width for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant height of combined wind waves and swell +'Time-minimum significant height of combined wind waves and swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction +'Time-minimum mean wave direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum peak wave period +'Time-minimum peak wave period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period +'Time-minimum mean wave period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum coefficient of drag with waves +'Time-minimum coefficient of drag with waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant height of wind waves +'Time-minimum significant height of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean direction of wind waves +'Time-minimum mean direction of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean period of wind waves +'Time-minimum mean period of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant height of total swell +'Time-minimum significant height of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean direction of total swell +'Time-minimum mean direction of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean period of total swell +'Time-minimum mean period of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean square slope of waves +'Time-minimum mean square slope of waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind speed +'Time-minimum 10 metre wind speed' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind direction +'Time-minimum 10 metre wind direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2D wave spectra (single) +'Time-minimum 2D wave spectra (single)' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral kurtosis +'Time-minimum wave spectral kurtosis' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum benjamin-Feir index +'Time-minimum benjamin-Feir index' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral peakedness +'Time-minimum wave spectral peakedness' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation wave induced mean sea level correction +'Time-standard-deviation wave induced mean sea level correction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation ratio of wave angular and frequency width +'Time-standard-deviation ratio of wave angular and frequency width' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation number of events in freak waves statistics +'Time-standard-deviation number of events in freak waves statistics' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation U-component of atmospheric surface momentum flux +'Time-standard-deviation U-component of atmospheric surface momentum flux' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation V-component of atmospheric surface momentum flux +'Time-standard-deviation V-component of atmospheric surface momentum flux' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation U-component of surface momentum flux into ocean +'Time-standard-deviation U-component of surface momentum flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation V-component of surface momentum flux into ocean +'Time-standard-deviation V-component of surface momentum flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave turbulent energy flux into ocean +'Time-standard-deviation wave turbulent energy flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave directional width of first swell partition +'Time-standard-deviation wave directional width of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave frequency width of first swell partition +'Time-standard-deviation wave frequency width of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave directional width of second swell partition +'Time-standard-deviation wave directional width of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave frequency width of second swell partition +'Time-standard-deviation wave frequency width of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave directional width of third swell partition +'Time-standard-deviation wave directional width of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave frequency width of third swell partition +'Time-standard-deviation wave frequency width of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave energy flux magnitude +'Time-standard-deviation wave energy flux magnitude' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave energy flux mean direction +'Time-standard-deviation wave energy flux mean direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-standard-deviation significant wave height of all waves with period larger than 10s +'Time-standard-deviation significant wave height of all waves with period larger than 10s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-standard-deviation significant wave height of first swell partition +'Time-standard-deviation significant wave height of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction of first swell partition +'Time-standard-deviation mean wave direction of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period of first swell partition +'Time-standard-deviation mean wave period of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant wave height of second swell partition +'Time-standard-deviation significant wave height of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction of second swell partition +'Time-standard-deviation mean wave direction of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period of second swell partition +'Time-standard-deviation mean wave period of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant wave height of third swell partition +'Time-standard-deviation significant wave height of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction of third swell partition +'Time-standard-deviation mean wave direction of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period of third swell partition +'Time-standard-deviation mean wave period of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation time domain maximum individual crest height +'Time-standard-deviation time domain maximum individual crest height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation time domain maximum individual wave height +'Time-standard-deviation time domain maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation space time maximum individual crest height +'Time-standard-deviation space time maximum individual crest height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation space time maximum individual wave height +'Time-standard-deviation space time maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave Spectral Skewness +'Time-standard-deviation wave Spectral Skewness' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation free convective velocity over the oceans +'Time-standard-deviation free convective velocity over the oceans' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation air density over the oceans +'Time-standard-deviation air density over the oceans' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation normalized energy flux into waves +'Time-standard-deviation normalized energy flux into waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation normalized energy flux into ocean +'Time-standard-deviation normalized energy flux into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation normalized stress into ocean +'Time-standard-deviation normalized stress into ocean' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation U-component surface stokes drift +'Time-standard-deviation U-component surface stokes drift' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation V-component surface stokes drift +'Time-standard-deviation V-component surface stokes drift' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation period corresponding to maximum individual wave height +'Time-standard-deviation period corresponding to maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation envelop-maximum individual wave height +'Time-standard-deviation envelop-maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on first moment +'Time-standard-deviation mean wave period based on first moment' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean zero-crossing wave period +'Time-standard-deviation mean zero-crossing wave period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral directional width +'Time-standard-deviation wave spectral directional width' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on first moment for wind waves +'Time-standard-deviation mean wave period based on first moment for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on second moment for wind waves +'Time-standard-deviation mean wave period based on second moment for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral directional width for wind waves +'Time-standard-deviation wave spectral directional width for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on first moment for swell +'Time-standard-deviation mean wave period based on first moment for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on second moment for swell +'Time-standard-deviation mean wave period based on second moment for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral directional width for swell +'Time-standard-deviation wave spectral directional width for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant height of combined wind waves and swell +'Time-standard-deviation significant height of combined wind waves and swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction +'Time-standard-deviation mean wave direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation peak wave period +'Time-standard-deviation peak wave period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period +'Time-standard-deviation mean wave period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation coefficient of drag with waves +'Time-standard-deviation coefficient of drag with waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant height of wind waves +'Time-standard-deviation significant height of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean direction of wind waves +'Time-standard-deviation mean direction of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean period of wind waves +'Time-standard-deviation mean period of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant height of total swell +'Time-standard-deviation significant height of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean direction of total swell +'Time-standard-deviation mean direction of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean period of total swell +'Time-standard-deviation mean period of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean square slope of waves +'Time-standard-deviation mean square slope of waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind speed +'Time-standard-deviation 10 metre wind speed' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind direction +'Time-standard-deviation 10 metre wind direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2D wave spectra (single) +'Time-standard-deviation 2D wave spectra (single)' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral kurtosis +'Time-standard-deviation wave spectral kurtosis' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation benjamin-Feir index +'Time-standard-deviation benjamin-Feir index' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral peakedness +'Time-standard-deviation wave spectral peakedness' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 6 ; + } #Mean sea water temperature in the upper 300 m 'Mean sea water temperature in the upper 300 m' = { discipline = 10 ; @@ -4079,6 +6267,27 @@ parameterNumber = 148 ; typeOfFirstFixedSurface = 1 ; } +#Radar reflectivity +'Radar reflectivity' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 4 ; + } +#Pressure at cloud ceiling +'Pressure at cloud ceiling' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 19 ; + scaledValueOfFirstFixedSurface = 50 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Visibility through precipitation +'Visibility through precipitation' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + } #Burned area 'Burned area' = { discipline = 2 ; @@ -4463,99 +6672,99 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 1 ; } -#Mean temperature tendency due to short-wave radiation -'Mean temperature tendency due to short-wave radiation' = { +#Time-mean temperature tendency due to short-wave radiation +'Time-mean temperature tendency due to short-wave radiation' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 22 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to long-wave radiation -'Mean temperature tendency due to long-wave radiation' = { +#Time-mean temperature tendency due to long-wave radiation +'Time-mean temperature tendency due to long-wave radiation' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 23 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to short-wave radiation, clear sky -'Mean temperature tendency due to short-wave radiation, clear sky' = { +#Time-mean temperature tendency due to short wave radiation, clear sky +'Time-mean temperature tendency due to short wave radiation, clear sky' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 24 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to long-wave radiation, clear sky -'Mean temperature tendency due to long-wave radiation, clear sky' = { +#Time-mean temperature tendency due to long-wave radiation, clear sky +'Time-mean temperature tendency due to long-wave radiation, clear sky' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 25 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to parametrisations -'Mean temperature tendency due to parametrisations' = { +#Time-mean temperature tendency due to parametrisations +'Time-mean temperature tendency due to parametrisations' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 26 ; typeOfStatisticalProcessing = 0 ; } -#Mean specific humidity tendency due to parametrisations -'Mean specific humidity tendency due to parametrisations' = { +#Time-mean specific humidity tendency due to parametrisations +'Time-mean specific humidity tendency due to parametrisations' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 108 ; typeOfStatisticalProcessing = 0 ; } -#Mean eastward wind tendency due to parametrisations -'Mean eastward wind tendency due to parametrisations' = { +#Time-mean eastward wind tendency due to parametrisations +'Time-mean eastward wind tendency due to parametrisations' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 39 ; typeOfStatisticalProcessing = 0 ; } -#Mean northward wind tendency due to parametrisations -'Mean northward wind tendency due to parametrisations' = { +#Time-mean northward wind tendency due to parametrisations +'Time-mean northward wind tendency due to parametrisations' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 40 ; typeOfStatisticalProcessing = 0 ; } -#Mean updraught mass flux -'Mean updraught mass flux' = { +#Time-mean updraught mass flux +'Time-mean updraught mass flux' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 27 ; typeOfStatisticalProcessing = 0 ; } -#Mean downdraught mass flux -'Mean downdraught mass flux' = { +#Time-mean downdraught mass flux +'Time-mean downdraught mass flux' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 28 ; typeOfStatisticalProcessing = 0 ; } -#Mean updraught detrainment rate -'Mean updraught detrainment rate' = { +#Time-mean updraught detrainment rate +'Time-mean updraught detrainment rate' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 29 ; typeOfStatisticalProcessing = 0 ; } -#Mean downdraught detrainment rate -'Mean downdraught detrainment rate' = { +#Time-mean downdraught detrainment rate +'Time-mean downdraught detrainment rate' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 30 ; typeOfStatisticalProcessing = 0 ; } -#Mean total precipitation flux -'Mean total precipitation flux' = { +#Time-mean total precipitation flux +'Time-mean total precipitation flux' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; typeOfStatisticalProcessing = 0 ; } -#Mean turbulent diffusion coefficient for heat -'Mean turbulent diffusion coefficient for heat' = { +#Time-mean turbulent diffusion coefficient for heat +'Time-mean turbulent diffusion coefficient for heat' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 20 ; @@ -4597,339 +6806,347 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Mean surface runoff rate -'Mean surface runoff rate' = { +#Time-mean surface runoff rate +'Time-mean surface runoff rate' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 51 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean sub-surface runoff rate -'Mean sub-surface runoff rate' = { +#Time-mean sub-surface runoff rate +'Time-mean sub-surface runoff rate' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 52 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface photosynthetically active radiation flux, clear sky -'Mean surface photosynthetically active radiation flux, clear sky' = { +#Time-mean surface photosynthetically active radiation flux, clear sky +'Time-mean surface photosynthetically active radiation flux, clear sky' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 60 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean snow evaporation rate -'Mean snow evaporation rate' = { +#Time-mean snow evaporation rate water equivalent +'Time-mean snow evaporation rate water equivalent' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 148 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean snowmelt rate -'Mean snowmelt rate' = { +#Time-mean snow melt rate +'Time-mean snow melt rate' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 41 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean magnitude of turbulent surface stress -'Mean magnitude of turbulent surface stress' = { +#Time-mean magnitude of turbulent surface stress +'Time-mean magnitude of turbulent surface stress' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 58 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean large-scale precipitation fraction -'Mean large-scale precipitation fraction' = { +#Time-mean large-scale precipitation fraction +'Time-mean large-scale precipitation fraction' = { discipline = 0 ; parameterCategory = 6 ; parameterNumber = 36 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward UV radiation flux -'Mean surface downward UV radiation flux' = { +#Time-mean surface downward UV radiation flux +'Time-mean surface downward UV radiation flux' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 12 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface photosynthetically active radiation flux -'Mean surface photosynthetically active radiation flux' = { +#Time-mean surface photosynthetically active radiation flux +'Time-mean surface photosynthetically active radiation flux' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 10 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean large-scale precipitation rate -'Mean large-scale precipitation rate' = { +#Time-mean large-scale precipitation rate +'Time-mean large-scale precipitation rate' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 54 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean convective precipitation rate -'Mean convective precipitation rate' = { +#Time-mean convective precipitation rate +'Time-mean convective precipitation rate' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 37 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean snowfall rate -'Mean snowfall rate' = { +#Time-mean total snowfall rate water equivalent +'Time-mean total snowfall rate water equivalent' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 53 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean boundary layer dissipation -'Mean boundary layer dissipation' = { +#Time-mean boundary layer dissipation +'Time-mean boundary layer dissipation' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 20 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface sensible heat flux -'Mean surface sensible heat flux' = { +#Time-mean surface sensible heat flux +'Time-mean surface sensible heat flux' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 11 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface latent heat flux -'Mean surface latent heat flux' = { +#Time-mean surface latent heat flux +'Time-mean surface latent heat flux' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 10 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward short-wave radiation flux -'Mean surface downward short-wave radiation flux' = { +#Time-mean surface downward short-wave radiation flux +'Time-mean surface downward short-wave radiation flux' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 7 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward long-wave radiation flux -'Mean surface downward long-wave radiation flux' = { +#Time-mean surface downward long-wave radiation flux +'Time-mean surface downward long-wave radiation flux' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 3 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net short-wave radiation flux -'Mean surface net short-wave radiation flux' = { +#Time-mean surface net short-wave radiation flux +'Time-mean surface net short-wave radiation flux' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 9 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net long-wave radiation flux -'Mean surface net long-wave radiation flux' = { +#Time-mean surface net long-wave radiation flux +'Time-mean surface net long-wave radiation flux' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 5 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net short-wave radiation flux -'Mean top net short-wave radiation flux' = { +#Time-mean top net short-wave radiation flux +'Time-mean top net short-wave radiation flux' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 9 ; typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net long-wave radiation flux -'Mean top net long-wave radiation flux' = { +#Time-mean top net long-wave radiation flux +'Time-mean top net long-wave radiation flux' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 5 ; typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean eastward turbulent surface stress -'Mean eastward turbulent surface stress' = { +#Time-mean eastward turbulent surface stress +'Time-mean eastward turbulent surface stress' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 62 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean northward turbulent surface stress -'Mean northward turbulent surface stress' = { +#Time-mean northward turbulent surface stress +'Time-mean northward turbulent surface stress' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 63 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean evaporation rate -'Mean evaporation rate' = { +#Time-mean moisture flux +'Time-mean moisture flux' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 79 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Sunshine duration fraction -'Sunshine duration fraction' = { +#Time-mean sunshine duration fraction +'Time-mean sunshine duration fraction' = { discipline = 0 ; parameterCategory = 6 ; parameterNumber = 51 ; typeOfFirstFixedSurface = 1 ; } -#Mean eastward gravity wave surface stress -'Mean eastward gravity wave surface stress' = { +#Time-mean eastward gravity wave surface stress +'Time-mean eastward gravity wave surface stress' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 16 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean northward gravity wave surface stress -'Mean northward gravity wave surface stress' = { +#Time-mean northward gravity wave surface stress +'Time-mean northward gravity wave surface stress' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 17 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean gravity wave dissipation -'Mean gravity wave dissipation' = { +#Time-mean gravity wave dissipation +'Time-mean gravity wave dissipation' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 23 ; typeOfStatisticalProcessing = 0 ; } -#Mean runoff rate -'Mean runoff rate' = { +#Time-mean runoff rate water equivalent (surface plus subsurface) +'Time-mean runoff rate water equivalent (surface plus subsurface)' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 42 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net short-wave radiation flux, clear sky -'Mean top net short-wave radiation flux, clear sky' = { +#Time-mean top net short-wave radiation flux, clear sky +'Time-mean top net short-wave radiation flux, clear sky' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 11 ; typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net long-wave radiation flux, clear sky -'Mean top net long-wave radiation flux, clear sky' = { +#Time-mean top net long-wave radiation flux, clear sky +'Time-mean top net long-wave radiation flux, clear sky' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 6 ; typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net short-wave radiation flux, clear sky -'Mean surface net short-wave radiation flux, clear sky' = { +#Time-mean surface net short-wave radiation flux, clear sky +'Time-mean surface net short-wave radiation flux, clear sky' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 11 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net long-wave radiation flux, clear sky -'Mean surface net long-wave radiation flux, clear sky' = { +#Time-mean surface net long-wave radiation flux, clear sky +'Time-mean surface net long-wave radiation flux, clear sky' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 6 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean top downward short-wave radiation flux -'Mean top downward short-wave radiation flux' = { +#Time mean top downward short-wave radiation flux +'Time mean top downward short-wave radiation flux' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 7 ; typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean vertically integrated moisture divergence -'Mean vertically integrated moisture divergence' = { +#Time-mean total column vertically-integrated moisture divergence flux +'Time-mean total column vertically-integrated moisture divergence flux' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; typeOfStatisticalProcessing = 0 ; } -#Mean total precipitation rate -'Mean total precipitation rate' = { +#Time-mean total precipitation rate +'Time-mean total precipitation rate' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean convective snowfall rate -'Mean convective snowfall rate' = { +#Time-mean convective snowfall rate water equivalent +'Time-mean convective snowfall rate water equivalent' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 55 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean large-scale snowfall rate -'Mean large-scale snowfall rate' = { +#Time-mean large scale snowfall rate water equivalent +'Time-mean large scale snowfall rate water equivalent' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 56 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface direct short-wave radiation flux -'Mean surface direct short-wave radiation flux' = { +#Time-mean surface direct short-wave radiation flux +'Time-mean surface direct short-wave radiation flux' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 13 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface direct short-wave radiation flux, clear sky -'Mean surface direct short-wave radiation flux, clear sky' = { +#Time-mean surface direct short-wave radiation flux, clear sky +'Time-mean surface direct short-wave radiation flux, clear sky' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 61 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward short-wave radiation flux, clear sky -'Mean surface downward short-wave radiation flux, clear sky' = { +#Mean surface diffuse short-wave radiation flux +'Mean surface diffuse short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean surface downward short-wave radiation flux, clear sky +'Time-mean surface downward short-wave radiation flux, clear sky' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 52 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward long-wave radiation flux, clear sky -'Mean surface downward long-wave radiation flux, clear sky' = { +#Time-mean surface downward long-wave radiation flux, clear sky +'Time-mean surface downward long-wave radiation flux, clear sky' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 8 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean potential evaporation rate -'Mean potential evaporation rate' = { +#Time-mean potential evaporation rate +'Time-mean potential evaporation rate' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 143 ; @@ -4954,8 +7171,8 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Time-mean evapotranspiration flux -'Time-mean evapotranspiration flux' = { +#Time-mean evapotranspiration rate +'Time-mean evapotranspiration rate' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 39 ; @@ -5136,6 +7353,13 @@ parameterNumber = 0 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean charnock +'Time-mean charnock' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean potential vorticity 'Time-mean potential vorticity' = { discipline = 0 ; @@ -5164,6 +7388,59 @@ parameterNumber = 32 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean visibility +'Time-mean visibility' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wind direction +'Time-mean wind direction' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column snow water +'Time-mean total column snow water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'Time-mean low cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'Time-mean medium cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'Time-mean high cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column rain water +'Time-mean total column rain water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean soil moisture top 20 cm 'Time-mean soil moisture top 20 cm' = { discipline = 2 ; @@ -5411,6 +7688,14 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean sunshine +'Time-mean sunshine' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean ozone mass mixing ratio 'Time-mean ozone mass mixing ratio' = { discipline = 0 ; @@ -5476,6 +7761,16 @@ parameterNumber = 4 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean 10 metre wind direction +'Time-mean 10 metre wind direction' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean clear air turbulence (CAT) 'Time-mean clear air turbulence (CAT)' = { discipline = 0 ; @@ -5483,6 +7778,20 @@ parameterNumber = 29 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean forecast albedo +'Time-mean forecast albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean potential temperature +'Time-mean potential temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean discharge from rivers or streams 'Time-mean discharge from rivers or streams' = { discipline = 1 ; @@ -5566,6 +7875,1300 @@ parameterNumber = 23 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean UV visible albedo for direct radiation (climatological) +'Time-mean UV visible albedo for direct radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean UV visible albedo for diffuse radiation (climatological) +'Time-mean UV visible albedo for diffuse radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation (climatological) +'Time-mean near IR albedo for direct radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for diffuse radiation (climatological) +'Time-mean near IR albedo for diffuse radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean snow albedo +'Time-mean snow albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean montgomery potential +'Time-mean montgomery potential' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean convective available potential energy +'Time-mean convective available potential energy' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean skin reservoir content +'Time-mean skin reservoir content' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column integrated ozone +'Time-mean total column integrated ozone' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated kinetic energy +'Time-mean total column vertically-integrated kinetic energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated enthalpy +'Time-mean total column vertically-integrated enthalpy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated potential + internal energy +'Time-mean total column vertically-integrated potential + internal energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated potential+internal+latent energy +'Time-mean total column vertically-integrated potential+internal+latent energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated total energy +'Time-mean total column vertically-integrated total energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated water enthalpy +'Time-mean total column vertically-integrated water enthalpy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean UV visible albedo for direct radiation, isotropic component (climatological) +'Time-mean UV visible albedo for direct radiation, isotropic component (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean UV visible albedo for direct radiation, volumetric component (climatological) +'Time-mean UV visible albedo for direct radiation, volumetric component (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean UV visible albedo for direct radiation, geometric component (climatological) +'Time-mean UV visible albedo for direct radiation, geometric component (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation, isotropic component (climatological) +'Time-mean near IR albedo for direct radiation, isotropic component (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation, volumetric component (climatological) +'Time-mean near IR albedo for direct radiation, volumetric component (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation, geometric component (climatological) +'Time-mean near IR albedo for direct radiation, geometric component (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean convective inhibition +'Time-mean convective inhibition' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean friction velocity +'Time-mean friction velocity' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake bottom temperature +'Time-mean lake bottom temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake total layer temperature +'Time-mean lake total layer temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake shape factor +'Time-mean lake shape factor' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake ice surface temperature +'Time-mean lake ice surface temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake ice total depth +'Time-mean lake ice total depth' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean minimum vertical gradient of refractivity inside trapping layer +'Time-mean minimum vertical gradient of refractivity inside trapping layer' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean vertical gradient of refractivity inside trapping layer +'Time-mean mean vertical gradient of refractivity inside trapping layer' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean duct base height +'Time-mean duct base height' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean trapping layer base height +'Time-mean trapping layer base height' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean trapping layer top height +'Time-mean trapping layer top height' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean -10 degrees C isothermal level (atm) +'Time-mean -10 degrees C isothermal level (atm)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean cloud base height +'Time-mean cloud base height' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 0 degrees C isothermal level (atm) +'Time-mean 0 degrees C isothermal level (atm)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre wind gust +'Time-mean 10 metre wind gust' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean relative humidity with respect to water +'Time-mean relative humidity with respect to water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 2 metre relative humidity with respect to water +'Time-mean 2 metre relative humidity with respect to water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean convective available potential energy shear +'Time-mean convective available potential energy shear' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean tropopause pressure +'Time-mean tropopause pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean height of convective cloud top +'Time-mean height of convective cloud top' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean height of zero-degree wet-bulb temperature +'Time-mean height of zero-degree wet-bulb temperature' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean height of one-degree wet-bulb temperature +'Time-mean height of one-degree wet-bulb temperature' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column supercooled liquid water +'Time-mean total column supercooled liquid water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre U-component of neutral wind +'Time-mean 10 metre U-component of neutral wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre V-component of neutral wind +'Time-mean 10 metre V-component of neutral wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean convective rain rate +'Time-mean convective rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean large scale rain rate +'Time-mean large scale rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CAPE in the lowest 50 hPa +'Time-mean mixed-layer CAPE in the lowest 50 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CIN in the lowest 50 hPa +'Time-mean mixed-layer CIN in the lowest 50 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CAPE in the lowest 100 hPa +'Time-mean mixed-layer CAPE in the lowest 100 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CIN in the lowest 100 hPa +'Time-mean mixed-layer CIN in the lowest 100 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean departure level of the most unstable parcel expressed as Pressure +'Time-mean departure level of the most unstable parcel expressed as Pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean ceiling +'Time-mean ceiling' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column integrated saturation specific humidity with respect to water +'Time-mean total column integrated saturation specific humidity with respect to water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean surface direct normal short-wave radiation flux +'Time-mean surface direct normal short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean freezing rain precipitation rate +'Time-mean freezing rain precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward geopotential flux +'Time-mean total column vertically-integrated eastward geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward geopotential flux +'Time-mean total column vertically-integrated northward geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of water geopotential flux +'Time-mean total column vertically-integrated divergence of water geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of geopotential flux +'Time-mean total column vertically-integrated divergence of geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward enthalpy flux +'Time-mean total column vertically-integrated eastward enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward enthalpy flux +'Time-mean total column vertically-integrated northward enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward kinetic energy flux +'Time-mean total column vertically-integrated eastward kinetic energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward kinetic energy flux +'Time-mean total column vertically-integrated northward kinetic energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward total energy flux +'Time-mean total column vertically-integrated eastward total energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward total energy flux +'Time-mean total column vertically-integrated northward total energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of enthalpy flux +'Time-mean total column vertically-integrated divergence of enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of kinetic energy flux +'Time-mean total column vertically-integrated divergence of kinetic energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of total energy flux +'Time-mean total column vertically-integrated divergence of total energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of water enthalpy flux +'Time-mean total column vertically-integrated divergence of water enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of mass flux +'Time-mean total column vertically-integrated divergence of mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward mass flux +'Time-mean total column vertically-integrated eastward mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward mass flux +'Time-mean total column vertically-integrated northward mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of water vapour flux +'Time-mean total column vertically-integrated divergence of water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of cloud liquid water flux +'Time-mean total column vertically-integrated divergence of cloud liquid water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of cloud ice water flux +'Time-mean total column vertically-integrated divergence of cloud ice water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of rain flux +'Time-mean total column vertically-integrated divergence of rain flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of snow flux +'Time-mean total column vertically-integrated divergence of snow flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward water vapour flux +'Time-mean total column vertically-integrated eastward water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward water vapour flux +'Time-mean total column vertically-integrated northward water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward cloud liquid water flux +'Time-mean total column vertically-integrated eastward cloud liquid water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward cloud liquid water flux +'Time-mean total column vertically-integrated northward cloud liquid water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward cloud ice water flux +'Time-mean total column vertically-integrated eastward cloud ice water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward cloud ice water flux +'Time-mean total column vertically-integrated northward cloud ice water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward rain flux +'Time-mean total column vertically-integrated eastward rain flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward rain flux +'Time-mean total column vertically-integrated northward rain flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward snow flux +'Time-mean total column vertically-integrated eastward snow flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward snow flux +'Time-mean total column vertically-integrated northward snow flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward ozone flux +'Time-mean total column vertically-integrated eastward ozone flux' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward ozone flux +'Time-mean total column vertically-integrated northward ozone flux' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of ozone flux +'Time-mean total column vertically-integrated divergence of ozone flux' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated net source of ozone +'Time-mean total column vertically-integrated net source of ozone' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean eastward turbulent surface stress due to orographic form drag +'Time-mean eastward turbulent surface stress due to orographic form drag' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean northward turbulent surface stress due to orographic form drag +'Time-mean northward turbulent surface stress due to orographic form drag' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean eastward turbulent surface stress due to surface roughness +'Time-mean eastward turbulent surface stress due to surface roughness' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean northward turbulent surface stress due to surface roughness +'Time-mean northward turbulent surface stress due to surface roughness' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean visibility through precipitation +'Time-mean visibility through precipitation' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-maximum temperature tendency due to short-wave radiation +'Time-maximum temperature tendency due to short-wave radiation' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to long-wave radiation +'Time-maximum temperature tendency due to long-wave radiation' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to short wave radiation, clear sky +'Time-maximum temperature tendency due to short wave radiation, clear sky' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to long-wave radiation, clear sky +'Time-maximum temperature tendency due to long-wave radiation, clear sky' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to parametrisations +'Time-maximum temperature tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific humidity tendency due to parametrisations +'Time-maximum specific humidity tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward wind tendency due to parametrisations +'Time-maximum eastward wind tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward wind tendency due to parametrisations +'Time-maximum northward wind tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum updraught mass flux +'Time-maximum updraught mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum downdraught mass flux +'Time-maximum downdraught mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum updraught detrainment rate +'Time-maximum updraught detrainment rate' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum downdraught detrainment rate +'Time-maximum downdraught detrainment rate' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total precipitation flux +'Time-maximum total precipitation flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum turbulent diffusion coefficient for heat +'Time-maximum turbulent diffusion coefficient for heat' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface photosynthetically active radiation flux, clear sky +'Time-maximum surface photosynthetically active radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum snow evaporation rate water equivalent +'Time-maximum snow evaporation rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum snow melt rate +'Time-maximum snow melt rate' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum magnitude of turbulent surface stress +'Time-maximum magnitude of turbulent surface stress' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large-scale precipitation fraction +'Time-maximum large-scale precipitation fraction' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward UV radiation flux +'Time-maximum surface downward UV radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface photosynthetically active radiation flux +'Time-maximum surface photosynthetically active radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large-scale precipitation rate +'Time-maximum large-scale precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum convective precipitation rate +'Time-maximum convective precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total snowfall rate water equivalent +'Time-maximum total snowfall rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum boundary layer dissipation +'Time-maximum boundary layer dissipation' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface sensible heat flux +'Time-maximum surface sensible heat flux' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface latent heat flux +'Time-maximum surface latent heat flux' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward short-wave radiation flux +'Time-maximum surface downward short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward long-wave radiation flux +'Time-maximum surface downward long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net short-wave radiation flux +'Time-maximum surface net short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net long-wave radiation flux +'Time-maximum surface net long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net short-wave radiation flux +'Time-maximum top net short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net long-wave radiation flux +'Time-maximum top net long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward turbulent surface stress +'Time-maximum eastward turbulent surface stress' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 62 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward turbulent surface stress +'Time-maximum northward turbulent surface stress' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 63 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum moisture flux +'Time-maximum moisture flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward gravity wave surface stress +'Time-maximum eastward gravity wave surface stress' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward gravity wave surface stress +'Time-maximum northward gravity wave surface stress' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum gravity wave dissipation +'Time-maximum gravity wave dissipation' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum runoff rate water equivalent (surface plus subsurface) +'Time-maximum runoff rate water equivalent (surface plus subsurface)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net short-wave radiation flux, clear sky +'Time-maximum top net short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net long-wave radiation flux, clear sky +'Time-maximum top net long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net short-wave radiation flux, clear sky +'Time-maximum surface net short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net long-wave radiation flux, clear sky +'Time-maximum surface net long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time mean top downward short-wave radiation flux +'Time mean top downward short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated moisture divergence flux +'Time-maximum total column vertically-integrated moisture divergence flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum convective snowfall rate water equivalent +'Time-maximum convective snowfall rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large scale snowfall rate water equivalent +'Time-maximum large scale snowfall rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface direct short-wave radiation flux +'Time-maximum surface direct short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface direct short-wave radiation flux, clear sky +'Time-maximum surface direct short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum carbon dioxide net ecosystem exchange flux +'Time-maximum carbon dioxide net ecosystem exchange flux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum carbon dioxide gross primary production flux +'Time-maximum carbon dioxide gross primary production flux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum carbon dioxide ecosystem respiration flux +'Time-maximum carbon dioxide ecosystem respiration flux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward short-wave radiation flux, clear sky +'Time-maximum surface downward short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward long-wave radiation flux, clear sky +'Time-maximum surface downward long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum potential evaporation rate +'Time-maximum potential evaporation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum volumetric soil moisture 'Time-maximum volumetric soil moisture' = { discipline = 2 ; @@ -5573,6 +9176,91 @@ parameterNumber = 25 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum snow depth water equivalent +'Time-maximum snow depth water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum skin temperature +'Time-maximum skin temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum snow density +'Time-maximum snow density' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum sea ice area fraction +'Time-maximum sea ice area fraction' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum sea surface temperature +'Time-maximum sea surface temperature' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column cloud liquid water +'Time-maximum total column cloud liquid water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column cloud ice water +'Time-maximum total column cloud ice water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre specific humidity +'Time-maximum 2 metre specific humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake mix-layer temperature +'Time-maximum lake mix-layer temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake mix-layer depth +'Time-maximum lake mix-layer depth' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum 2 metre relative humidity 'Time-maximum 2 metre relative humidity' = { discipline = 0 ; @@ -5583,6 +9271,115 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum soil temperature +'Time-maximum soil temperature' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wind speed +'Time-maximum wind speed' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum pressure +'Time-maximum pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum charnock +'Time-maximum charnock' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum potential vorticity +'Time-maximum potential vorticity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific rain water content +'Time-maximum specific rain water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific snow water content +'Time-maximum specific snow water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eta-coordinate vertical velocity +'Time-maximum eta-coordinate vertical velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum visibility +'Time-maximum visibility' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wind direction +'Time-maximum wind direction' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column snow water +'Time-maximum total column snow water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum low cloud cover +'Time-maximum low cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum medium cloud cover +'Time-maximum medium cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum high cloud cover +'Time-maximum high cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column rain water +'Time-maximum total column rain water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum most-unstable CAPE 'Time-maximum most-unstable CAPE' = { discipline = 0 ; @@ -5602,6 +9399,1546 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum geopotential +'Time-maximum geopotential' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature +'Time-maximum temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum u component of wind +'Time-maximum u component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum v component of wind +'Time-maximum v component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific humidity +'Time-maximum specific humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface pressure +'Time-maximum surface pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum vertical velocity +'Time-maximum vertical velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column water +'Time-maximum total column water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated water vapour +'Time-maximum total column vertically-integrated water vapour' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum vorticity (relative) +'Time-maximum vorticity (relative)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean sea level pressure +'Time-maximum mean sea level pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum logarithm of surface pressure +'Time-maximum logarithm of surface pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum divergence +'Time-maximum divergence' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum relative humidity +'Time-maximum relative humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum boundary layer height +'Time-maximum boundary layer height' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre U wind component +'Time-maximum 10 metre U wind component' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre V wind component +'Time-maximum 10 metre V wind component' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre dewpoint temperature +'Time-maximum 2 metre dewpoint temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum sunshine +'Time-maximum sunshine' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum ozone mass mixing ratio +'Time-maximum ozone mass mixing ratio' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind speed +'Time-maximum 10 metre wind speed' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature of snow layer +'Time-maximum temperature of snow layer' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum forecast surface roughness +'Time-maximum forecast surface roughness' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum forecast logarithm of surface roughness for heat +'Time-maximum forecast logarithm of surface roughness for heat' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific cloud liquid water content +'Time-maximum specific cloud liquid water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific cloud ice water content +'Time-maximum specific cloud ice water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum fraction of cloud cover +'Time-maximum fraction of cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum k index +'Time-maximum k index' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total totals index +'Time-maximum total totals index' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind direction +'Time-maximum 10 metre wind direction' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum clear air turbulence (CAT) +'Time-maximum clear air turbulence (CAT)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum forecast albedo +'Time-maximum forecast albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum potential temperature +'Time-maximum potential temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum UV visible albedo for direct radiation (climatological) +'Time-maximum UV visible albedo for direct radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum UV visible albedo for diffuse radiation (climatological) +'Time-maximum UV visible albedo for diffuse radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation (climatological) +'Time-maximum near IR albedo for direct radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for diffuse radiation (climatological) +'Time-maximum near IR albedo for diffuse radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum snow albedo +'Time-maximum snow albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum montgomery potential +'Time-maximum montgomery potential' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total cloud cover +'Time-maximum total cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum skin reservoir content +'Time-maximum skin reservoir content' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column integrated ozone +'Time-maximum total column integrated ozone' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated kinetic energy +'Time-maximum total column vertically-integrated kinetic energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated enthalpy +'Time-maximum total column vertically-integrated enthalpy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated potential + internal energy +'Time-maximum total column vertically-integrated potential + internal energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated potential+internal+latent energy +'Time-maximum total column vertically-integrated potential+internal+latent energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated total energy +'Time-maximum total column vertically-integrated total energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated water enthalpy +'Time-maximum total column vertically-integrated water enthalpy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum UV visible albedo for direct radiation, isotropic component (climatological) +'Time-maximum UV visible albedo for direct radiation, isotropic component (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum UV visible albedo for direct radiation, volumetric component (climatological) +'Time-maximum UV visible albedo for direct radiation, volumetric component (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum UV visible albedo for direct radiation, geometric component (climatological) +'Time-maximum UV visible albedo for direct radiation, geometric component (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation, isotropic component (climatological) +'Time-maximum near IR albedo for direct radiation, isotropic component (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation, volumetric component (climatological) +'Time-maximum near IR albedo for direct radiation, volumetric component (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation, geometric component (climatological) +'Time-maximum near IR albedo for direct radiation, geometric component (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum convective inhibition +'Time-maximum convective inhibition' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum friction velocity +'Time-maximum friction velocity' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake bottom temperature +'Time-maximum lake bottom temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake total layer temperature +'Time-maximum lake total layer temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake shape factor +'Time-maximum lake shape factor' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake ice surface temperature +'Time-maximum lake ice surface temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake ice total depth +'Time-maximum lake ice total depth' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum minimum vertical gradient of refractivity inside trapping layer +'Time-maximum minimum vertical gradient of refractivity inside trapping layer' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean vertical gradient of refractivity inside trapping layer +'Time-maximum mean vertical gradient of refractivity inside trapping layer' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum duct base height +'Time-maximum duct base height' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum trapping layer base height +'Time-maximum trapping layer base height' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum trapping layer top height +'Time-maximum trapping layer top height' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum -10 degrees C isothermal level (atm) +'Time-maximum -10 degrees C isothermal level (atm)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum cloud base height +'Time-maximum cloud base height' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 0 degrees C isothermal level (atm) +'Time-maximum 0 degrees C isothermal level (atm)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum relative humidity with respect to water +'Time-maximum relative humidity with respect to water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre relative humidity with respect to water +'Time-maximum 2 metre relative humidity with respect to water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum tropopause pressure +'Time-maximum tropopause pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum height of convective cloud top +'Time-maximum height of convective cloud top' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum height of zero-degree wet-bulb temperature +'Time-maximum height of zero-degree wet-bulb temperature' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum height of one-degree wet-bulb temperature +'Time-maximum height of one-degree wet-bulb temperature' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total lightning flash density +'Time-maximum total lightning flash density' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column supercooled liquid water +'Time-maximum total column supercooled liquid water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre U-component of neutral wind +'Time-maximum 10 metre U-component of neutral wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre V-component of neutral wind +'Time-maximum 10 metre V-component of neutral wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum convective rain rate +'Time-maximum convective rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large scale rain rate +'Time-maximum large scale rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CAPE in the lowest 50 hPa +'Time-maximum mixed-layer CAPE in the lowest 50 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CIN in the lowest 50 hPa +'Time-maximum mixed-layer CIN in the lowest 50 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CAPE in the lowest 100 hPa +'Time-maximum mixed-layer CAPE in the lowest 100 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CIN in the lowest 100 hPa +'Time-maximum mixed-layer CIN in the lowest 100 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum departure level of the most unstable parcel expressed as Pressure +'Time-maximum departure level of the most unstable parcel expressed as Pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum ceiling +'Time-maximum ceiling' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column integrated saturation specific humidity with respect to water +'Time-maximum total column integrated saturation specific humidity with respect to water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface direct normal short-wave radiation flux +'Time-maximum surface direct normal short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum freezing rain precipitation rate +'Time-maximum freezing rain precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward geopotential flux +'Time-maximum total column vertically-integrated eastward geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward geopotential flux +'Time-maximum total column vertically-integrated northward geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of water geopotential flux +'Time-maximum total column vertically-integrated divergence of water geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of geopotential flux +'Time-maximum total column vertically-integrated divergence of geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward enthalpy flux +'Time-maximum total column vertically-integrated eastward enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward enthalpy flux +'Time-maximum total column vertically-integrated northward enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward kinetic energy flux +'Time-maximum total column vertically-integrated eastward kinetic energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward kinetic energy flux +'Time-maximum total column vertically-integrated northward kinetic energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward total energy flux +'Time-maximum total column vertically-integrated eastward total energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward total energy flux +'Time-maximum total column vertically-integrated northward total energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of enthalpy flux +'Time-maximum total column vertically-integrated divergence of enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of kinetic energy flux +'Time-maximum total column vertically-integrated divergence of kinetic energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of total energy flux +'Time-maximum total column vertically-integrated divergence of total energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of water enthalpy flux +'Time-maximum total column vertically-integrated divergence of water enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of mass flux +'Time-maximum total column vertically-integrated divergence of mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward mass flux +'Time-maximum total column vertically-integrated eastward mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward mass flux +'Time-maximum total column vertically-integrated northward mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of water vapour flux +'Time-maximum total column vertically-integrated divergence of water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of cloud liquid water flux +'Time-maximum total column vertically-integrated divergence of cloud liquid water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of cloud ice water flux +'Time-maximum total column vertically-integrated divergence of cloud ice water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of rain flux +'Time-maximum total column vertically-integrated divergence of rain flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of snow flux +'Time-maximum total column vertically-integrated divergence of snow flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward water vapour flux +'Time-maximum total column vertically-integrated eastward water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward water vapour flux +'Time-maximum total column vertically-integrated northward water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward cloud liquid water flux +'Time-maximum total column vertically-integrated eastward cloud liquid water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward cloud liquid water flux +'Time-maximum total column vertically-integrated northward cloud liquid water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward cloud ice water flux +'Time-maximum total column vertically-integrated eastward cloud ice water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward cloud ice water flux +'Time-maximum total column vertically-integrated northward cloud ice water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward rain flux +'Time-maximum total column vertically-integrated eastward rain flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward rain flux +'Time-maximum total column vertically-integrated northward rain flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward snow flux +'Time-maximum total column vertically-integrated eastward snow flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward snow flux +'Time-maximum total column vertically-integrated northward snow flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward ozone flux +'Time-maximum total column vertically-integrated eastward ozone flux' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward ozone flux +'Time-maximum total column vertically-integrated northward ozone flux' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of ozone flux +'Time-maximum total column vertically-integrated divergence of ozone flux' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated net source of ozone +'Time-maximum total column vertically-integrated net source of ozone' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward turbulent surface stress due to orographic form drag +'Time-maximum eastward turbulent surface stress due to orographic form drag' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward turbulent surface stress due to orographic form drag +'Time-maximum northward turbulent surface stress due to orographic form drag' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward turbulent surface stress due to surface roughness +'Time-maximum eastward turbulent surface stress due to surface roughness' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward turbulent surface stress due to surface roughness +'Time-maximum northward turbulent surface stress due to surface roughness' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum visibility through precipitation +'Time-maximum visibility through precipitation' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum temperature tendency due to short-wave radiation +'Time-minimum temperature tendency due to short-wave radiation' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to long-wave radiation +'Time-minimum temperature tendency due to long-wave radiation' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to short wave radiation, clear sky +'Time-minimum temperature tendency due to short wave radiation, clear sky' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to long-wave radiation, clear sky +'Time-minimum temperature tendency due to long-wave radiation, clear sky' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to parametrisations +'Time-minimum temperature tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific humidity tendency due to parametrisations +'Time-minimum specific humidity tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward wind tendency due to parametrisations +'Time-minimum eastward wind tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward wind tendency due to parametrisations +'Time-minimum northward wind tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum updraught mass flux +'Time-minimum updraught mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum downdraught mass flux +'Time-minimum downdraught mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum updraught detrainment rate +'Time-minimum updraught detrainment rate' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum downdraught detrainment rate +'Time-minimum downdraught detrainment rate' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total precipitation flux +'Time-minimum total precipitation flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum turbulent diffusion coefficient for heat +'Time-minimum turbulent diffusion coefficient for heat' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface photosynthetically active radiation flux, clear sky +'Time-minimum surface photosynthetically active radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snow evaporation rate +'Time-minimum snow evaporation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snowmelt rate +'Time-minimum snowmelt rate' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum magnitude of turbulent surface stress +'Time-minimum magnitude of turbulent surface stress' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large-scale precipitation fraction +'Time-minimum large-scale precipitation fraction' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward UV radiation flux +'Time-minimum surface downward UV radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface photosynthetically active radiation flux +'Time-minimum surface photosynthetically active radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large-scale precipitation rate +'Time-minimum large-scale precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective precipitation rate +'Time-minimum convective precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snowfall rate +'Time-minimum snowfall rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum boundary layer dissipation +'Time-minimum boundary layer dissipation' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface sensible heat flux +'Time-minimum surface sensible heat flux' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface latent heat flux +'Time-minimum surface latent heat flux' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward short-wave radiation flux +'Time-minimum surface downward short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward long-wave radiation flux +'Time-minimum surface downward long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net short-wave radiation flux +'Time-minimum surface net short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net long-wave radiation flux +'Time-minimum surface net long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net short-wave radiation flux +'Time-minimum top net short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net long-wave radiation flux +'Time-minimum top net long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward turbulent surface stress +'Time-minimum eastward turbulent surface stress' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 62 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward turbulent surface stress +'Time-minimum northward turbulent surface stress' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 63 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum evaporation rate +'Time-minimum evaporation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward gravity wave surface stress +'Time-minimum eastward gravity wave surface stress' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward gravity wave surface stress +'Time-minimum northward gravity wave surface stress' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum gravity wave dissipation +'Time-minimum gravity wave dissipation' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum runoff rate +'Time-minimum runoff rate' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net short-wave radiation flux, clear sky +'Time-minimum top net short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net long-wave radiation flux, clear sky +'Time-minimum top net long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net short-wave radiation flux, clear sky +'Time-minimum surface net short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net long-wave radiation flux, clear sky +'Time-minimum surface net long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top downward short-wave radiation flux +'Time-minimum top downward short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated moisture divergence +'Time-minimum vertically integrated moisture divergence' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective snowfall rate water equivalent +'Time-minimum convective snowfall rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large scale snowfall rate water equivalent +'Time-minimum large scale snowfall rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface direct short-wave radiation flux +'Time-minimum surface direct short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface direct short-wave radiation flux, clear sky +'Time-minimum surface direct short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum carbon dioxide net ecosystem exchange flux +'Time-minimum carbon dioxide net ecosystem exchange flux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum carbon dioxide gross primary production flux +'Time-minimum carbon dioxide gross primary production flux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum carbon dioxide ecosystem respiration flux +'Time-minimum carbon dioxide ecosystem respiration flux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward short-wave radiation flux, clear sky +'Time-minimum surface downward short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward long-wave radiation flux, clear sky +'Time-minimum surface downward long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum potential evaporation rate +'Time-minimum potential evaporation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum volumetric soil moisture 'Time-minimum volumetric soil moisture' = { discipline = 2 ; @@ -5609,6 +10946,91 @@ parameterNumber = 25 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum snow depth water equivalent +'Time-minimum snow depth water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum skin temperature +'Time-minimum skin temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snow density +'Time-minimum snow density' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum sea ice area fraction +'Time-minimum sea ice area fraction' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum sea surface temperature +'Time-minimum sea surface temperature' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column cloud liquid water +'Time-minimum total column cloud liquid water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column cloud ice water +'Time-minimum total column cloud ice water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre specific humidity +'Time-minimum 2 metre specific humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake mix-layer temperature +'Time-minimum lake mix-layer temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake mix-layer depth +'Time-minimum lake mix-layer depth' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum 2 metre relative humidity 'Time-minimum 2 metre relative humidity' = { discipline = 0 ; @@ -5619,6 +11041,62 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum soil temperature +'Time-minimum soil temperature' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wind speed +'Time-minimum wind speed' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum pressure +'Time-minimum pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum charnock +'Time-minimum charnock' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum potential vorticity +'Time-minimum potential vorticity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific rain water content +'Time-minimum specific rain water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific snow water content +'Time-minimum specific snow water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eta-coordinate vertical velocity +'Time-minimum eta-coordinate vertical velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum visibility 'Time-minimum visibility' = { discipline = 0 ; @@ -5626,6 +11104,52 @@ parameterNumber = 0 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum wind direction +'Time-minimum wind direction' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column snow water +'Time-minimum total column snow water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum low cloud cover +'Time-minimum low cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum medium cloud cover +'Time-minimum medium cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum high cloud cover +'Time-minimum high cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column rain water +'Time-minimum total column rain water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum most-unstable CAPE 'Time-minimum most-unstable CAPE' = { discipline = 0 ; @@ -5645,6 +11169,1582 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum geopotential +'Time-minimum geopotential' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature +'Time-minimum temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum u component of wind +'Time-minimum u component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum v component of wind +'Time-minimum v component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific humidity +'Time-minimum specific humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface pressure +'Time-minimum surface pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertical velocity +'Time-minimum vertical velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column water +'Time-minimum total column water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated water vapour +'Time-minimum total column vertically-integrated water vapour' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vorticity (relative) +'Time-minimum vorticity (relative)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean sea level pressure +'Time-minimum mean sea level pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum logarithm of surface pressure +'Time-minimum logarithm of surface pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum divergence +'Time-minimum divergence' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum relative humidity +'Time-minimum relative humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum boundary layer height +'Time-minimum boundary layer height' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre U wind component +'Time-minimum 10 metre U wind component' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre V wind component +'Time-minimum 10 metre V wind component' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre dewpoint temperature +'Time-minimum 2 metre dewpoint temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum sunshine +'Time-minimum sunshine' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum ozone mass mixing ratio +'Time-minimum ozone mass mixing ratio' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind speed +'Time-minimum 10 metre wind speed' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature of snow layer +'Time-minimum temperature of snow layer' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum forecast surface roughness +'Time-minimum forecast surface roughness' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum forecast logarithm of surface roughness for heat +'Time-minimum forecast logarithm of surface roughness for heat' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific cloud liquid water content +'Time-minimum specific cloud liquid water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific cloud ice water content +'Time-minimum specific cloud ice water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum fraction of cloud cover +'Time-minimum fraction of cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum k index +'Time-minimum k index' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total totals index +'Time-minimum total totals index' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind direction +'Time-minimum 10 metre wind direction' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum clear air turbulence (CAT) +'Time-minimum clear air turbulence (CAT)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum forecast albedo +'Time-minimum forecast albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum potential temperature +'Time-minimum potential temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum UV visible albedo for direct radiation (climatological) +'Time-minimum UV visible albedo for direct radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum UV visible albedo for diffuse radiation (climatological) +'Time-minimum UV visible albedo for diffuse radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation (climatological) +'Time-minimum near IR albedo for direct radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for diffuse radiation (climatological) +'Time-minimum near IR albedo for diffuse radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum snow albedo +'Time-minimum snow albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum montgomery potential +'Time-minimum montgomery potential' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective available potential energy +'Time-minimum convective available potential energy' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total cloud cover +'Time-minimum total cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum skin reservoir content +'Time-minimum skin reservoir content' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column integrated ozone +'Time-minimum total column integrated ozone' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated kinetic energy +'Time-minimum total column vertically-integrated kinetic energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated enthalpy +'Time-minimum total column vertically-integrated enthalpy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated potential + internal energy +'Time-minimum total column vertically-integrated potential + internal energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertical integral of potential+internal+latent energy +'Time-minimum vertical integral of potential+internal+latent energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated total energy +'Time-minimum total column vertically-integrated total energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated water enthalpy +'Time-minimum total column vertically-integrated water enthalpy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum UV visible albedo for direct radiation, isotropic component (climatological) +'Time-minimum UV visible albedo for direct radiation, isotropic component (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum UV visible albedo for direct radiation, volumetric component (climatological) +'Time-minimum UV visible albedo for direct radiation, volumetric component (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum UV visible albedo for direct radiation, geometric component (climatological) +'Time-minimum UV visible albedo for direct radiation, geometric component (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation, isotropic component (climatological) +'Time-minimum near IR albedo for direct radiation, isotropic component (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation, volumetric component (climatological) +'Time-minimum near IR albedo for direct radiation, volumetric component (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation, geometric component (climatological) +'Time-minimum near IR albedo for direct radiation, geometric component (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum convective inhibition +'Time-minimum convective inhibition' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum friction velocity +'Time-minimum friction velocity' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake bottom temperature +'Time-minimum lake bottom temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake total layer temperature +'Time-minimum lake total layer temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake shape factor +'Time-minimum lake shape factor' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake ice surface temperature +'Time-minimum lake ice surface temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake ice total depth +'Time-minimum lake ice total depth' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum minimum vertical gradient of refractivity inside trapping layer +'Time-minimum minimum vertical gradient of refractivity inside trapping layer' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean vertical gradient of refractivity inside trapping layer +'Time-minimum mean vertical gradient of refractivity inside trapping layer' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum duct base height +'Time-minimum duct base height' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum trapping layer base height +'Time-minimum trapping layer base height' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum trapping layer top height +'Time-minimum trapping layer top height' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum -10 degrees C isothermal level (atm) +'Time-minimum -10 degrees C isothermal level (atm)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum cloud base height +'Time-minimum cloud base height' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 0 degrees C isothermal level (atm) +'Time-minimum 0 degrees C isothermal level (atm)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind gust +'Time-minimum 10 metre wind gust' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum relative humidity with respect to water +'Time-minimum relative humidity with respect to water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre relative humidity with respect to water +'Time-minimum 2 metre relative humidity with respect to water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective available potential energy shear +'Time-minimum convective available potential energy shear' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum tropopause pressure +'Time-minimum tropopause pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum height of convective cloud top +'Time-minimum height of convective cloud top' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum height of zero-degree wet-bulb temperature +'Time-minimum height of zero-degree wet-bulb temperature' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum height of one-degree wet-bulb temperature +'Time-minimum height of one-degree wet-bulb temperature' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total lightning flash density +'Time-minimum total lightning flash density' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column supercooled liquid water +'Time-minimum total column supercooled liquid water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre U-component of neutral wind +'Time-minimum 10 metre U-component of neutral wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre V-component of neutral wind +'Time-minimum 10 metre V-component of neutral wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective rain rate +'Time-minimum convective rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large scale rain rate +'Time-minimum large scale rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CAPE in the lowest 50 hPa +'Time-minimum mixed-layer CAPE in the lowest 50 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CIN in the lowest 50 hPa +'Time-minimum mixed-layer CIN in the lowest 50 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CAPE in the lowest 100 hPa +'Time-minimum mixed-layer CAPE in the lowest 100 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CIN in the lowest 100 hPa +'Time-minimum mixed-layer CIN in the lowest 100 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum departure level of the most unstable parcel expressed as Pressure +'Time-minimum departure level of the most unstable parcel expressed as Pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum ceiling +'Time-minimum ceiling' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column integrated saturation specific humidity with respect to water +'Time-minimum total column integrated saturation specific humidity with respect to water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum direct solar radiation flux +'Time-minimum direct solar radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum freezing rain rate water equivalent +'Time-minimum freezing rain rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward geopotential flux +'Time-minimum total column vertically-integrated eastward geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward geopotential flux +'Time-minimum total column vertically-integrated northward geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of water geopotential flux +'Time-minimum total column vertically-integrated divergence of water geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of geopotential flux +'Time-minimum total column vertically-integrated divergence of geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward enthalpy flux +'Time-minimum total column vertically-integrated eastward enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward enthalpy flux +'Time-minimum total column vertically-integrated northward enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward kinetic energy flux +'Time-minimum total column vertically-integrated eastward kinetic energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward kinetic energy flux +'Time-minimum total column vertically-integrated northward kinetic energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward total energy flux +'Time-minimum total column vertically-integrated eastward total energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward total energy flux +'Time-minimum total column vertically-integrated northward total energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of enthalpy flux +'Time-minimum total column vertically-integrated divergence of enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of kinetic energy flux +'Time-minimum total column vertically-integrated divergence of kinetic energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of total energy flux +'Time-minimum total column vertically-integrated divergence of total energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of water enthalpy flux +'Time-minimum total column vertically-integrated divergence of water enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of mass flux +'Time-minimum vertically integrated divergence of mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward mass flux +'Time-minimum vertically integrated eastward mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward mass flux +'Time-minimum vertically integrated northward mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of water vapour flux +'Time-minimum vertically integrated divergence of water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of cloud liquid water flux +'Time-minimum vertically integrated divergence of cloud liquid water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of cloud ice water flux +'Time-minimum vertically integrated divergence of cloud ice water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of rain flux +'Time-minimum vertically integrated divergence of rain flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of snow flux +'Time-minimum vertically integrated divergence of snow flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward water vapour flux +'Time-minimum vertically integrated eastward water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward water vapour flux +'Time-minimum vertically integrated northward water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward cloud liquid water flux +'Time-minimum vertically integrated eastward cloud liquid water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward cloud liquid water flux +'Time-minimum vertically integrated northward cloud liquid water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward cloud ice water flux +'Time-minimum vertically integrated eastward cloud ice water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward cloud ice water flux +'Time-minimum vertically integrated northward cloud ice water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward rain flux +'Time-minimum vertically integrated eastward rain flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward rain flux +'Time-minimum vertically integrated northward rain flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward snow flux +'Time-minimum vertically integrated eastward snow flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward snow flux +'Time-minimum vertically integrated northward snow flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward ozone flux +'Time-minimum vertically integrated eastward ozone flux' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward ozone flux +'Time-minimum vertically integrated northward ozone flux' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of ozone flux +'Time-minimum vertically integrated divergence of ozone flux' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated net source of ozone +'Time-minimum vertically integrated net source of ozone' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward turbulent surface stress due to orographic form drag +'Time-minimum eastward turbulent surface stress due to orographic form drag' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward turbulent surface stress due to orographic form drag +'Time-minimum northward turbulent surface stress due to orographic form drag' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward turbulent surface stress due to surface roughness +'Time-minimum eastward turbulent surface stress due to surface roughness' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward turbulent surface stress due to surface roughness +'Time-minimum northward turbulent surface stress due to surface roughness' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum visibility through precipitation +'Time-minimum visibility through precipitation' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation temperature tendency due to short-wave radiation +'Time-standard-deviation temperature tendency due to short-wave radiation' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to long-wave radiation +'Time-standard-deviation temperature tendency due to long-wave radiation' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to short wave radiation, clear sky +'Time-standard-deviation temperature tendency due to short wave radiation, clear sky' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to long-wave radiation, clear sky +'Time-standard-deviation temperature tendency due to long-wave radiation, clear sky' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to parametrisations +'Time-standard-deviation temperature tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific humidity tendency due to parametrisations +'Time-standard-deviation specific humidity tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward wind tendency due to parametrisations +'Time-standard-deviation eastward wind tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward wind tendency due to parametrisations +'Time-standard-deviation northward wind tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation updraught mass flux +'Time-standard-deviation updraught mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation downdraught mass flux +'Time-standard-deviation downdraught mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation updraught detrainment rate +'Time-standard-deviation updraught detrainment rate' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation downdraught detrainment rate +'Time-standard-deviation downdraught detrainment rate' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total precipitation flux +'Time-standard-deviation total precipitation flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation turbulent diffusion coefficient for heat +'Time-standard-deviation turbulent diffusion coefficient for heat' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface photosynthetically active radiation flux, clear sky +'Time-standard-deviation surface photosynthetically active radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snow evaporation rate +'Time-standard-deviation snow evaporation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snowmelt rate +'Time-standard-deviation snowmelt rate' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation magnitude of turbulent surface stress +'Time-standard-deviation magnitude of turbulent surface stress' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large-scale precipitation fraction +'Time-standard-deviation large-scale precipitation fraction' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward UV radiation flux +'Time-standard-deviation surface downward UV radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface photosynthetically active radiation flux +'Time-standard-deviation surface photosynthetically active radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large-scale precipitation rate +'Time-standard-deviation large-scale precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective precipitation rate +'Time-standard-deviation convective precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snowfall rate +'Time-standard-deviation snowfall rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation boundary layer dissipation +'Time-standard-deviation boundary layer dissipation' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface sensible heat flux +'Time-standard-deviation surface sensible heat flux' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface latent heat flux +'Time-standard-deviation surface latent heat flux' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward short-wave radiation flux +'Time-standard-deviation surface downward short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward long-wave radiation flux +'Time-standard-deviation surface downward long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net short-wave radiation flux +'Time-standard-deviation surface net short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net long-wave radiation flux +'Time-standard-deviation surface net long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net short-wave radiation flux +'Time-standard-deviation top net short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net long-wave radiation flux +'Time-standard-deviation top net long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward turbulent surface stress +'Time-standard-deviation eastward turbulent surface stress' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 62 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward turbulent surface stress +'Time-standard-deviation northward turbulent surface stress' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 63 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation evaporation rate +'Time-standard-deviation evaporation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward gravity wave surface stress +'Time-standard-deviation eastward gravity wave surface stress' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward gravity wave surface stress +'Time-standard-deviation northward gravity wave surface stress' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation gravity wave dissipation +'Time-standard-deviation gravity wave dissipation' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation runoff rate +'Time-standard-deviation runoff rate' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net short-wave radiation flux, clear sky +'Time-standard-deviation top net short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net long-wave radiation flux, clear sky +'Time-standard-deviation top net long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net short-wave radiation flux, clear sky +'Time-standard-deviation surface net short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net long-wave radiation flux, clear sky +'Time-standard-deviation surface net long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top downward short-wave radiation flux +'Time-standard-deviation top downward short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated moisture divergence +'Time-standard-deviation vertically integrated moisture divergence' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total precipitation rate +'Time-standard-deviation total precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective snowfall rate water equivalent +'Time-standard-deviation convective snowfall rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large scale snowfall rate water equivalent +'Time-standard-deviation large scale snowfall rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface direct short-wave radiation flux +'Time-standard-deviation surface direct short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface direct short-wave radiation flux, clear sky +'Time-standard-deviation surface direct short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation carbon dioxide net ecosystem exchange flux +'Time-standard-deviation carbon dioxide net ecosystem exchange flux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation carbon dioxide gross primary production flux +'Time-standard-deviation carbon dioxide gross primary production flux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation carbon dioxide ecosystem respiration flux +'Time-standard-deviation carbon dioxide ecosystem respiration flux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward short-wave radiation flux, clear sky +'Time-standard-deviation surface downward short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward long-wave radiation flux, clear sky +'Time-standard-deviation surface downward long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation potential evaporation rate +'Time-standard-deviation potential evaporation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } #Time-standard-deviation volumetric soil moisture 'Time-standard-deviation volumetric soil moisture' = { discipline = 2 ; @@ -5652,6 +12752,200 @@ parameterNumber = 25 ; typeOfStatisticalProcessing = 6 ; } +#Time-standard-deviation snow depth water equivalent +'Time-standard-deviation snow depth water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation skin temperature +'Time-standard-deviation skin temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snow density +'Time-standard-deviation snow density' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation sea ice area fraction +'Time-standard-deviation sea ice area fraction' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation sea surface temperature +'Time-standard-deviation sea surface temperature' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column cloud liquid water +'Time-standard-deviation total column cloud liquid water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column cloud ice water +'Time-standard-deviation total column cloud ice water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre specific humidity +'Time-standard-deviation 2 metre specific humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake mix-layer temperature +'Time-standard-deviation lake mix-layer temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake mix-layer depth +'Time-standard-deviation lake mix-layer depth' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation soil temperature +'Time-standard-deviation soil temperature' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wind speed +'Time-standard-deviation wind speed' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation pressure +'Time-standard-deviation pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation charnock +'Time-standard-deviation charnock' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation potential vorticity +'Time-standard-deviation potential vorticity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific rain water content +'Time-standard-deviation specific rain water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific snow water content +'Time-standard-deviation specific snow water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eta-coordinate vertical velocity +'Time-standard-deviation eta-coordinate vertical velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation visibility +'Time-standard-deviation visibility' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wind direction +'Time-standard-deviation wind direction' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column snow water +'Time-standard-deviation total column snow water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation low cloud cover +'Time-standard-deviation low cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation medium cloud cover +'Time-standard-deviation medium cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation high cloud cover +'Time-standard-deviation high cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column rain water +'Time-standard-deviation total column rain water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } #Time-standard-deviation most-unstable CAPE 'Time-standard-deviation most-unstable CAPE' = { discipline = 0 ; @@ -5671,6 +12965,1145 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 6 ; } +#Time-standard-deviation geopotential +'Time-standard-deviation geopotential' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature +'Time-standard-deviation temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation u component of wind +'Time-standard-deviation u component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation v component of wind +'Time-standard-deviation v component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific humidity +'Time-standard-deviation specific humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface pressure +'Time-standard-deviation surface pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertical velocity +'Time-standard-deviation vertical velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column water +'Time-standard-deviation total column water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated water vapour +'Time-standard-deviation total column vertically-integrated water vapour' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vorticity (relative) +'Time-standard-deviation vorticity (relative)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean sea level pressure +'Time-standard-deviation mean sea level pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation logarithm of surface pressure +'Time-standard-deviation logarithm of surface pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation divergence +'Time-standard-deviation divergence' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation relative humidity +'Time-standard-deviation relative humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation boundary layer height +'Time-standard-deviation boundary layer height' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre U wind component +'Time-standard-deviation 10 metre U wind component' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre V wind component +'Time-standard-deviation 10 metre V wind component' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre temperature +'Time-standard-deviation 2 metre temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre dewpoint temperature +'Time-standard-deviation 2 metre dewpoint temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation sunshine +'Time-standard-deviation sunshine' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation ozone mass mixing ratio +'Time-standard-deviation ozone mass mixing ratio' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind speed +'Time-standard-deviation 10 metre wind speed' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature of snow layer +'Time-standard-deviation temperature of snow layer' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation forecast surface roughness +'Time-standard-deviation forecast surface roughness' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation forecast logarithm of surface roughness for heat +'Time-standard-deviation forecast logarithm of surface roughness for heat' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific cloud liquid water content +'Time-standard-deviation specific cloud liquid water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific cloud ice water content +'Time-standard-deviation specific cloud ice water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation fraction of cloud cover +'Time-standard-deviation fraction of cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation k index +'Time-standard-deviation k index' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total totals index +'Time-standard-deviation total totals index' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind direction +'Time-standard-deviation 10 metre wind direction' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation clear air turbulence (CAT) +'Time-standard-deviation clear air turbulence (CAT)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation forecast albedo +'Time-standard-deviation forecast albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation potential temperature +'Time-standard-deviation potential temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation UV visible albedo for direct radiation (climatological) +'Time-standard-deviation UV visible albedo for direct radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation UV visible albedo for diffuse radiation (climatological) +'Time-standard-deviation UV visible albedo for diffuse radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation (climatological) +'Time-standard-deviation near IR albedo for direct radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for diffuse radiation (climatological) +'Time-standard-deviation near IR albedo for diffuse radiation (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation snow albedo +'Time-standard-deviation snow albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation montgomery potential +'Time-standard-deviation montgomery potential' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective available potential energy +'Time-standard-deviation convective available potential energy' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total cloud cover +'Time-standard-deviation total cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation skin reservoir content +'Time-standard-deviation skin reservoir content' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column integrated ozone +'Time-standard-deviation total column integrated ozone' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated kinetic energy +'Time-standard-deviation total column vertically-integrated kinetic energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated enthalpy +'Time-standard-deviation total column vertically-integrated enthalpy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated potential + internal energy +'Time-standard-deviation total column vertically-integrated potential + internal energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertical integral of potential+internal+latent energy +'Time-standard-deviation vertical integral of potential+internal+latent energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated total energy +'Time-standard-deviation total column vertically-integrated total energy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated water enthalpy +'Time-standard-deviation total column vertically-integrated water enthalpy' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation UV visible albedo for direct radiation, isotropic component (climatological) +'Time-standard-deviation UV visible albedo for direct radiation, isotropic component (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation UV visible albedo for direct radiation, volumetric component (climatological) +'Time-standard-deviation UV visible albedo for direct radiation, volumetric component (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation UV visible albedo for direct radiation, geometric component (climatological) +'Time-standard-deviation UV visible albedo for direct radiation, geometric component (climatological)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation, isotropic component (climatological) +'Time-standard-deviation near IR albedo for direct radiation, isotropic component (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation, volumetric component (climatological) +'Time-standard-deviation near IR albedo for direct radiation, volumetric component (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation, geometric component (climatological) +'Time-standard-deviation near IR albedo for direct radiation, geometric component (climatological)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation convective inhibition +'Time-standard-deviation convective inhibition' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation friction velocity +'Time-standard-deviation friction velocity' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake bottom temperature +'Time-standard-deviation lake bottom temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake total layer temperature +'Time-standard-deviation lake total layer temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake shape factor +'Time-standard-deviation lake shape factor' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake ice surface temperature +'Time-standard-deviation lake ice surface temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake ice total depth +'Time-standard-deviation lake ice total depth' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation minimum vertical gradient of refractivity inside trapping layer +'Time-standard-deviation minimum vertical gradient of refractivity inside trapping layer' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean vertical gradient of refractivity inside trapping layer +'Time-standard-deviation mean vertical gradient of refractivity inside trapping layer' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation duct base height +'Time-standard-deviation duct base height' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation trapping layer base height +'Time-standard-deviation trapping layer base height' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation trapping layer top height +'Time-standard-deviation trapping layer top height' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation -10 degrees C isothermal level (atm) +'Time-standard-deviation -10 degrees C isothermal level (atm)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation cloud base height +'Time-standard-deviation cloud base height' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 0 degrees C isothermal level (atm) +'Time-standard-deviation 0 degrees C isothermal level (atm)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind gust +'Time-standard-deviation 10 metre wind gust' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation relative humidity with respect to water +'Time-standard-deviation relative humidity with respect to water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre relative humidity with respect to water +'Time-standard-deviation 2 metre relative humidity with respect to water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective available potential energy shear +'Time-standard-deviation convective available potential energy shear' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation tropopause pressure +'Time-standard-deviation tropopause pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation height of convective cloud top +'Time-standard-deviation height of convective cloud top' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation height of zero-degree wet-bulb temperature +'Time-standard-deviation height of zero-degree wet-bulb temperature' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation height of one-degree wet-bulb temperature +'Time-standard-deviation height of one-degree wet-bulb temperature' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total lightning flash density +'Time-standard-deviation total lightning flash density' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column supercooled liquid water +'Time-standard-deviation total column supercooled liquid water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre U-component of neutral wind +'Time-standard-deviation 10 metre U-component of neutral wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre V-component of neutral wind +'Time-standard-deviation 10 metre V-component of neutral wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective rain rate +'Time-standard-deviation convective rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large scale rain rate +'Time-standard-deviation large scale rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CAPE in the lowest 50 hPa +'Time-standard-deviation mixed-layer CAPE in the lowest 50 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CIN in the lowest 50 hPa +'Time-standard-deviation mixed-layer CIN in the lowest 50 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CAPE in the lowest 100 hPa +'Time-standard-deviation mixed-layer CAPE in the lowest 100 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CIN in the lowest 100 hPa +'Time-standard-deviation mixed-layer CIN in the lowest 100 hPa' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation departure level of the most unstable parcel expressed as Pressure +'Time-standard-deviation departure level of the most unstable parcel expressed as Pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation ceiling +'Time-standard-deviation ceiling' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column integrated saturation specific humidity with respect to water +'Time-standard-deviation total column integrated saturation specific humidity with respect to water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation direct solar radiation flux +'Time-standard-deviation direct solar radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation freezing rain rate water equivalent +'Time-standard-deviation freezing rain rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward geopotential flux +'Time-standard-deviation total column vertically-integrated eastward geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward geopotential flux +'Time-standard-deviation total column vertically-integrated northward geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of water geopotential flux +'Time-standard-deviation total column vertically-integrated divergence of water geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of geopotential flux +'Time-standard-deviation total column vertically-integrated divergence of geopotential flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward enthalpy flux +'Time-standard-deviation total column vertically-integrated eastward enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward enthalpy flux +'Time-standard-deviation total column vertically-integrated northward enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward kinetic energy flux +'Time-standard-deviation total column vertically-integrated eastward kinetic energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward kinetic energy flux +'Time-standard-deviation total column vertically-integrated northward kinetic energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward total energy flux +'Time-standard-deviation total column vertically-integrated eastward total energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward total energy flux +'Time-standard-deviation total column vertically-integrated northward total energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of enthalpy flux +'Time-standard-deviation total column vertically-integrated divergence of enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of kinetic energy flux +'Time-standard-deviation total column vertically-integrated divergence of kinetic energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of total energy flux +'Time-standard-deviation total column vertically-integrated divergence of total energy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of water enthalpy flux +'Time-standard-deviation total column vertically-integrated divergence of water enthalpy flux' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of mass flux +'Time-standard-deviation vertically integrated divergence of mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward mass flux +'Time-standard-deviation vertically integrated eastward mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward mass flux +'Time-standard-deviation vertically integrated northward mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of water vapour flux +'Time-standard-deviation vertically integrated divergence of water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of cloud liquid water flux +'Time-standard-deviation vertically integrated divergence of cloud liquid water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of cloud ice water flux +'Time-standard-deviation vertically integrated divergence of cloud ice water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of rain flux +'Time-standard-deviation vertically integrated divergence of rain flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of snow flux +'Time-standard-deviation vertically integrated divergence of snow flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward water vapour flux +'Time-standard-deviation vertically integrated eastward water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward water vapour flux +'Time-standard-deviation vertically integrated northward water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward cloud liquid water flux +'Time-standard-deviation vertically integrated eastward cloud liquid water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward cloud liquid water flux +'Time-standard-deviation vertically integrated northward cloud liquid water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward cloud ice water flux +'Time-standard-deviation vertically integrated eastward cloud ice water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward cloud ice water flux +'Time-standard-deviation vertically integrated northward cloud ice water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward rain flux +'Time-standard-deviation vertically integrated eastward rain flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward rain flux +'Time-standard-deviation vertically integrated northward rain flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward snow flux +'Time-standard-deviation vertically integrated eastward snow flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward snow flux +'Time-standard-deviation vertically integrated northward snow flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward ozone flux +'Time-standard-deviation vertically integrated eastward ozone flux' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward ozone flux +'Time-standard-deviation vertically integrated northward ozone flux' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of ozone flux +'Time-standard-deviation vertically integrated divergence of ozone flux' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated net source of ozone +'Time-standard-deviation vertically integrated net source of ozone' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward turbulent surface stress due to orographic form drag +'Time-standard-deviation eastward turbulent surface stress due to orographic form drag' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward turbulent surface stress due to orographic form drag +'Time-standard-deviation northward turbulent surface stress due to orographic form drag' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward turbulent surface stress due to surface roughness +'Time-standard-deviation eastward turbulent surface stress due to surface roughness' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward turbulent surface stress due to surface roughness +'Time-standard-deviation northward turbulent surface stress due to surface roughness' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } #Cross sectional area of flow in channel 'Cross sectional area of flow in channel' = { discipline = 1 ; @@ -10318,6 +18751,27 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 1 ; } +#Time-maximum sea ice temperature +'Time-maximum sea ice temperature' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum sea ice temperature +'Time-minimum sea ice temperature' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation sea ice temperature +'Time-standard-deviation sea ice temperature' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 6 ; + } #Virtual temperature 'Virtual temperature' = { discipline = 0 ; @@ -11634,8 +20088,8 @@ parameterCategory = 0 ; parameterNumber = 17 ; } -#Mean 2 metre temperature -'Mean 2 metre temperature' = { +#Time-mean 2 metre temperature +'Time-mean 2 metre temperature' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; @@ -11644,8 +20098,8 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } -#Mean of 10 metre wind speed -'Mean of 10 metre wind speed' = { +#Time-mean 10 metre wind speed +'Time-mean 10 metre wind speed' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 1 ; diff --git a/definitions/grib2/name.legacy.def b/definitions/grib2/name.legacy.def index 21a90fb5d..3a0b639dc 100644 --- a/definitions/grib2/name.legacy.def +++ b/definitions/grib2/name.legacy.def @@ -1,188 +1,249 @@ -#Volumetric soil moisture content -'Volumetric soil moisture content' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 9 ; - } -#Upper layer soil temperature -'Upper layer soil temperature' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 1 ; - } -#Upper layer soil moisture -'Upper layer soil moisture' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 2 ; - } -#Lower layer soil moisture -'Lower layer soil moisture' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 3 ; - } -#Bottom layer soil temperature -'Bottom layer soil temperature' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 4 ; - } -#Liquid volumetric soil moisture (non-frozen) -'Liquid volumetric soil moisture (non-frozen)' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 5 ; - } -#Transpiration stress-onset (soil moisture) -'Transpiration stress-onset (soil moisture)' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 7 ; - } -#Direct evaporation cease (soil moisture) -'Direct evaporation cease (soil moisture)' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 8 ; - } -#Soil porosity -'Soil porosity' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 9 ; - } +# Automatically generated by ./create_def.pl, do not edit #Instantaneous eastward turbulent surface stress 'Instantaneous eastward turbulent surface stress' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 38 ; - typeOfFirstFixedSurface = 1 ; -} + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + } #Instantaneous northward turbulent surface stress 'Instantaneous northward turbulent surface stress' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 37 ; - typeOfFirstFixedSurface = 1 ; -} + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + } +#Minimum dew point depression +'Minimum dew point depression' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + } +#Maximum relative humidity +'Maximum relative humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 27 ; + } +#Maximum absolute humidity +'Maximum absolute humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 28 ; + } +#Maximum wind speed +'Maximum wind speed' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 21 ; + } +#Net long wave radiation flux (surface) +'Net long wave radiation flux (surface)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 0 ; + } +#Net long wave radiation flux (top of atmosphere) +'Net long wave radiation flux (top of atmosphere)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 1 ; + } +#Maximum snow albedo +'Maximum snow albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 17 ; + } +#Volumetric soil moisture content +'Volumetric soil moisture content' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Upper layer soil temperature +'Upper layer soil temperature' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + } +#Upper layer soil moisture +'Upper layer soil moisture' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + } +#Lower layer soil moisture +'Lower layer soil moisture' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 3 ; + } +#Bottom layer soil temperature +'Bottom layer soil temperature' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Liquid volumetric soil moisture (non-frozen) +'Liquid volumetric soil moisture (non-frozen)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + } +#Transpiration stress-onset (soil moisture) +'Transpiration stress-onset (soil moisture)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 7 ; + } +#Direct evaporation cease (soil moisture) +'Direct evaporation cease (soil moisture)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 8 ; + } +#Soil porosity +'Soil porosity' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 9 ; + } #Evaporation in the last 6 hours 'Evaporation in the last 6 hours' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 79 ; - typeOfFirstFixedSurface = 1 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 6 ; -} + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 6 ; + } #Time-mean evapotranspiration rate in the last 24h 'Time-mean evapotranspiration rate in the last 24h' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 39 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 39 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-integrated potential evapotranspiration rate in the last 24h 'Time-integrated potential evapotranspiration rate in the last 24h' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 40 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 24 ; + } #Time-mean potential evapotranspiration rate in the last 24h 'Time-mean potential evapotranspiration rate in the last 24h' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 40 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-mean volumetric soil moisture 'Time-mean volumetric soil moisture' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 25 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-integrated water runoff and drainage rate in the last 24h 'Time-integrated water runoff and drainage rate in the last 24h' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 42 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 24 ; + } #Time-mean water runoff and drainage rate in the last 24h 'Time-mean water runoff and drainage rate in the last 24h' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 42 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-mean snow depth water equivalent 'Time-mean snow depth water equivalent' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 60 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-mean skin temperature 'Time-mean skin temperature' = { - discipline = 0 ; - parameterCategory = 0 ; - parameterNumber = 17 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-integrated snow melt rate in the last 24h 'Time-integrated snow melt rate in the last 24h' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 41 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 24 ; + } #Upward sea water velocity 'Upward sea water velocity' = { - discipline = 10 ; - parameterCategory = 4 ; - parameterNumber = 27 ; - typeOfFirstFixedSurface = 168 ; - typeOfSecondFixedSurface = 168 ; -} + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 168 ; + typeOfSecondFixedSurface = 168 ; + } #Time-mean upward sea water velocity 'Time-mean upward sea water velocity' = { - discipline = 10 ; - parameterCategory = 4 ; - parameterNumber = 27 ; - typeOfFirstFixedSurface = 168 ; - typeOfSecondFixedSurface = 168 ; - typeOfStatisticalProcessing = 0 ; -} -#Maximum individual wave height -'Maximum individual wave height' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 24 ; -} + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 168 ; + typeOfSecondFixedSurface = 168 ; + typeOfStatisticalProcessing = 0 ; + } +#Maximum temperature +'Maximum temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Minimum temperature +'Minimum temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Envelop-maximum individual wave height +'Envelop-maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + } +#Soil moisture +'Soil moisture' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } #Soil temperature 'Soil temperature' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 2 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 2 ; } diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index bf4f0fd51..6e431f71e 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -1305,6 +1305,372 @@ parameterCategory = 0 ; parameterNumber = 84 ; } +#Time-mean wave induced mean sea level correction +'141098' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean ratio of wave angular and frequency width +'141099' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean number of events in freak waves statistics +'141100' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U-component of atmospheric surface momentum flux +'141101' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V-component of atmospheric surface momentum flux +'141102' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U-component of surface momentum flux into ocean +'141103' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V-component of surface momentum flux into ocean +'141104' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave turbulent energy flux into ocean +'141105' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave directional width of first swell partition +'141106' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave frequency width of first swell partition +'141107' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave directional width of second swell partition +'141108' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave frequency width of second swell partition +'141109' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave directional width of third swell partition +'141110' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave frequency width of third swell partition +'141111' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave energy flux magnitude +'141112' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave energy flux mean direction +'141113' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'141114' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'141115' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'141116' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'141117' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'141118' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'141119' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-mean significant wave height of all waves with period larger than 10s +'141120' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-mean significant wave height of first swell partition +'141121' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave direction of first swell partition +'141122' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period of first swell partition +'141123' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant wave height of second swell partition +'141124' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave direction of second swell partition +'141125' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period of second swell partition +'141126' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant wave height of third swell partition +'141127' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave direction of third swell partition +'141128' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period of third swell partition +'141129' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean time domain maximum individual crest height +'141131' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean time domain maximum individual wave height +'141132' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean space time maximum individual crest height +'141133' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean space time maximum individual wave height +'141134' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave Spectral Skewness +'141207' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean free convective velocity over the oceans +'141208' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean air density over the oceans +'141209' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean normalized energy flux into waves +'141211' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean normalized energy flux into ocean +'141212' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean normalized stress into ocean +'141214' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U-component surface stokes drift +'141215' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V-component surface stokes drift +'141216' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean period corresponding to maximum individual wave height +'141217' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean envelop-maximum individual wave height +'141218' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on first moment +'141220' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean mean zero-crossing wave period '141221' = { discipline = 10 ; @@ -1312,6 +1678,55 @@ parameterNumber = 28 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean wave spectral directional width +'141222' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on first moment for wind waves +'141223' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on second moment for wind waves +'141224' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral directional width for wind waves +'141225' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on first moment for swell +'141226' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on second moment for swell +'141227' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral directional width for swell +'141228' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean significant height of combined wind waves and swell '141229' = { discipline = 10 ; @@ -1319,6 +1734,13 @@ parameterNumber = 3 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean mean wave direction +'141230' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean peak wave period '141231' = { discipline = 10 ; @@ -1333,6 +1755,1772 @@ parameterNumber = 15 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean coefficient of drag with waves +'141233' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant height of wind waves +'141234' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean direction of wind waves +'141235' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean period of wind waves +'141236' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant height of total swell +'141237' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean direction of total swell +'141238' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean period of total swell +'141239' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean square slope of waves +'141244' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre wind speed +'141245' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre wind direction +'141249' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 2D wave spectra (single) +'141251' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral kurtosis +'141252' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean benjamin-Feir index +'141253' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral peakedness +'141254' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-maximum wave induced mean sea level correction +'143098' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum ratio of wave angular and frequency width +'143099' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum number of events in freak waves statistics +'143100' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum U-component of atmospheric surface momentum flux +'143101' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum V-component of atmospheric surface momentum flux +'143102' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum U-component of surface momentum flux into ocean +'143103' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum V-component of surface momentum flux into ocean +'143104' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave turbulent energy flux into ocean +'143105' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave directional width of first swell partition +'143106' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave frequency width of first swell partition +'143107' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave directional width of second swell partition +'143108' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave frequency width of second swell partition +'143109' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave directional width of third swell partition +'143110' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave frequency width of third swell partition +'143111' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave energy flux magnitude +'143112' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave energy flux mean direction +'143113' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'143114' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'143115' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'143116' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'143117' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'143118' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'143119' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-maximum significant wave height of all waves with period larger than 10s +'143120' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-maximum significant wave height of first swell partition +'143121' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction of first swell partition +'143122' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period of first swell partition +'143123' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant wave height of second swell partition +'143124' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction of second swell partition +'143125' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period of second swell partition +'143126' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant wave height of third swell partition +'143127' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction of third swell partition +'143128' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period of third swell partition +'143129' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum time domain maximum individual crest height +'143131' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum time domain maximum individual wave height +'143132' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum space time maximum individual crest height +'143133' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum space time maximum individual wave height +'143134' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave Spectral Skewness +'143207' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum free convective velocity over the oceans +'143208' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum air density over the oceans +'143209' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum normalized energy flux into waves +'143211' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum normalized energy flux into ocean +'143212' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum normalized stress into ocean +'143214' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum U-component surface stokes drift +'143215' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum V-component surface stokes drift +'143216' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum period corresponding to maximum individual wave height +'143217' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum envelop-maximum individual wave height +'143218' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on first moment +'143220' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean zero-crossing wave period +'143221' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral directional width +'143222' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on first moment for wind waves +'143223' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on second moment for wind waves +'143224' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral directional width for wind waves +'143225' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on first moment for swell +'143226' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on second moment for swell +'143227' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral directional width for swell +'143228' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant height of combined wind waves and swell +'143229' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction +'143230' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum peak wave period +'143231' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period +'143232' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum coefficient of drag with waves +'143233' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant height of wind waves +'143234' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean direction of wind waves +'143235' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean period of wind waves +'143236' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant height of total swell +'143237' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean direction of total swell +'143238' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean period of total swell +'143239' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean square slope of waves +'143244' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind speed +'143245' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind direction +'143249' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2D wave spectra (single) +'143251' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral kurtosis +'143252' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum benjamin-Feir index +'143253' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral peakedness +'143254' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum wave induced mean sea level correction +'144098' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum ratio of wave angular and frequency width +'144099' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum number of events in freak waves statistics +'144100' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum U-component of atmospheric surface momentum flux +'144101' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum V-component of atmospheric surface momentum flux +'144102' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum U-component of surface momentum flux into ocean +'144103' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum V-component of surface momentum flux into ocean +'144104' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave turbulent energy flux into ocean +'144105' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave directional width of first swell partition +'144106' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave frequency width of first swell partition +'144107' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave directional width of second swell partition +'144108' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave frequency width of second swell partition +'144109' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave directional width of third swell partition +'144110' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave frequency width of third swell partition +'144111' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave energy flux magnitude +'144112' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave energy flux mean direction +'144113' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'144114' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'144115' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'144116' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'144117' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'144118' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'144119' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-minimum significant wave height of all waves with period larger than 10s +'144120' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-minimum significant wave height of first swell partition +'144121' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction of first swell partition +'144122' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period of first swell partition +'144123' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant wave height of second swell partition +'144124' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction of second swell partition +'144125' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period of second swell partition +'144126' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant wave height of third swell partition +'144127' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction of third swell partition +'144128' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period of third swell partition +'144129' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum time domain maximum individual crest height +'144131' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum time domain maximum individual wave height +'144132' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum space time maximum individual crest height +'144133' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum space time maximum individual wave height +'144134' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave Spectral Skewness +'144207' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum free convective velocity over the oceans +'144208' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum air density over the oceans +'144209' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum normalized energy flux into waves +'144211' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum normalized energy flux into ocean +'144212' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum normalized stress into ocean +'144214' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum U-component surface stokes drift +'144215' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum V-component surface stokes drift +'144216' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum period corresponding to maximum individual wave height +'144217' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum envelop-maximum individual wave height +'144218' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on first moment +'144220' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean zero-crossing wave period +'144221' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral directional width +'144222' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on first moment for wind waves +'144223' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on second moment for wind waves +'144224' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral directional width for wind waves +'144225' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on first moment for swell +'144226' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on second moment for swell +'144227' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral directional width for swell +'144228' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant height of combined wind waves and swell +'144229' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction +'144230' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum peak wave period +'144231' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period +'144232' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum coefficient of drag with waves +'144233' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant height of wind waves +'144234' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean direction of wind waves +'144235' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean period of wind waves +'144236' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant height of total swell +'144237' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean direction of total swell +'144238' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean period of total swell +'144239' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean square slope of waves +'144244' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind speed +'144245' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind direction +'144249' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2D wave spectra (single) +'144251' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral kurtosis +'144252' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum benjamin-Feir index +'144253' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral peakedness +'144254' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation wave induced mean sea level correction +'145098' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation ratio of wave angular and frequency width +'145099' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation number of events in freak waves statistics +'145100' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation U-component of atmospheric surface momentum flux +'145101' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation V-component of atmospheric surface momentum flux +'145102' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation U-component of surface momentum flux into ocean +'145103' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation V-component of surface momentum flux into ocean +'145104' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave turbulent energy flux into ocean +'145105' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave directional width of first swell partition +'145106' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave frequency width of first swell partition +'145107' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave directional width of second swell partition +'145108' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave frequency width of second swell partition +'145109' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave directional width of third swell partition +'145110' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave frequency width of third swell partition +'145111' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave energy flux magnitude +'145112' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave energy flux mean direction +'145113' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'145114' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'145115' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'145116' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'145117' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'145118' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'145119' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-standard-deviation significant wave height of all waves with period larger than 10s +'145120' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-standard-deviation significant wave height of first swell partition +'145121' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction of first swell partition +'145122' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period of first swell partition +'145123' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant wave height of second swell partition +'145124' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction of second swell partition +'145125' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period of second swell partition +'145126' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant wave height of third swell partition +'145127' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction of third swell partition +'145128' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period of third swell partition +'145129' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation time domain maximum individual crest height +'145131' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation time domain maximum individual wave height +'145132' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation space time maximum individual crest height +'145133' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation space time maximum individual wave height +'145134' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave Spectral Skewness +'145207' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation free convective velocity over the oceans +'145208' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation air density over the oceans +'145209' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation normalized energy flux into waves +'145211' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation normalized energy flux into ocean +'145212' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation normalized stress into ocean +'145214' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation U-component surface stokes drift +'145215' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation V-component surface stokes drift +'145216' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation period corresponding to maximum individual wave height +'145217' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation envelop-maximum individual wave height +'145218' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on first moment +'145220' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean zero-crossing wave period +'145221' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral directional width +'145222' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on first moment for wind waves +'145223' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on second moment for wind waves +'145224' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral directional width for wind waves +'145225' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on first moment for swell +'145226' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on second moment for swell +'145227' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral directional width for swell +'145228' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant height of combined wind waves and swell +'145229' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction +'145230' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation peak wave period +'145231' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period +'145232' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation coefficient of drag with waves +'145233' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant height of wind waves +'145234' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean direction of wind waves +'145235' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean period of wind waves +'145236' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant height of total swell +'145237' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean direction of total swell +'145238' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean period of total swell +'145239' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean square slope of waves +'145244' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind speed +'145245' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind direction +'145249' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2D wave spectra (single) +'145251' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral kurtosis +'145252' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation benjamin-Feir index +'145253' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral peakedness +'145254' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 6 ; + } #Mean sea water temperature in the upper 300 m '151127' = { discipline = 10 ; @@ -4079,6 +6267,27 @@ parameterNumber = 148 ; typeOfFirstFixedSurface = 1 ; } +#Radar reflectivity +'231066' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 4 ; + } +#Pressure at cloud ceiling +'231067' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 19 ; + scaledValueOfFirstFixedSurface = 50 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Visibility through precipitation +'231068' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + } #Burned area '232000' = { discipline = 2 ; @@ -4463,98 +6672,98 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 1 ; } -#Mean temperature tendency due to short-wave radiation +#Time-mean temperature tendency due to short-wave radiation '235001' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 22 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to long-wave radiation +#Time-mean temperature tendency due to long-wave radiation '235002' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 23 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to short-wave radiation, clear sky +#Time-mean temperature tendency due to short wave radiation, clear sky '235003' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 24 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to long-wave radiation, clear sky +#Time-mean temperature tendency due to long-wave radiation, clear sky '235004' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 25 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to parametrisations +#Time-mean temperature tendency due to parametrisations '235005' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 26 ; typeOfStatisticalProcessing = 0 ; } -#Mean specific humidity tendency due to parametrisations +#Time-mean specific humidity tendency due to parametrisations '235006' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 108 ; typeOfStatisticalProcessing = 0 ; } -#Mean eastward wind tendency due to parametrisations +#Time-mean eastward wind tendency due to parametrisations '235007' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 39 ; typeOfStatisticalProcessing = 0 ; } -#Mean northward wind tendency due to parametrisations +#Time-mean northward wind tendency due to parametrisations '235008' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 40 ; typeOfStatisticalProcessing = 0 ; } -#Mean updraught mass flux +#Time-mean updraught mass flux '235009' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 27 ; typeOfStatisticalProcessing = 0 ; } -#Mean downdraught mass flux +#Time-mean downdraught mass flux '235010' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 28 ; typeOfStatisticalProcessing = 0 ; } -#Mean updraught detrainment rate +#Time-mean updraught detrainment rate '235011' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 29 ; typeOfStatisticalProcessing = 0 ; } -#Mean downdraught detrainment rate +#Time-mean downdraught detrainment rate '235012' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 30 ; typeOfStatisticalProcessing = 0 ; } -#Mean total precipitation flux +#Time-mean total precipitation flux '235013' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; typeOfStatisticalProcessing = 0 ; } -#Mean turbulent diffusion coefficient for heat +#Time-mean turbulent diffusion coefficient for heat '235014' = { discipline = 0 ; parameterCategory = 0 ; @@ -4597,7 +6806,7 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Mean surface runoff rate +#Time-mean surface runoff rate '235020' = { discipline = 2 ; parameterCategory = 0 ; @@ -4605,7 +6814,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean sub-surface runoff rate +#Time-mean sub-surface runoff rate '235021' = { discipline = 2 ; parameterCategory = 0 ; @@ -4613,7 +6822,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface photosynthetically active radiation flux, clear sky +#Time-mean surface photosynthetically active radiation flux, clear sky '235022' = { discipline = 0 ; parameterCategory = 4 ; @@ -4621,7 +6830,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean snow evaporation rate +#Time-mean snow evaporation rate water equivalent '235023' = { discipline = 0 ; parameterCategory = 1 ; @@ -4629,7 +6838,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean snowmelt rate +#Time-mean snow melt rate '235024' = { discipline = 2 ; parameterCategory = 0 ; @@ -4637,7 +6846,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean magnitude of turbulent surface stress +#Time-mean magnitude of turbulent surface stress '235025' = { discipline = 0 ; parameterCategory = 2 ; @@ -4645,7 +6854,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean large-scale precipitation fraction +#Time-mean large-scale precipitation fraction '235026' = { discipline = 0 ; parameterCategory = 6 ; @@ -4653,7 +6862,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward UV radiation flux +#Time-mean surface downward UV radiation flux '235027' = { discipline = 0 ; parameterCategory = 4 ; @@ -4661,7 +6870,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface photosynthetically active radiation flux +#Time-mean surface photosynthetically active radiation flux '235028' = { discipline = 0 ; parameterCategory = 4 ; @@ -4669,7 +6878,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean large-scale precipitation rate +#Time-mean large-scale precipitation rate '235029' = { discipline = 0 ; parameterCategory = 1 ; @@ -4677,7 +6886,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean convective precipitation rate +#Time-mean convective precipitation rate '235030' = { discipline = 0 ; parameterCategory = 1 ; @@ -4685,7 +6894,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean snowfall rate +#Time-mean total snowfall rate water equivalent '235031' = { discipline = 0 ; parameterCategory = 1 ; @@ -4693,14 +6902,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean boundary layer dissipation +#Time-mean boundary layer dissipation '235032' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 20 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface sensible heat flux +#Time-mean surface sensible heat flux '235033' = { discipline = 0 ; parameterCategory = 0 ; @@ -4708,7 +6917,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface latent heat flux +#Time-mean surface latent heat flux '235034' = { discipline = 0 ; parameterCategory = 0 ; @@ -4716,7 +6925,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward short-wave radiation flux +#Time-mean surface downward short-wave radiation flux '235035' = { discipline = 0 ; parameterCategory = 4 ; @@ -4724,7 +6933,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward long-wave radiation flux +#Time-mean surface downward long-wave radiation flux '235036' = { discipline = 0 ; parameterCategory = 5 ; @@ -4732,7 +6941,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net short-wave radiation flux +#Time-mean surface net short-wave radiation flux '235037' = { discipline = 0 ; parameterCategory = 4 ; @@ -4740,7 +6949,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net long-wave radiation flux +#Time-mean surface net long-wave radiation flux '235038' = { discipline = 0 ; parameterCategory = 5 ; @@ -4748,7 +6957,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net short-wave radiation flux +#Time-mean top net short-wave radiation flux '235039' = { discipline = 0 ; parameterCategory = 4 ; @@ -4756,7 +6965,7 @@ typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net long-wave radiation flux +#Time-mean top net long-wave radiation flux '235040' = { discipline = 0 ; parameterCategory = 5 ; @@ -4764,7 +6973,7 @@ typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean eastward turbulent surface stress +#Time-mean eastward turbulent surface stress '235041' = { discipline = 0 ; parameterCategory = 2 ; @@ -4772,7 +6981,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean northward turbulent surface stress +#Time-mean northward turbulent surface stress '235042' = { discipline = 0 ; parameterCategory = 2 ; @@ -4780,7 +6989,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean evaporation rate +#Time-mean moisture flux '235043' = { discipline = 0 ; parameterCategory = 1 ; @@ -4788,14 +6997,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Sunshine duration fraction +#Time-mean sunshine duration fraction '235044' = { discipline = 0 ; parameterCategory = 6 ; parameterNumber = 51 ; typeOfFirstFixedSurface = 1 ; } -#Mean eastward gravity wave surface stress +#Time-mean eastward gravity wave surface stress '235045' = { discipline = 0 ; parameterCategory = 3 ; @@ -4803,7 +7012,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean northward gravity wave surface stress +#Time-mean northward gravity wave surface stress '235046' = { discipline = 0 ; parameterCategory = 3 ; @@ -4811,21 +7020,21 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean gravity wave dissipation +#Time-mean gravity wave dissipation '235047' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 23 ; typeOfStatisticalProcessing = 0 ; } -#Mean runoff rate +#Time-mean runoff rate water equivalent (surface plus subsurface) '235048' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 42 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net short-wave radiation flux, clear sky +#Time-mean top net short-wave radiation flux, clear sky '235049' = { discipline = 0 ; parameterCategory = 4 ; @@ -4833,7 +7042,7 @@ typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net long-wave radiation flux, clear sky +#Time-mean top net long-wave radiation flux, clear sky '235050' = { discipline = 0 ; parameterCategory = 5 ; @@ -4841,7 +7050,7 @@ typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net short-wave radiation flux, clear sky +#Time-mean surface net short-wave radiation flux, clear sky '235051' = { discipline = 0 ; parameterCategory = 4 ; @@ -4849,7 +7058,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net long-wave radiation flux, clear sky +#Time-mean surface net long-wave radiation flux, clear sky '235052' = { discipline = 0 ; parameterCategory = 5 ; @@ -4857,7 +7066,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean top downward short-wave radiation flux +#Time mean top downward short-wave radiation flux '235053' = { discipline = 0 ; parameterCategory = 4 ; @@ -4865,14 +7074,14 @@ typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean vertically integrated moisture divergence +#Time-mean total column vertically-integrated moisture divergence flux '235054' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; typeOfStatisticalProcessing = 0 ; } -#Mean total precipitation rate +#Time-mean total precipitation rate '235055' = { discipline = 0 ; parameterCategory = 1 ; @@ -4880,7 +7089,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean convective snowfall rate +#Time-mean convective snowfall rate water equivalent '235056' = { discipline = 0 ; parameterCategory = 1 ; @@ -4888,7 +7097,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean large-scale snowfall rate +#Time-mean large scale snowfall rate water equivalent '235057' = { discipline = 0 ; parameterCategory = 1 ; @@ -4896,7 +7105,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface direct short-wave radiation flux +#Time-mean surface direct short-wave radiation flux '235058' = { discipline = 0 ; parameterCategory = 4 ; @@ -4904,7 +7113,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface direct short-wave radiation flux, clear sky +#Time-mean surface direct short-wave radiation flux, clear sky '235059' = { discipline = 0 ; parameterCategory = 4 ; @@ -4912,7 +7121,15 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward short-wave radiation flux, clear sky +#Mean surface diffuse short-wave radiation flux +'235060' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean surface downward short-wave radiation flux, clear sky '235068' = { discipline = 0 ; parameterCategory = 4 ; @@ -4920,7 +7137,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward long-wave radiation flux, clear sky +#Time-mean surface downward long-wave radiation flux, clear sky '235069' = { discipline = 0 ; parameterCategory = 5 ; @@ -4928,7 +7145,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean potential evaporation rate +#Time-mean potential evaporation rate '235070' = { discipline = 0 ; parameterCategory = 1 ; @@ -4954,7 +7171,7 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Time-mean evapotranspiration flux +#Time-mean evapotranspiration rate '235074' = { discipline = 2 ; parameterCategory = 0 ; @@ -5136,6 +7353,13 @@ parameterNumber = 0 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean charnock +'235099' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean potential vorticity '235100' = { discipline = 0 ; @@ -5164,6 +7388,59 @@ parameterNumber = 32 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean visibility +'235105' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wind direction +'235106' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column snow water +'235107' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'235108' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'235109' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'235110' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column rain water +'235111' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean soil moisture top 20 cm '235113' = { discipline = 2 ; @@ -5411,6 +7688,14 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean sunshine +'235189' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean ozone mass mixing ratio '235203' = { discipline = 0 ; @@ -5476,6 +7761,16 @@ parameterNumber = 4 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean 10 metre wind direction +'235261' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean clear air turbulence (CAT) '235262' = { discipline = 0 ; @@ -5483,6 +7778,20 @@ parameterNumber = 29 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean forecast albedo +'235263' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean potential temperature +'235269' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean discharge from rivers or streams '235270' = { discipline = 1 ; @@ -5566,6 +7875,1300 @@ parameterNumber = 23 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean UV visible albedo for direct radiation (climatological) +'235281' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean UV visible albedo for diffuse radiation (climatological) +'235282' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation (climatological) +'235283' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for diffuse radiation (climatological) +'235284' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean snow albedo +'235285' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean montgomery potential +'235286' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean convective available potential energy +'235287' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean skin reservoir content +'235289' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column integrated ozone +'235290' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated kinetic energy +'235291' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated enthalpy +'235292' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated potential + internal energy +'235293' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated potential+internal+latent energy +'235294' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated total energy +'235295' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated water enthalpy +'235296' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean UV visible albedo for direct radiation, isotropic component (climatological) +'235297' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean UV visible albedo for direct radiation, volumetric component (climatological) +'235298' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean UV visible albedo for direct radiation, geometric component (climatological) +'235299' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation, isotropic component (climatological) +'235300' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation, volumetric component (climatological) +'235301' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation, geometric component (climatological) +'235302' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean convective inhibition +'235303' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean friction velocity +'235304' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake bottom temperature +'235305' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake total layer temperature +'235306' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake shape factor +'235307' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake ice surface temperature +'235308' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake ice total depth +'235309' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean minimum vertical gradient of refractivity inside trapping layer +'235310' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean vertical gradient of refractivity inside trapping layer +'235311' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean duct base height +'235312' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean trapping layer base height +'235313' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean trapping layer top height +'235314' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean -10 degrees C isothermal level (atm) +'235315' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean cloud base height +'235316' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 0 degrees C isothermal level (atm) +'235317' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre wind gust +'235318' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean relative humidity with respect to water +'235319' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 2 metre relative humidity with respect to water +'235320' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean convective available potential energy shear +'235321' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean tropopause pressure +'235322' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean height of convective cloud top +'235323' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean height of zero-degree wet-bulb temperature +'235324' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean height of one-degree wet-bulb temperature +'235325' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column supercooled liquid water +'235327' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre U-component of neutral wind +'235328' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre V-component of neutral wind +'235329' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean convective rain rate +'235330' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean large scale rain rate +'235331' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CAPE in the lowest 50 hPa +'235332' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CIN in the lowest 50 hPa +'235333' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CAPE in the lowest 100 hPa +'235334' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CIN in the lowest 100 hPa +'235335' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean departure level of the most unstable parcel expressed as Pressure +'235336' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean ceiling +'235337' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column integrated saturation specific humidity with respect to water +'235338' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean surface direct normal short-wave radiation flux +'235339' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean freezing rain precipitation rate +'235341' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward geopotential flux +'235342' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward geopotential flux +'235343' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of water geopotential flux +'235344' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of geopotential flux +'235345' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward enthalpy flux +'235346' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward enthalpy flux +'235347' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward kinetic energy flux +'235348' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward kinetic energy flux +'235349' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward total energy flux +'235350' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward total energy flux +'235351' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of enthalpy flux +'235352' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of kinetic energy flux +'235353' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of total energy flux +'235354' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of water enthalpy flux +'235355' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of mass flux +'235356' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward mass flux +'235357' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward mass flux +'235358' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of water vapour flux +'235359' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of cloud liquid water flux +'235360' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of cloud ice water flux +'235361' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of rain flux +'235362' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of snow flux +'235363' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward water vapour flux +'235364' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward water vapour flux +'235365' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward cloud liquid water flux +'235366' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward cloud liquid water flux +'235367' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward cloud ice water flux +'235368' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward cloud ice water flux +'235369' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward rain flux +'235370' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward rain flux +'235371' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward snow flux +'235372' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward snow flux +'235373' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward ozone flux +'235374' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward ozone flux +'235375' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of ozone flux +'235376' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated net source of ozone +'235377' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean eastward turbulent surface stress due to orographic form drag +'235378' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean northward turbulent surface stress due to orographic form drag +'235379' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean eastward turbulent surface stress due to surface roughness +'235380' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean northward turbulent surface stress due to surface roughness +'235381' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean visibility through precipitation +'235382' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-maximum temperature tendency due to short-wave radiation +'237001' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to long-wave radiation +'237002' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to short wave radiation, clear sky +'237003' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to long-wave radiation, clear sky +'237004' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to parametrisations +'237005' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific humidity tendency due to parametrisations +'237006' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward wind tendency due to parametrisations +'237007' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward wind tendency due to parametrisations +'237008' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum updraught mass flux +'237009' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum downdraught mass flux +'237010' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum updraught detrainment rate +'237011' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum downdraught detrainment rate +'237012' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total precipitation flux +'237013' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum turbulent diffusion coefficient for heat +'237014' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface photosynthetically active radiation flux, clear sky +'237022' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum snow evaporation rate water equivalent +'237023' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum snow melt rate +'237024' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum magnitude of turbulent surface stress +'237025' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large-scale precipitation fraction +'237026' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward UV radiation flux +'237027' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface photosynthetically active radiation flux +'237028' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large-scale precipitation rate +'237029' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum convective precipitation rate +'237030' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total snowfall rate water equivalent +'237031' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum boundary layer dissipation +'237032' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface sensible heat flux +'237033' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface latent heat flux +'237034' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward short-wave radiation flux +'237035' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward long-wave radiation flux +'237036' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net short-wave radiation flux +'237037' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net long-wave radiation flux +'237038' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net short-wave radiation flux +'237039' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net long-wave radiation flux +'237040' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward turbulent surface stress +'237041' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 62 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward turbulent surface stress +'237042' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 63 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum moisture flux +'237043' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward gravity wave surface stress +'237045' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward gravity wave surface stress +'237046' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum gravity wave dissipation +'237047' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum runoff rate water equivalent (surface plus subsurface) +'237048' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net short-wave radiation flux, clear sky +'237049' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net long-wave radiation flux, clear sky +'237050' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net short-wave radiation flux, clear sky +'237051' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net long-wave radiation flux, clear sky +'237052' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time mean top downward short-wave radiation flux +'237053' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated moisture divergence flux +'237054' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum convective snowfall rate water equivalent +'237056' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large scale snowfall rate water equivalent +'237057' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface direct short-wave radiation flux +'237058' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface direct short-wave radiation flux, clear sky +'237059' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum carbon dioxide net ecosystem exchange flux +'237062' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum carbon dioxide gross primary production flux +'237063' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum carbon dioxide ecosystem respiration flux +'237064' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward short-wave radiation flux, clear sky +'237068' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward long-wave radiation flux, clear sky +'237069' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum potential evaporation rate +'237070' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum volumetric soil moisture '237077' = { discipline = 2 ; @@ -5573,6 +9176,91 @@ parameterNumber = 25 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum snow depth water equivalent +'237078' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum skin temperature +'237079' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum snow density +'237080' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum sea ice area fraction +'237083' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum sea surface temperature +'237084' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column cloud liquid water +'237087' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column cloud ice water +'237088' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre specific humidity +'237089' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake mix-layer temperature +'237090' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake mix-layer depth +'237091' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum 2 metre relative humidity '237092' = { discipline = 0 ; @@ -5583,6 +9271,115 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum soil temperature +'237094' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wind speed +'237097' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum pressure +'237098' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum charnock +'237099' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum potential vorticity +'237100' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific rain water content +'237101' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific snow water content +'237102' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eta-coordinate vertical velocity +'237103' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum visibility +'237105' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wind direction +'237106' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column snow water +'237107' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum low cloud cover +'237108' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum medium cloud cover +'237109' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum high cloud cover +'237110' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column rain water +'237111' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum most-unstable CAPE '237117' = { discipline = 0 ; @@ -5602,6 +9399,1546 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum geopotential +'237129' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature +'237130' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum u component of wind +'237131' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum v component of wind +'237132' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific humidity +'237133' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface pressure +'237134' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum vertical velocity +'237135' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column water +'237136' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated water vapour +'237137' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum vorticity (relative) +'237138' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean sea level pressure +'237151' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum logarithm of surface pressure +'237152' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum divergence +'237155' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum relative humidity +'237157' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum boundary layer height +'237159' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre U wind component +'237165' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre V wind component +'237166' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre dewpoint temperature +'237168' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum sunshine +'237189' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum ozone mass mixing ratio +'237203' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind speed +'237207' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature of snow layer +'237238' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum forecast surface roughness +'237244' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum forecast logarithm of surface roughness for heat +'237245' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific cloud liquid water content +'237246' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific cloud ice water content +'237247' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum fraction of cloud cover +'237248' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum k index +'237257' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total totals index +'237258' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind direction +'237261' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum clear air turbulence (CAT) +'237262' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum forecast albedo +'237263' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum potential temperature +'237269' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum UV visible albedo for direct radiation (climatological) +'237281' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum UV visible albedo for diffuse radiation (climatological) +'237282' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation (climatological) +'237283' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for diffuse radiation (climatological) +'237284' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum snow albedo +'237285' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum montgomery potential +'237286' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total cloud cover +'237288' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum skin reservoir content +'237289' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column integrated ozone +'237290' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated kinetic energy +'237291' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated enthalpy +'237292' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated potential + internal energy +'237293' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated potential+internal+latent energy +'237294' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated total energy +'237295' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated water enthalpy +'237296' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum UV visible albedo for direct radiation, isotropic component (climatological) +'237297' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum UV visible albedo for direct radiation, volumetric component (climatological) +'237298' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum UV visible albedo for direct radiation, geometric component (climatological) +'237299' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation, isotropic component (climatological) +'237300' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation, volumetric component (climatological) +'237301' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation, geometric component (climatological) +'237302' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum convective inhibition +'237303' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum friction velocity +'237304' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake bottom temperature +'237305' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake total layer temperature +'237306' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake shape factor +'237307' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake ice surface temperature +'237308' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake ice total depth +'237309' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum minimum vertical gradient of refractivity inside trapping layer +'237310' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean vertical gradient of refractivity inside trapping layer +'237311' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum duct base height +'237312' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum trapping layer base height +'237313' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum trapping layer top height +'237314' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum -10 degrees C isothermal level (atm) +'237315' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum cloud base height +'237316' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 0 degrees C isothermal level (atm) +'237317' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum relative humidity with respect to water +'237319' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre relative humidity with respect to water +'237320' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum tropopause pressure +'237322' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum height of convective cloud top +'237323' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum height of zero-degree wet-bulb temperature +'237324' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum height of one-degree wet-bulb temperature +'237325' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total lightning flash density +'237326' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column supercooled liquid water +'237327' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre U-component of neutral wind +'237328' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre V-component of neutral wind +'237329' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum convective rain rate +'237330' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large scale rain rate +'237331' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CAPE in the lowest 50 hPa +'237332' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CIN in the lowest 50 hPa +'237333' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CAPE in the lowest 100 hPa +'237334' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CIN in the lowest 100 hPa +'237335' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum departure level of the most unstable parcel expressed as Pressure +'237336' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum ceiling +'237337' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column integrated saturation specific humidity with respect to water +'237338' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface direct normal short-wave radiation flux +'237339' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum freezing rain precipitation rate +'237341' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward geopotential flux +'237342' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward geopotential flux +'237343' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of water geopotential flux +'237344' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of geopotential flux +'237345' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward enthalpy flux +'237346' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward enthalpy flux +'237347' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward kinetic energy flux +'237348' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward kinetic energy flux +'237349' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward total energy flux +'237350' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward total energy flux +'237351' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of enthalpy flux +'237352' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of kinetic energy flux +'237353' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of total energy flux +'237354' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of water enthalpy flux +'237355' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of mass flux +'237356' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward mass flux +'237357' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward mass flux +'237358' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of water vapour flux +'237359' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of cloud liquid water flux +'237360' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of cloud ice water flux +'237361' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of rain flux +'237362' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of snow flux +'237363' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward water vapour flux +'237364' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward water vapour flux +'237365' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward cloud liquid water flux +'237366' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward cloud liquid water flux +'237367' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward cloud ice water flux +'237368' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward cloud ice water flux +'237369' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward rain flux +'237370' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward rain flux +'237371' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward snow flux +'237372' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward snow flux +'237373' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward ozone flux +'237374' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward ozone flux +'237375' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of ozone flux +'237376' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated net source of ozone +'237377' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward turbulent surface stress due to orographic form drag +'237378' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward turbulent surface stress due to orographic form drag +'237379' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward turbulent surface stress due to surface roughness +'237380' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward turbulent surface stress due to surface roughness +'237381' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum visibility through precipitation +'237382' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum temperature tendency due to short-wave radiation +'238001' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to long-wave radiation +'238002' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to short wave radiation, clear sky +'238003' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to long-wave radiation, clear sky +'238004' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to parametrisations +'238005' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific humidity tendency due to parametrisations +'238006' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward wind tendency due to parametrisations +'238007' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward wind tendency due to parametrisations +'238008' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum updraught mass flux +'238009' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum downdraught mass flux +'238010' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum updraught detrainment rate +'238011' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum downdraught detrainment rate +'238012' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total precipitation flux +'238013' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum turbulent diffusion coefficient for heat +'238014' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface photosynthetically active radiation flux, clear sky +'238022' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snow evaporation rate +'238023' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snowmelt rate +'238024' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum magnitude of turbulent surface stress +'238025' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large-scale precipitation fraction +'238026' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward UV radiation flux +'238027' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface photosynthetically active radiation flux +'238028' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large-scale precipitation rate +'238029' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective precipitation rate +'238030' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snowfall rate +'238031' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum boundary layer dissipation +'238032' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface sensible heat flux +'238033' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface latent heat flux +'238034' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward short-wave radiation flux +'238035' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward long-wave radiation flux +'238036' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net short-wave radiation flux +'238037' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net long-wave radiation flux +'238038' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net short-wave radiation flux +'238039' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net long-wave radiation flux +'238040' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward turbulent surface stress +'238041' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 62 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward turbulent surface stress +'238042' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 63 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum evaporation rate +'238043' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward gravity wave surface stress +'238045' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward gravity wave surface stress +'238046' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum gravity wave dissipation +'238047' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum runoff rate +'238048' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net short-wave radiation flux, clear sky +'238049' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net long-wave radiation flux, clear sky +'238050' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net short-wave radiation flux, clear sky +'238051' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net long-wave radiation flux, clear sky +'238052' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top downward short-wave radiation flux +'238053' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated moisture divergence +'238054' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective snowfall rate water equivalent +'238056' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large scale snowfall rate water equivalent +'238057' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface direct short-wave radiation flux +'238058' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface direct short-wave radiation flux, clear sky +'238059' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum carbon dioxide net ecosystem exchange flux +'238062' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum carbon dioxide gross primary production flux +'238063' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum carbon dioxide ecosystem respiration flux +'238064' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward short-wave radiation flux, clear sky +'238068' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward long-wave radiation flux, clear sky +'238069' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum potential evaporation rate +'238070' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum volumetric soil moisture '238077' = { discipline = 2 ; @@ -5609,6 +10946,91 @@ parameterNumber = 25 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum snow depth water equivalent +'238078' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum skin temperature +'238079' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snow density +'238080' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum sea ice area fraction +'238083' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum sea surface temperature +'238084' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column cloud liquid water +'238087' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column cloud ice water +'238088' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre specific humidity +'238089' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake mix-layer temperature +'238090' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake mix-layer depth +'238091' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum 2 metre relative humidity '238092' = { discipline = 0 ; @@ -5619,6 +11041,62 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum soil temperature +'238094' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wind speed +'238097' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum pressure +'238098' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum charnock +'238099' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum potential vorticity +'238100' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific rain water content +'238101' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific snow water content +'238102' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eta-coordinate vertical velocity +'238103' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum visibility '238105' = { discipline = 0 ; @@ -5626,6 +11104,52 @@ parameterNumber = 0 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum wind direction +'238106' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column snow water +'238107' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum low cloud cover +'238108' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum medium cloud cover +'238109' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum high cloud cover +'238110' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column rain water +'238111' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum most-unstable CAPE '238117' = { discipline = 0 ; @@ -5645,6 +11169,1582 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum geopotential +'238129' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature +'238130' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum u component of wind +'238131' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum v component of wind +'238132' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific humidity +'238133' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface pressure +'238134' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertical velocity +'238135' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column water +'238136' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated water vapour +'238137' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vorticity (relative) +'238138' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean sea level pressure +'238151' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum logarithm of surface pressure +'238152' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum divergence +'238155' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum relative humidity +'238157' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum boundary layer height +'238159' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre U wind component +'238165' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre V wind component +'238166' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre dewpoint temperature +'238168' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum sunshine +'238189' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum ozone mass mixing ratio +'238203' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind speed +'238207' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature of snow layer +'238238' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum forecast surface roughness +'238244' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum forecast logarithm of surface roughness for heat +'238245' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific cloud liquid water content +'238246' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific cloud ice water content +'238247' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum fraction of cloud cover +'238248' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum k index +'238257' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total totals index +'238258' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind direction +'238261' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum clear air turbulence (CAT) +'238262' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum forecast albedo +'238263' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum potential temperature +'238269' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum UV visible albedo for direct radiation (climatological) +'238281' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum UV visible albedo for diffuse radiation (climatological) +'238282' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation (climatological) +'238283' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for diffuse radiation (climatological) +'238284' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum snow albedo +'238285' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum montgomery potential +'238286' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective available potential energy +'238287' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total cloud cover +'238288' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum skin reservoir content +'238289' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column integrated ozone +'238290' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated kinetic energy +'238291' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated enthalpy +'238292' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated potential + internal energy +'238293' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertical integral of potential+internal+latent energy +'238294' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated total energy +'238295' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated water enthalpy +'238296' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum UV visible albedo for direct radiation, isotropic component (climatological) +'238297' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum UV visible albedo for direct radiation, volumetric component (climatological) +'238298' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum UV visible albedo for direct radiation, geometric component (climatological) +'238299' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation, isotropic component (climatological) +'238300' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation, volumetric component (climatological) +'238301' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation, geometric component (climatological) +'238302' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum convective inhibition +'238303' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum friction velocity +'238304' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake bottom temperature +'238305' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake total layer temperature +'238306' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake shape factor +'238307' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake ice surface temperature +'238308' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake ice total depth +'238309' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum minimum vertical gradient of refractivity inside trapping layer +'238310' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean vertical gradient of refractivity inside trapping layer +'238311' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum duct base height +'238312' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum trapping layer base height +'238313' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum trapping layer top height +'238314' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum -10 degrees C isothermal level (atm) +'238315' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum cloud base height +'238316' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 0 degrees C isothermal level (atm) +'238317' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind gust +'238318' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum relative humidity with respect to water +'238319' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre relative humidity with respect to water +'238320' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective available potential energy shear +'238321' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum tropopause pressure +'238322' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum height of convective cloud top +'238323' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum height of zero-degree wet-bulb temperature +'238324' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum height of one-degree wet-bulb temperature +'238325' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total lightning flash density +'238326' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column supercooled liquid water +'238327' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre U-component of neutral wind +'238328' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre V-component of neutral wind +'238329' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective rain rate +'238330' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large scale rain rate +'238331' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CAPE in the lowest 50 hPa +'238332' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CIN in the lowest 50 hPa +'238333' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CAPE in the lowest 100 hPa +'238334' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CIN in the lowest 100 hPa +'238335' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum departure level of the most unstable parcel expressed as Pressure +'238336' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum ceiling +'238337' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column integrated saturation specific humidity with respect to water +'238338' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum direct solar radiation flux +'238339' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum freezing rain rate water equivalent +'238341' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward geopotential flux +'238342' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward geopotential flux +'238343' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of water geopotential flux +'238344' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of geopotential flux +'238345' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward enthalpy flux +'238346' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward enthalpy flux +'238347' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward kinetic energy flux +'238348' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward kinetic energy flux +'238349' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward total energy flux +'238350' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward total energy flux +'238351' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of enthalpy flux +'238352' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of kinetic energy flux +'238353' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of total energy flux +'238354' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of water enthalpy flux +'238355' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of mass flux +'238356' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward mass flux +'238357' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward mass flux +'238358' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of water vapour flux +'238359' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of cloud liquid water flux +'238360' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of cloud ice water flux +'238361' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of rain flux +'238362' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of snow flux +'238363' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward water vapour flux +'238364' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward water vapour flux +'238365' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward cloud liquid water flux +'238366' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward cloud liquid water flux +'238367' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward cloud ice water flux +'238368' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward cloud ice water flux +'238369' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward rain flux +'238370' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward rain flux +'238371' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward snow flux +'238372' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward snow flux +'238373' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward ozone flux +'238374' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward ozone flux +'238375' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of ozone flux +'238376' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated net source of ozone +'238377' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward turbulent surface stress due to orographic form drag +'238378' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward turbulent surface stress due to orographic form drag +'238379' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward turbulent surface stress due to surface roughness +'238380' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward turbulent surface stress due to surface roughness +'238381' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum visibility through precipitation +'238382' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation temperature tendency due to short-wave radiation +'239001' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to long-wave radiation +'239002' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to short wave radiation, clear sky +'239003' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to long-wave radiation, clear sky +'239004' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to parametrisations +'239005' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific humidity tendency due to parametrisations +'239006' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward wind tendency due to parametrisations +'239007' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward wind tendency due to parametrisations +'239008' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation updraught mass flux +'239009' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation downdraught mass flux +'239010' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation updraught detrainment rate +'239011' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation downdraught detrainment rate +'239012' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total precipitation flux +'239013' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation turbulent diffusion coefficient for heat +'239014' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface photosynthetically active radiation flux, clear sky +'239022' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snow evaporation rate +'239023' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snowmelt rate +'239024' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation magnitude of turbulent surface stress +'239025' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large-scale precipitation fraction +'239026' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward UV radiation flux +'239027' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface photosynthetically active radiation flux +'239028' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large-scale precipitation rate +'239029' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective precipitation rate +'239030' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snowfall rate +'239031' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation boundary layer dissipation +'239032' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface sensible heat flux +'239033' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface latent heat flux +'239034' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward short-wave radiation flux +'239035' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward long-wave radiation flux +'239036' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net short-wave radiation flux +'239037' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net long-wave radiation flux +'239038' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net short-wave radiation flux +'239039' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net long-wave radiation flux +'239040' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward turbulent surface stress +'239041' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 62 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward turbulent surface stress +'239042' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 63 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation evaporation rate +'239043' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward gravity wave surface stress +'239045' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward gravity wave surface stress +'239046' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation gravity wave dissipation +'239047' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation runoff rate +'239048' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net short-wave radiation flux, clear sky +'239049' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net long-wave radiation flux, clear sky +'239050' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net short-wave radiation flux, clear sky +'239051' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net long-wave radiation flux, clear sky +'239052' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top downward short-wave radiation flux +'239053' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated moisture divergence +'239054' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total precipitation rate +'239055' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective snowfall rate water equivalent +'239056' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large scale snowfall rate water equivalent +'239057' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface direct short-wave radiation flux +'239058' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface direct short-wave radiation flux, clear sky +'239059' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation carbon dioxide net ecosystem exchange flux +'239062' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation carbon dioxide gross primary production flux +'239063' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation carbon dioxide ecosystem respiration flux +'239064' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward short-wave radiation flux, clear sky +'239068' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward long-wave radiation flux, clear sky +'239069' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation potential evaporation rate +'239070' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } #Time-standard-deviation volumetric soil moisture '239077' = { discipline = 2 ; @@ -5652,6 +12752,200 @@ parameterNumber = 25 ; typeOfStatisticalProcessing = 6 ; } +#Time-standard-deviation snow depth water equivalent +'239078' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation skin temperature +'239079' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snow density +'239080' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation sea ice area fraction +'239083' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation sea surface temperature +'239084' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column cloud liquid water +'239087' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column cloud ice water +'239088' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre specific humidity +'239089' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake mix-layer temperature +'239090' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake mix-layer depth +'239091' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation soil temperature +'239094' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wind speed +'239097' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation pressure +'239098' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation charnock +'239099' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation potential vorticity +'239100' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific rain water content +'239101' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific snow water content +'239102' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eta-coordinate vertical velocity +'239103' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation visibility +'239105' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wind direction +'239106' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column snow water +'239107' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation low cloud cover +'239108' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation medium cloud cover +'239109' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation high cloud cover +'239110' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column rain water +'239111' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } #Time-standard-deviation most-unstable CAPE '239117' = { discipline = 0 ; @@ -5671,6 +12965,1145 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 6 ; } +#Time-standard-deviation geopotential +'239129' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature +'239130' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation u component of wind +'239131' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation v component of wind +'239132' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific humidity +'239133' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface pressure +'239134' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertical velocity +'239135' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column water +'239136' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated water vapour +'239137' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vorticity (relative) +'239138' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean sea level pressure +'239151' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation logarithm of surface pressure +'239152' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation divergence +'239155' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation relative humidity +'239157' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation boundary layer height +'239159' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre U wind component +'239165' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre V wind component +'239166' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre temperature +'239167' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre dewpoint temperature +'239168' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation sunshine +'239189' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation ozone mass mixing ratio +'239203' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind speed +'239207' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature of snow layer +'239238' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation forecast surface roughness +'239244' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation forecast logarithm of surface roughness for heat +'239245' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific cloud liquid water content +'239246' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific cloud ice water content +'239247' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation fraction of cloud cover +'239248' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation k index +'239257' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total totals index +'239258' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind direction +'239261' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation clear air turbulence (CAT) +'239262' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation forecast albedo +'239263' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation potential temperature +'239269' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation UV visible albedo for direct radiation (climatological) +'239281' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation UV visible albedo for diffuse radiation (climatological) +'239282' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation (climatological) +'239283' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for diffuse radiation (climatological) +'239284' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation snow albedo +'239285' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation montgomery potential +'239286' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective available potential energy +'239287' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total cloud cover +'239288' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation skin reservoir content +'239289' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column integrated ozone +'239290' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated kinetic energy +'239291' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated enthalpy +'239292' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated potential + internal energy +'239293' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertical integral of potential+internal+latent energy +'239294' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated total energy +'239295' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated water enthalpy +'239296' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation UV visible albedo for direct radiation, isotropic component (climatological) +'239297' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation UV visible albedo for direct radiation, volumetric component (climatological) +'239298' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation UV visible albedo for direct radiation, geometric component (climatological) +'239299' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation, isotropic component (climatological) +'239300' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation, volumetric component (climatological) +'239301' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation, geometric component (climatological) +'239302' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation convective inhibition +'239303' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation friction velocity +'239304' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake bottom temperature +'239305' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake total layer temperature +'239306' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake shape factor +'239307' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake ice surface temperature +'239308' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake ice total depth +'239309' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation minimum vertical gradient of refractivity inside trapping layer +'239310' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean vertical gradient of refractivity inside trapping layer +'239311' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation duct base height +'239312' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation trapping layer base height +'239313' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation trapping layer top height +'239314' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation -10 degrees C isothermal level (atm) +'239315' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation cloud base height +'239316' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 0 degrees C isothermal level (atm) +'239317' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind gust +'239318' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation relative humidity with respect to water +'239319' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre relative humidity with respect to water +'239320' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective available potential energy shear +'239321' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation tropopause pressure +'239322' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation height of convective cloud top +'239323' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation height of zero-degree wet-bulb temperature +'239324' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation height of one-degree wet-bulb temperature +'239325' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total lightning flash density +'239326' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column supercooled liquid water +'239327' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre U-component of neutral wind +'239328' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre V-component of neutral wind +'239329' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective rain rate +'239330' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large scale rain rate +'239331' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CAPE in the lowest 50 hPa +'239332' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CIN in the lowest 50 hPa +'239333' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CAPE in the lowest 100 hPa +'239334' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CIN in the lowest 100 hPa +'239335' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation departure level of the most unstable parcel expressed as Pressure +'239336' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation ceiling +'239337' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column integrated saturation specific humidity with respect to water +'239338' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation direct solar radiation flux +'239339' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation freezing rain rate water equivalent +'239341' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward geopotential flux +'239342' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward geopotential flux +'239343' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of water geopotential flux +'239344' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of geopotential flux +'239345' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward enthalpy flux +'239346' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward enthalpy flux +'239347' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward kinetic energy flux +'239348' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward kinetic energy flux +'239349' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward total energy flux +'239350' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward total energy flux +'239351' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of enthalpy flux +'239352' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of kinetic energy flux +'239353' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of total energy flux +'239354' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of water enthalpy flux +'239355' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of mass flux +'239356' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward mass flux +'239357' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward mass flux +'239358' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of water vapour flux +'239359' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of cloud liquid water flux +'239360' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of cloud ice water flux +'239361' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of rain flux +'239362' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of snow flux +'239363' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward water vapour flux +'239364' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward water vapour flux +'239365' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward cloud liquid water flux +'239366' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward cloud liquid water flux +'239367' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward cloud ice water flux +'239368' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward cloud ice water flux +'239369' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward rain flux +'239370' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward rain flux +'239371' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward snow flux +'239372' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward snow flux +'239373' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward ozone flux +'239374' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward ozone flux +'239375' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of ozone flux +'239376' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated net source of ozone +'239377' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward turbulent surface stress due to orographic form drag +'239378' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward turbulent surface stress due to orographic form drag +'239379' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward turbulent surface stress due to surface roughness +'239380' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward turbulent surface stress due to surface roughness +'239381' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } #Cross sectional area of flow in channel '240011' = { discipline = 1 ; @@ -10318,6 +18751,27 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 1 ; } +#Time-maximum sea ice temperature +'265024' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum sea ice temperature +'266024' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation sea ice temperature +'267024' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 6 ; + } #Virtual temperature '300012' = { discipline = 0 ; @@ -11634,7 +20088,7 @@ parameterCategory = 0 ; parameterNumber = 17 ; } -#Mean 2 metre temperature +#Time-mean 2 metre temperature '228004' = { discipline = 0 ; parameterCategory = 0 ; @@ -11644,7 +20098,7 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } -#Mean of 10 metre wind speed +#Time-mean 10 metre wind speed '228005' = { discipline = 0 ; parameterCategory = 2 ; diff --git a/definitions/grib2/paramId.legacy.def b/definitions/grib2/paramId.legacy.def index 2b26c1398..33c4e0364 100644 --- a/definitions/grib2/paramId.legacy.def +++ b/definitions/grib2/paramId.legacy.def @@ -1,188 +1,249 @@ -#Volumetric soil moisture content -'260185' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 9 ; - } -#Upper layer soil temperature -'260201' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 1 ; - } -#Upper layer soil moisture -'260202' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 2 ; - } -#Lower layer soil moisture -'260203' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 3 ; - } -#Bottom layer soil temperature -'260204' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 4 ; - } -#Liquid volumetric soil moisture (non-frozen) -'260205' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 5 ; - } -#Transpiration stress-onset (soil moisture) -'260207' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 7 ; - } -#Direct evaporation cease (soil moisture) -'260208' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 8 ; - } -#Soil porosity -'260209' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 9 ; - } +# Automatically generated by ./create_def.pl, do not edit #Instantaneous eastward turbulent surface stress '229' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 38 ; - typeOfFirstFixedSurface = 1 ; -} + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + } #Instantaneous northward turbulent surface stress '230' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 37 ; - typeOfFirstFixedSurface = 1 ; -} + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + } +#Minimum dew point depression +'260006' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + } +#Maximum relative humidity +'260023' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 27 ; + } +#Maximum absolute humidity +'260024' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 28 ; + } +#Maximum wind speed +'260064' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 21 ; + } +#Net long wave radiation flux (surface) +'260095' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 0 ; + } +#Net long wave radiation flux (top of atmosphere) +'260096' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 1 ; + } +#Maximum snow albedo +'260161' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 17 ; + } +#Volumetric soil moisture content +'260185' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Upper layer soil temperature +'260201' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + } +#Upper layer soil moisture +'260202' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + } +#Lower layer soil moisture +'260203' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 3 ; + } +#Bottom layer soil temperature +'260204' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Liquid volumetric soil moisture (non-frozen) +'260205' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + } +#Transpiration stress-onset (soil moisture) +'260207' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 7 ; + } +#Direct evaporation cease (soil moisture) +'260208' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 8 ; + } +#Soil porosity +'260209' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 9 ; + } #Evaporation in the last 6 hours '260265' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 79 ; - typeOfFirstFixedSurface = 1 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 6 ; -} + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 6 ; + } #Time-mean evapotranspiration rate in the last 24h '260435' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 39 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 39 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-integrated potential evapotranspiration rate in the last 24h '260437' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 40 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 24 ; + } #Time-mean potential evapotranspiration rate in the last 24h '260438' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 40 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-mean volumetric soil moisture '260440' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 25 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-integrated water runoff and drainage rate in the last 24h '260444' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 42 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 24 ; + } #Time-mean water runoff and drainage rate in the last 24h '260445' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 42 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-mean snow depth water equivalent '260472' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 60 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-mean skin temperature '260473' = { - discipline = 0 ; - parameterCategory = 0 ; - parameterNumber = 17 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-integrated snow melt rate in the last 24h '260476' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 41 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 24 ; + } #Upward sea water velocity '262507' = { - discipline = 10 ; - parameterCategory = 4 ; - parameterNumber = 27 ; - typeOfFirstFixedSurface = 168 ; - typeOfSecondFixedSurface = 168 ; -} + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 168 ; + typeOfSecondFixedSurface = 168 ; + } #Time-mean upward sea water velocity '263507' = { - discipline = 10 ; - parameterCategory = 4 ; - parameterNumber = 27 ; - typeOfFirstFixedSurface = 168 ; - typeOfSecondFixedSurface = 168 ; - typeOfStatisticalProcessing = 0 ; -} -#Maximum individual wave height + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 168 ; + typeOfSecondFixedSurface = 168 ; + typeOfStatisticalProcessing = 0 ; + } +#Maximum temperature +'3015' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Minimum temperature +'3016' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Envelop-maximum individual wave height '140218' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 24 ; -} + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + } +#Soil moisture +'228039' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } #Soil temperature '228139' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 2 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 2 ; } diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 13c68c8a1..254199b0e 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -1305,6 +1305,372 @@ parameterCategory = 0 ; parameterNumber = 84 ; } +#Time-mean wave induced mean sea level correction +'avg_weta' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean ratio of wave angular and frequency width +'avg_wraf' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean number of events in freak waves statistics +'avg_wnslc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U-component of atmospheric surface momentum flux +'avg_utaua' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V-component of atmospheric surface momentum flux +'avg_vtaua' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U-component of surface momentum flux into ocean +'avg_utauo' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V-component of surface momentum flux into ocean +'avg_vtauo' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave turbulent energy flux into ocean +'avg_wphio' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave directional width of first swell partition +'avg_wdw1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave frequency width of first swell partition +'avg_wfw1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave directional width of second swell partition +'avg_wdw2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave frequency width of second swell partition +'avg_wfw2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave directional width of third swell partition +'avg_wdw3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave frequency width of third swell partition +'avg_wfw3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave energy flux magnitude +'avg_wefxm' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave energy flux mean direction +'avg_wefxd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'avg_h1012' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'avg_h1214' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'avg_h1417' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'avg_h1721' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'avg_h2125' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'avg_h2530' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-mean significant wave height of all waves with period larger than 10s +'avg_sh10' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-mean significant wave height of first swell partition +'avg_swh1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave direction of first swell partition +'avg_mwd1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period of first swell partition +'avg_mwp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant wave height of second swell partition +'avg_swh2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave direction of second swell partition +'avg_mwd2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period of second swell partition +'avg_mwp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant wave height of third swell partition +'avg_swh3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave direction of third swell partition +'avg_mwd3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period of third swell partition +'avg_mwp3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean time domain maximum individual crest height +'avg_tdcmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean time domain maximum individual wave height +'avg_tdhmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean space time maximum individual crest height +'avg_stcmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean space time maximum individual wave height +'avg_sthmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave Spectral Skewness +'avg_wss' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean free convective velocity over the oceans +'avg_wstar' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean air density over the oceans +'avg_rhoao' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean normalized energy flux into waves +'avg_phiaw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean normalized energy flux into ocean +'avg_phioc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean normalized stress into ocean +'avg_tauoc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U-component surface stokes drift +'avg_ust' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V-component surface stokes drift +'avg_vst' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean period corresponding to maximum individual wave height +'avg_tmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean envelop-maximum individual wave height +'avg_hmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on first moment +'avg_mp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean mean zero-crossing wave period 'avg_mp2' = { discipline = 10 ; @@ -1312,6 +1678,55 @@ parameterNumber = 28 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean wave spectral directional width +'avg_wdw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on first moment for wind waves +'avg_p1ww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on second moment for wind waves +'avg_p2ww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral directional width for wind waves +'avg_dwww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on first moment for swell +'avg_p1ps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on second moment for swell +'avg_p2ps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral directional width for swell +'avg_dwps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean significant height of combined wind waves and swell 'avg_swh' = { discipline = 10 ; @@ -1319,6 +1734,13 @@ parameterNumber = 3 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean mean wave direction +'avg_mwd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean peak wave period 'avg_pp1d' = { discipline = 10 ; @@ -1333,6 +1755,1772 @@ parameterNumber = 15 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean coefficient of drag with waves +'avg_cdww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant height of wind waves +'avg_shww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean direction of wind waves +'avg_mdww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean period of wind waves +'avg_mpww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant height of total swell +'avg_shts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean direction of total swell +'avg_mdts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean period of total swell +'avg_mpts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean square slope of waves +'avg_msqs' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre wind speed +'avg_wind' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre wind direction +'avg_dwi' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 2D wave spectra (single) +'avg_2dfd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral kurtosis +'avg_wsk' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean benjamin-Feir index +'avg_bfi' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral peakedness +'avg_wsp' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-maximum wave induced mean sea level correction +'max_weta' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum ratio of wave angular and frequency width +'max_wraf' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum number of events in freak waves statistics +'max_wnslc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum U-component of atmospheric surface momentum flux +'max_utaua' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum V-component of atmospheric surface momentum flux +'max_vtaua' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum U-component of surface momentum flux into ocean +'max_utauo' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum V-component of surface momentum flux into ocean +'max_vtauo' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave turbulent energy flux into ocean +'max_wphio' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave directional width of first swell partition +'max_wdw1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave frequency width of first swell partition +'max_wfw1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave directional width of second swell partition +'max_wdw2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave frequency width of second swell partition +'max_wfw2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave directional width of third swell partition +'max_wdw3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave frequency width of third swell partition +'max_wfw3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave energy flux magnitude +'max_wefxm' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave energy flux mean direction +'max_wefxd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'max_h1012' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'max_h1214' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'max_h1417' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'max_h1721' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'max_h2125' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'max_h2530' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-maximum significant wave height of all waves with period larger than 10s +'max_sh10' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-maximum significant wave height of first swell partition +'max_swh1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction of first swell partition +'max_mwd1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period of first swell partition +'max_mwp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant wave height of second swell partition +'max_swh2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction of second swell partition +'max_mwd2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period of second swell partition +'max_mwp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant wave height of third swell partition +'max_swh3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction of third swell partition +'max_mwd3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period of third swell partition +'max_mwp3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum time domain maximum individual crest height +'max_tdcmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum time domain maximum individual wave height +'max_tdhmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum space time maximum individual crest height +'max_stcmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum space time maximum individual wave height +'max_sthmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave Spectral Skewness +'max_wss' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum free convective velocity over the oceans +'max_wstar' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum air density over the oceans +'max_rhoao' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum normalized energy flux into waves +'max_phiaw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum normalized energy flux into ocean +'max_phioc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum normalized stress into ocean +'max_tauoc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum U-component surface stokes drift +'max_ust' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum V-component surface stokes drift +'max_vst' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum period corresponding to maximum individual wave height +'max_tmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum envelop-maximum individual wave height +'max_hmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on first moment +'max_mp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean zero-crossing wave period +'max_mp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral directional width +'max_wdw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on first moment for wind waves +'max_p1ww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on second moment for wind waves +'max_p2ww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral directional width for wind waves +'max_dwww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on first moment for swell +'max_p1ps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on second moment for swell +'max_p2ps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral directional width for swell +'max_dwps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant height of combined wind waves and swell +'max_swh' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction +'max_mwd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum peak wave period +'max_pp1d' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period +'max_mwp' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum coefficient of drag with waves +'max_cdww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant height of wind waves +'max_shww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean direction of wind waves +'max_mdww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean period of wind waves +'max_mpww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant height of total swell +'max_shts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean direction of total swell +'max_mdts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean period of total swell +'max_mpts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean square slope of waves +'max_msqs' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind speed +'max_wind' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind direction +'max_dwi' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2D wave spectra (single) +'max_2dfd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral kurtosis +'max_wsk' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum benjamin-Feir index +'max_bfi' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral peakedness +'max_wsp' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum wave induced mean sea level correction +'min_weta' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum ratio of wave angular and frequency width +'min_wraf' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum number of events in freak waves statistics +'min_wnslc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum U-component of atmospheric surface momentum flux +'min_utaua' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum V-component of atmospheric surface momentum flux +'min_vtaua' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum U-component of surface momentum flux into ocean +'min_utauo' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum V-component of surface momentum flux into ocean +'min_vtauo' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave turbulent energy flux into ocean +'min_wphio' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave directional width of first swell partition +'min_wdw1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave frequency width of first swell partition +'min_wfw1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave directional width of second swell partition +'min_wdw2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave frequency width of second swell partition +'min_wfw2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave directional width of third swell partition +'min_wdw3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave frequency width of third swell partition +'min_wfw3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave energy flux magnitude +'min_wefxm' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave energy flux mean direction +'min_wefxd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'min_h1012' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'min_h1214' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'min_h1417' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'min_h1721' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'min_h2125' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'min_h2530' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-minimum significant wave height of all waves with period larger than 10s +'min_sh10' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-minimum significant wave height of first swell partition +'min_swh1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction of first swell partition +'min_mwd1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period of first swell partition +'min_mwp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant wave height of second swell partition +'min_swh2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction of second swell partition +'min_mwd2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period of second swell partition +'min_mwp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant wave height of third swell partition +'min_swh3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction of third swell partition +'min_mwd3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period of third swell partition +'min_mwp3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum time domain maximum individual crest height +'min_tdcmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum time domain maximum individual wave height +'min_tdhmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum space time maximum individual crest height +'min_stcmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum space time maximum individual wave height +'min_sthmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave Spectral Skewness +'min_wss' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum free convective velocity over the oceans +'min_wstar' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum air density over the oceans +'min_rhoao' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum normalized energy flux into waves +'min_phiaw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum normalized energy flux into ocean +'min_phioc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum normalized stress into ocean +'min_tauoc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum U-component surface stokes drift +'min_ust' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum V-component surface stokes drift +'min_vst' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum period corresponding to maximum individual wave height +'min_tmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum envelop-maximum individual wave height +'min_hmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on first moment +'min_mp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean zero-crossing wave period +'min_mp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral directional width +'min_wdw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on first moment for wind waves +'min_p1ww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on second moment for wind waves +'min_p2ww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral directional width for wind waves +'min_dwww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on first moment for swell +'min_p1ps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on second moment for swell +'min_p2ps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral directional width for swell +'min_dwps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant height of combined wind waves and swell +'min_swh' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction +'min_mwd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum peak wave period +'min_pp1d' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period +'min_mwp' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum coefficient of drag with waves +'min_cdww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant height of wind waves +'min_shww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean direction of wind waves +'min_mdww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean period of wind waves +'min_mpww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant height of total swell +'min_shts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean direction of total swell +'min_mdts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean period of total swell +'min_mpts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean square slope of waves +'min_msqs' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind speed +'min_wind' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind direction +'min_dwi' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2D wave spectra (single) +'min_2dfd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral kurtosis +'min_wsk' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum benjamin-Feir index +'min_bfi' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral peakedness +'min_wsp' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation wave induced mean sea level correction +'std_weta' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation ratio of wave angular and frequency width +'std_wraf' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation number of events in freak waves statistics +'std_wnslc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation U-component of atmospheric surface momentum flux +'std_utaua' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation V-component of atmospheric surface momentum flux +'std_vtaua' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation U-component of surface momentum flux into ocean +'std_utauo' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation V-component of surface momentum flux into ocean +'std_vtauo' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave turbulent energy flux into ocean +'std_wphio' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave directional width of first swell partition +'std_wdw1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave frequency width of first swell partition +'std_wfw1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave directional width of second swell partition +'std_wdw2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave frequency width of second swell partition +'std_wfw2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave directional width of third swell partition +'std_wdw3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave frequency width of third swell partition +'std_wfw3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave energy flux magnitude +'std_wefxm' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave energy flux mean direction +'std_wefxd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'std_h1012' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'std_h1214' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'std_h1417' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'std_h1721' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'std_h2125' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'std_h2530' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-standard-deviation significant wave height of all waves with period larger than 10s +'std_sh10' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-standard-deviation significant wave height of first swell partition +'std_swh1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction of first swell partition +'std_mwd1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period of first swell partition +'std_mwp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant wave height of second swell partition +'std_swh2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction of second swell partition +'std_mwd2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period of second swell partition +'std_mwp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant wave height of third swell partition +'std_swh3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction of third swell partition +'std_mwd3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period of third swell partition +'std_mwp3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation time domain maximum individual crest height +'std_tdcmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation time domain maximum individual wave height +'std_tdhmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation space time maximum individual crest height +'std_stcmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation space time maximum individual wave height +'std_sthmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave Spectral Skewness +'std_wss' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation free convective velocity over the oceans +'std_wstar' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation air density over the oceans +'std_rhoao' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation normalized energy flux into waves +'std_phiaw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation normalized energy flux into ocean +'std_phioc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation normalized stress into ocean +'std_tauoc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation U-component surface stokes drift +'std_ust' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation V-component surface stokes drift +'std_vst' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation period corresponding to maximum individual wave height +'std_tmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation envelop-maximum individual wave height +'std_hmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on first moment +'std_mp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean zero-crossing wave period +'std_mp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral directional width +'std_wdw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on first moment for wind waves +'std_p1ww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on second moment for wind waves +'std_p2ww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral directional width for wind waves +'std_dwww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on first moment for swell +'std_p1ps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on second moment for swell +'std_p2ps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral directional width for swell +'std_dwps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant height of combined wind waves and swell +'std_swh' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction +'std_mwd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation peak wave period +'std_pp1d' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period +'std_mwp' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation coefficient of drag with waves +'std_cdww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant height of wind waves +'std_shww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean direction of wind waves +'std_mdww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean period of wind waves +'std_mpww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant height of total swell +'std_shts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean direction of total swell +'std_mdts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean period of total swell +'std_mpts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean square slope of waves +'std_msqs' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind speed +'std_wind' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind direction +'std_dwi' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2D wave spectra (single) +'std_2dfd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral kurtosis +'std_wsk' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation benjamin-Feir index +'std_bfi' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral peakedness +'std_wsp' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 6 ; + } #Mean sea water temperature in the upper 300 m 'mswt300m' = { discipline = 10 ; @@ -4079,6 +6267,27 @@ parameterNumber = 148 ; typeOfFirstFixedSurface = 1 ; } +#Radar reflectivity +'rare' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 4 ; + } +#Pressure at cloud ceiling +'pcdc' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 19 ; + scaledValueOfFirstFixedSurface = 50 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Visibility through precipitation +'visp' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + } #Burned area 'fba' = { discipline = 2 ; @@ -4463,99 +6672,99 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 1 ; } -#Mean temperature tendency due to short-wave radiation -'mttswr' = { +#Time-mean temperature tendency due to short-wave radiation +'avg_ttswr' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 22 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to long-wave radiation -'mttlwr' = { +#Time-mean temperature tendency due to long-wave radiation +'avg_ttlwr' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 23 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to short-wave radiation, clear sky -'mttswrcs' = { +#Time-mean temperature tendency due to short wave radiation, clear sky +'avg_ttswrcs' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 24 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to long-wave radiation, clear sky -'mttlwrcs' = { +#Time-mean temperature tendency due to long-wave radiation, clear sky +'avg_ttlwrcs' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 25 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to parametrisations -'mttpm' = { +#Time-mean temperature tendency due to parametrisations +'avg_ttpm' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 26 ; typeOfStatisticalProcessing = 0 ; } -#Mean specific humidity tendency due to parametrisations -'mqtpm' = { +#Time-mean specific humidity tendency due to parametrisations +'avg_qtpm' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 108 ; typeOfStatisticalProcessing = 0 ; } -#Mean eastward wind tendency due to parametrisations -'mutpm' = { +#Time-mean eastward wind tendency due to parametrisations +'avg_utpm' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 39 ; typeOfStatisticalProcessing = 0 ; } -#Mean northward wind tendency due to parametrisations -'mvtpm' = { +#Time-mean northward wind tendency due to parametrisations +'avg_vtpm' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 40 ; typeOfStatisticalProcessing = 0 ; } -#Mean updraught mass flux -'mumf' = { +#Time-mean updraught mass flux +'avg_umf' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 27 ; typeOfStatisticalProcessing = 0 ; } -#Mean downdraught mass flux -'mdmf' = { +#Time-mean downdraught mass flux +'avg_dmf' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 28 ; typeOfStatisticalProcessing = 0 ; } -#Mean updraught detrainment rate -'mudr' = { +#Time-mean updraught detrainment rate +'avg_udr' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 29 ; typeOfStatisticalProcessing = 0 ; } -#Mean downdraught detrainment rate -'mddr' = { +#Time-mean downdraught detrainment rate +'avg_ddr' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 30 ; typeOfStatisticalProcessing = 0 ; } -#Mean total precipitation flux -'mtpf' = { +#Time-mean total precipitation flux +'avg_tpf' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; typeOfStatisticalProcessing = 0 ; } -#Mean turbulent diffusion coefficient for heat -'mtdch' = { +#Time-mean turbulent diffusion coefficient for heat +'avg_tdch' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 20 ; @@ -4597,339 +6806,347 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Mean surface runoff rate -'msror' = { +#Time-mean surface runoff rate +'avg_surfror' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 51 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean sub-surface runoff rate -'mssror' = { +#Time-mean sub-surface runoff rate +'avg_ssurfror' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 52 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface photosynthetically active radiation flux, clear sky -'msparfcs' = { +#Time-mean surface photosynthetically active radiation flux, clear sky +'avg_parcsf' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 60 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean snow evaporation rate -'mser' = { +#Time-mean snow evaporation rate water equivalent +'avg_esrwe' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 148 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean snowmelt rate -'msmr' = { +#Time-mean snow melt rate +'avg_smr' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 41 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean magnitude of turbulent surface stress -'mmtss' = { +#Time-mean magnitude of turbulent surface stress +'avg_imagss' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 58 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean large-scale precipitation fraction -'mlspf' = { +#Time-mean large-scale precipitation fraction +'avg_ilspf' = { discipline = 0 ; parameterCategory = 6 ; parameterNumber = 36 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward UV radiation flux -'msdwuvrf' = { +#Time-mean surface downward UV radiation flux +'avg_sduvrf' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 12 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface photosynthetically active radiation flux -'msparf' = { +#Time-mean surface photosynthetically active radiation flux +'avg_sparf' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 10 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean large-scale precipitation rate -'mlspr' = { +#Time-mean large-scale precipitation rate +'avg_lsprate' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 54 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean convective precipitation rate -'mcpr' = { +#Time-mean convective precipitation rate +'avg_cpr' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 37 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean snowfall rate -'msr' = { +#Time-mean total snowfall rate water equivalent +'avg_tsrwe' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 53 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean boundary layer dissipation -'mbld' = { +#Time-mean boundary layer dissipation +'avg_ibld' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 20 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface sensible heat flux -'msshf' = { +#Time-mean surface sensible heat flux +'avg_ishf' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 11 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface latent heat flux -'mslhf' = { +#Time-mean surface latent heat flux +'avg_slhtf' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 10 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward short-wave radiation flux -'msdwswrf' = { +#Time-mean surface downward short-wave radiation flux +'avg_sdswrf' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 7 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward long-wave radiation flux -'msdwlwrf' = { +#Time-mean surface downward long-wave radiation flux +'avg_sdlwrf' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 3 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net short-wave radiation flux -'msnswrf' = { +#Time-mean surface net short-wave radiation flux +'avg_snswrf' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 9 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net long-wave radiation flux -'msnlwrf' = { +#Time-mean surface net long-wave radiation flux +'avg_snlwrf' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 5 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net short-wave radiation flux -'mtnswrf' = { +#Time-mean top net short-wave radiation flux +'avg_tnswrf' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 9 ; typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net long-wave radiation flux -'mtnlwrf' = { +#Time-mean top net long-wave radiation flux +'avg_tnlwrf' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 5 ; typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean eastward turbulent surface stress -'metss' = { +#Time-mean eastward turbulent surface stress +'avg_iews' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 62 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean northward turbulent surface stress -'mntss' = { +#Time-mean northward turbulent surface stress +'avg_inss' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 63 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean evaporation rate -'mer' = { +#Time-mean moisture flux +'avg_ie' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 79 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Sunshine duration fraction -'sdf' = { +#Time-mean sunshine duration fraction +'avg_sdf' = { discipline = 0 ; parameterCategory = 6 ; parameterNumber = 51 ; typeOfFirstFixedSurface = 1 ; } -#Mean eastward gravity wave surface stress -'megwss' = { +#Time-mean eastward gravity wave surface stress +'avg_iegwss' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 16 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean northward gravity wave surface stress -'mngwss' = { +#Time-mean northward gravity wave surface stress +'avg_ingwss' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 17 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean gravity wave dissipation -'mgwd' = { +#Time-mean gravity wave dissipation +'avg_igwd' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 23 ; typeOfStatisticalProcessing = 0 ; } -#Mean runoff rate -'mror' = { +#Time-mean runoff rate water equivalent (surface plus subsurface) +'avg_rorwe' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 42 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net short-wave radiation flux, clear sky -'mtnswrfcs' = { +#Time-mean top net short-wave radiation flux, clear sky +'avg_tnswrfcs' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 11 ; typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net long-wave radiation flux, clear sky -'mtnlwrfcs' = { +#Time-mean top net long-wave radiation flux, clear sky +'avg_tnlwrcs' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 6 ; typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net short-wave radiation flux, clear sky -'msnswrfcs' = { +#Time-mean surface net short-wave radiation flux, clear sky +'avg_snswrfcs' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 11 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net long-wave radiation flux, clear sky -'msnlwrfcs' = { +#Time-mean surface net long-wave radiation flux, clear sky +'avg_snlwrcs' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 6 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean top downward short-wave radiation flux -'mtdwswrf' = { +#Time mean top downward short-wave radiation flux +'avg_tdswrf' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 7 ; typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean vertically integrated moisture divergence -'mvimd' = { +#Time-mean total column vertically-integrated moisture divergence flux +'avg_vimdf' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; typeOfStatisticalProcessing = 0 ; } -#Mean total precipitation rate -'mtpr' = { +#Time-mean total precipitation rate +'avg_tprate' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean convective snowfall rate -'mcsr' = { +#Time-mean convective snowfall rate water equivalent +'avg_csfr' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 55 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean large-scale snowfall rate -'mlssr' = { +#Time-mean large scale snowfall rate water equivalent +'avg_lssfr' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 56 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface direct short-wave radiation flux -'msdrswrf' = { +#Time-mean surface direct short-wave radiation flux +'avg_sdirswrf' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 13 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface direct short-wave radiation flux, clear sky -'msdrswrfcs' = { +#Time-mean surface direct short-wave radiation flux, clear sky +'avg_sdirswrfcs' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 61 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward short-wave radiation flux, clear sky -'msdwswrfcs' = { +#Mean surface diffuse short-wave radiation flux +'msdfswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean surface downward short-wave radiation flux, clear sky +'avg_sdswrfcs' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 52 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward long-wave radiation flux, clear sky -'msdwlwrfcs' = { +#Time-mean surface downward long-wave radiation flux, clear sky +'avg_sdlwrfcs' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 8 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean potential evaporation rate -'mper' = { +#Time-mean potential evaporation rate +'avg_pevr' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 143 ; @@ -4954,8 +7171,8 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Time-mean evapotranspiration flux -'metrf' = { +#Time-mean evapotranspiration rate +'avg_etr' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 39 ; @@ -4971,7 +7188,7 @@ typeOfStatisticalProcessing = 1 ; } #Time-mean potential evapotranspiration rate -'mpet' = { +'avg_petr' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 40 ; @@ -4979,21 +7196,21 @@ typeOfStatisticalProcessing = 0 ; } #Time-mean volumetric soil moisture -'mvsw' = { +'avg_vsw' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 25 ; typeOfStatisticalProcessing = 0 ; } #Time-mean snow depth water equivalent -'msd' = { +'avg_sd' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 60 ; typeOfStatisticalProcessing = 0 ; } #Time-mean skin temperature -'mskt' = { +'avg_skt' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 17 ; @@ -5136,6 +7353,13 @@ parameterNumber = 0 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean charnock +'avg_chnk' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean potential vorticity 'avg_pv' = { discipline = 0 ; @@ -5164,6 +7388,59 @@ parameterNumber = 32 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean visibility +'avg_vis' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wind direction +'avg_wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column snow water +'avg_tcsw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'avg_lcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'avg_mcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'avg_hcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column rain water +'avg_tcrw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean soil moisture top 20 cm 'avg_sm20' = { discipline = 2 ; @@ -5411,6 +7688,14 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean sunshine +'avg_suns' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean ozone mass mixing ratio 'avg_o3' = { discipline = 0 ; @@ -5476,6 +7761,16 @@ parameterNumber = 4 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean 10 metre wind direction +'avg_10wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean clear air turbulence (CAT) 'avg_cat' = { discipline = 0 ; @@ -5483,6 +7778,20 @@ parameterNumber = 29 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean forecast albedo +'avg_al' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean potential temperature +'avg_pt' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean discharge from rivers or streams 'avg_dis' = { discipline = 1 ; @@ -5566,6 +7875,1300 @@ parameterNumber = 23 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean UV visible albedo for direct radiation (climatological) +'avg_aluvp_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean UV visible albedo for diffuse radiation (climatological) +'avg_aluvd_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation (climatological) +'avg_alnip_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for diffuse radiation (climatological) +'avg_alnid_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean snow albedo +'avg_asn' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean montgomery potential +'avg_mont' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean convective available potential energy +'avg_cape' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean skin reservoir content +'avg_srcon' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column integrated ozone +'avg_tcioz' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated kinetic energy +'avg_vike' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated enthalpy +'avg_vithe' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated potential + internal energy +'avg_vipie' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated potential+internal+latent energy +'avg_vipile' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated total energy +'avg_vitoe' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated water enthalpy +'avg_viwe' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean UV visible albedo for direct radiation, isotropic component (climatological) +'avg_aluvpi_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean UV visible albedo for direct radiation, volumetric component (climatological) +'avg_aluvpv_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean UV visible albedo for direct radiation, geometric component (climatological) +'avg_aluvpg_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation, isotropic component (climatological) +'avg_alnipi_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation, volumetric component (climatological) +'avg_alnipv_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation, geometric component (climatological) +'avg_alnipg_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean convective inhibition +'avg_cin' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean friction velocity +'avg_zust' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake bottom temperature +'avg_lblt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake total layer temperature +'avg_ltlt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake shape factor +'avg_lshf' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake ice surface temperature +'avg_lict' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake ice total depth +'avg_licd' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean minimum vertical gradient of refractivity inside trapping layer +'avg_dndzn' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean vertical gradient of refractivity inside trapping layer +'avg_dndza' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean duct base height +'avg_dctb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean trapping layer base height +'avg_tplb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean trapping layer top height +'avg_tplt' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean -10 degrees C isothermal level (atm) +'avg_degm10l' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean cloud base height +'avg_cbh' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 0 degrees C isothermal level (atm) +'avg_deg0l' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre wind gust +'avg_i10fg' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean relative humidity with respect to water +'avg_rhw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 2 metre relative humidity with respect to water +'avg_2rhw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean convective available potential energy shear +'avg_capes' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean tropopause pressure +'avg_trpp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean height of convective cloud top +'avg_hcct' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean height of zero-degree wet-bulb temperature +'avg_hwbt0' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean height of one-degree wet-bulb temperature +'avg_hwbt1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column supercooled liquid water +'avg_tcslw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre U-component of neutral wind +'avg_u10n' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre V-component of neutral wind +'avg_v10n' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean convective rain rate +'avg_crr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean large scale rain rate +'avg_lsrr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CAPE in the lowest 50 hPa +'avg_mlcape50' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CIN in the lowest 50 hPa +'avg_mlcin50' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CAPE in the lowest 100 hPa +'avg_mlcape100' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CIN in the lowest 100 hPa +'avg_mlcin100' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean departure level of the most unstable parcel expressed as Pressure +'avg_mudlp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean ceiling +'avg_ceil' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column integrated saturation specific humidity with respect to water +'avg_tcsqw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean surface direct normal short-wave radiation flux +'avg_sdirnswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean freezing rain precipitation rate +'avg_fprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward geopotential flux +'avg_vige' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward geopotential flux +'avg_vign' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of water geopotential flux +'avg_viwgd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of geopotential flux +'avg_vigd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward enthalpy flux +'avg_viee' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward enthalpy flux +'avg_vien' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward kinetic energy flux +'avg_vikee' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward kinetic energy flux +'avg_viken' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward total energy flux +'avg_vitee' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward total energy flux +'avg_viten' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of enthalpy flux +'avg_vied' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of kinetic energy flux +'avg_viked' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of total energy flux +'avg_vited' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of water enthalpy flux +'avg_viwed' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of mass flux +'avg_vimad' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward mass flux +'avg_vimae' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward mass flux +'avg_viman' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of water vapour flux +'avg_viwvd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of cloud liquid water flux +'avg_viclwd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of cloud ice water flux +'avg_viciwd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of rain flux +'avg_vird' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of snow flux +'avg_visd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward water vapour flux +'avg_viwve' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward water vapour flux +'avg_viwvn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward cloud liquid water flux +'avg_viclwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward cloud liquid water flux +'avg_viclwn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward cloud ice water flux +'avg_viciwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward cloud ice water flux +'avg_viciwn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward rain flux +'avg_vire' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward rain flux +'avg_virn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward snow flux +'avg_vise' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward snow flux +'avg_visn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward ozone flux +'avg_vioze' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward ozone flux +'avg_viozn' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of ozone flux +'avg_viozd' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated net source of ozone +'avg_vions' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean eastward turbulent surface stress due to orographic form drag +'avg_ietssofd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean northward turbulent surface stress due to orographic form drag +'avg_intssofd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean eastward turbulent surface stress due to surface roughness +'avg_ietsssr' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean northward turbulent surface stress due to surface roughness +'avg_intsssr' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean visibility through precipitation +'avg_visp' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-maximum temperature tendency due to short-wave radiation +'max_ttswr' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to long-wave radiation +'max_ttlwr' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to short wave radiation, clear sky +'max_ttswrcs' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to long-wave radiation, clear sky +'max_ttlwrcs' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to parametrisations +'max_ttpm' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific humidity tendency due to parametrisations +'max_qtpm' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward wind tendency due to parametrisations +'max_utpm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward wind tendency due to parametrisations +'max_vtpm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum updraught mass flux +'max_umf' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum downdraught mass flux +'max_dmf' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum updraught detrainment rate +'max_udr' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum downdraught detrainment rate +'max_ddr' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total precipitation flux +'max_tpf' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum turbulent diffusion coefficient for heat +'max_tdch' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface photosynthetically active radiation flux, clear sky +'max_parcsf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum snow evaporation rate water equivalent +'max_esrwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum snow melt rate +'max_smr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum magnitude of turbulent surface stress +'max_imagss' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large-scale precipitation fraction +'max_ilspf' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward UV radiation flux +'max_sduvrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface photosynthetically active radiation flux +'max_sparf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large-scale precipitation rate +'max_lsprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum convective precipitation rate +'max_cpr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total snowfall rate water equivalent +'max_tsrwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum boundary layer dissipation +'max_ibld' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface sensible heat flux +'max_ishf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface latent heat flux +'max_slhtf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward short-wave radiation flux +'max_sdswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward long-wave radiation flux +'max_sdlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net short-wave radiation flux +'max_snswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net long-wave radiation flux +'max_snlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net short-wave radiation flux +'max_tnswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net long-wave radiation flux +'max_tnlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward turbulent surface stress +'max_iews' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 62 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward turbulent surface stress +'max_inss' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 63 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum moisture flux +'max_ie' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward gravity wave surface stress +'max_iegwss' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward gravity wave surface stress +'max_ingwss' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum gravity wave dissipation +'max_igwd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum runoff rate water equivalent (surface plus subsurface) +'max_rorwe' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net short-wave radiation flux, clear sky +'max_tnswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net long-wave radiation flux, clear sky +'max_tnlwrcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net short-wave radiation flux, clear sky +'max_snswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net long-wave radiation flux, clear sky +'max_snlwrcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time mean top downward short-wave radiation flux +'max_tdswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated moisture divergence flux +'max_vimdf' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum convective snowfall rate water equivalent +'max_csfr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large scale snowfall rate water equivalent +'max_lssfr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface direct short-wave radiation flux +'max_sdirswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface direct short-wave radiation flux, clear sky +'max_sdirswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum carbon dioxide net ecosystem exchange flux +'max_fco2nee' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum carbon dioxide gross primary production flux +'max_fco2gpp' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum carbon dioxide ecosystem respiration flux +'max_fco2rec' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward short-wave radiation flux, clear sky +'max_sdswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward long-wave radiation flux, clear sky +'max_sdlwrfcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum potential evaporation rate +'max_pevr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum volumetric soil moisture 'max_vsw' = { discipline = 2 ; @@ -5573,6 +9176,91 @@ parameterNumber = 25 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum snow depth water equivalent +'max_sd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum skin temperature +'max_skt' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum snow density +'max_rsn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum sea ice area fraction +'max_ci' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum sea surface temperature +'max_sst' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column cloud liquid water +'max_tclw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column cloud ice water +'max_tciw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre specific humidity +'max_2sh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake mix-layer temperature +'max_lmlt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake mix-layer depth +'max_lmld' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum 2 metre relative humidity 'max_2r' = { discipline = 0 ; @@ -5583,6 +9271,115 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum soil temperature +'max_sot' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wind speed +'max_ws' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum pressure +'max_pres' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum charnock +'max_chnk' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum potential vorticity +'max_pv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific rain water content +'max_crwc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific snow water content +'max_cswc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eta-coordinate vertical velocity +'max_etadot' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum visibility +'max_vis' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wind direction +'max_wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column snow water +'max_tcsw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum low cloud cover +'max_lcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum medium cloud cover +'max_mcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum high cloud cover +'max_hcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column rain water +'max_tcrw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum most-unstable CAPE 'max_mucape' = { discipline = 0 ; @@ -5602,6 +9399,1546 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum geopotential +'max_z' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature +'max_t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum u component of wind +'max_u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum v component of wind +'max_v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific humidity +'max_q' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface pressure +'max_sp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum vertical velocity +'max_w' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column water +'max_tcw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated water vapour +'max_tcwv' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum vorticity (relative) +'max_vo' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean sea level pressure +'max_msl' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum logarithm of surface pressure +'max_lnsp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum divergence +'max_d' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum relative humidity +'max_r' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum boundary layer height +'max_blh' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre U wind component +'max_10u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre V wind component +'max_10v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre dewpoint temperature +'max_2d' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum sunshine +'max_suns' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum ozone mass mixing ratio +'max_o3' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind speed +'max_10si' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature of snow layer +'max_tsn' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum forecast surface roughness +'max_fsr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum forecast logarithm of surface roughness for heat +'max_flsr' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific cloud liquid water content +'max_clwc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific cloud ice water content +'max_ciwc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum fraction of cloud cover +'max_cc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum k index +'max_kx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total totals index +'max_totalx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind direction +'max_10wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum clear air turbulence (CAT) +'max_cat' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum forecast albedo +'max_al' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum potential temperature +'max_pt' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum UV visible albedo for direct radiation (climatological) +'max_aluvp_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum UV visible albedo for diffuse radiation (climatological) +'max_aluvd_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation (climatological) +'max_alnip_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for diffuse radiation (climatological) +'max_alnid_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum snow albedo +'max_asn' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum montgomery potential +'max_mont' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total cloud cover +'max_tcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum skin reservoir content +'max_srcon' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column integrated ozone +'max_tcioz' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated kinetic energy +'max_vike' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated enthalpy +'max_vithe' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated potential + internal energy +'max_vipie' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated potential+internal+latent energy +'max_vipile' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated total energy +'max_vitoe' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated water enthalpy +'max_viwe' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum UV visible albedo for direct radiation, isotropic component (climatological) +'max_aluvpi_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum UV visible albedo for direct radiation, volumetric component (climatological) +'max_aluvpv_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum UV visible albedo for direct radiation, geometric component (climatological) +'max_aluvpg_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation, isotropic component (climatological) +'max_alnipi_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation, volumetric component (climatological) +'max_alnipv_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation, geometric component (climatological) +'max_alnipg_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum convective inhibition +'max_cin' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum friction velocity +'max_zust' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake bottom temperature +'max_lblt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake total layer temperature +'max_ltlt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake shape factor +'max_lshf' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake ice surface temperature +'max_lict' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake ice total depth +'max_licd' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum minimum vertical gradient of refractivity inside trapping layer +'max_dndzn' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean vertical gradient of refractivity inside trapping layer +'max_dndza' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum duct base height +'max_dctb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum trapping layer base height +'max_tplb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum trapping layer top height +'max_tplt' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum -10 degrees C isothermal level (atm) +'max_degm10l' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum cloud base height +'max_cbh' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 0 degrees C isothermal level (atm) +'max_deg0l' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum relative humidity with respect to water +'max_rhw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre relative humidity with respect to water +'max_2rhw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum tropopause pressure +'max_trpp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum height of convective cloud top +'max_hcct' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum height of zero-degree wet-bulb temperature +'max_hwbt0' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum height of one-degree wet-bulb temperature +'max_hwbt1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total lightning flash density +'max_litoti' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column supercooled liquid water +'max_tcslw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre U-component of neutral wind +'max_u10n' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre V-component of neutral wind +'max_v10n' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum convective rain rate +'max_crr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large scale rain rate +'max_lsrr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CAPE in the lowest 50 hPa +'max_mlcape50' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CIN in the lowest 50 hPa +'max_mlcin50' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CAPE in the lowest 100 hPa +'max_mlcape100' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CIN in the lowest 100 hPa +'max_mlcin100' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum departure level of the most unstable parcel expressed as Pressure +'max_mudlp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum ceiling +'max_ceil' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column integrated saturation specific humidity with respect to water +'max_tcsqw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface direct normal short-wave radiation flux +'max_sdirnswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum freezing rain precipitation rate +'max_fprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward geopotential flux +'max_vige' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward geopotential flux +'max_vign' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of water geopotential flux +'max_viwgd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of geopotential flux +'max_vigd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward enthalpy flux +'max_viee' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward enthalpy flux +'max_vien' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward kinetic energy flux +'max_vikee' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward kinetic energy flux +'max_viken' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward total energy flux +'max_vitee' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward total energy flux +'max_viten' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of enthalpy flux +'max_vied' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of kinetic energy flux +'max_viked' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of total energy flux +'max_vited' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of water enthalpy flux +'max_viwed' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of mass flux +'max_vimad' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward mass flux +'max_vimae' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward mass flux +'max_viman' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of water vapour flux +'max_viwvd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of cloud liquid water flux +'max_viclwd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of cloud ice water flux +'max_viciwd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of rain flux +'max_vird' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of snow flux +'max_visd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward water vapour flux +'max_viwve' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward water vapour flux +'max_viwvn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward cloud liquid water flux +'max_viclwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward cloud liquid water flux +'max_viclwn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward cloud ice water flux +'max_viciwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward cloud ice water flux +'max_viciwn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward rain flux +'max_vire' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward rain flux +'max_virn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward snow flux +'max_vise' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward snow flux +'max_visn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward ozone flux +'max_vioze' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward ozone flux +'max_viozn' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of ozone flux +'max_viozd' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated net source of ozone +'max_vions' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward turbulent surface stress due to orographic form drag +'max_ietssofd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward turbulent surface stress due to orographic form drag +'max_intssofd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward turbulent surface stress due to surface roughness +'max_ietsssr' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward turbulent surface stress due to surface roughness +'max_intsssr' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum visibility through precipitation +'max_visp' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum temperature tendency due to short-wave radiation +'min_ttswr' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to long-wave radiation +'min_ttlwr' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to short wave radiation, clear sky +'min_ttswrcs' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to long-wave radiation, clear sky +'min_ttlwrcs' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to parametrisations +'min_ttpm' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific humidity tendency due to parametrisations +'min_qtpm' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward wind tendency due to parametrisations +'min_utpm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward wind tendency due to parametrisations +'min_vtpm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum updraught mass flux +'min_umf' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum downdraught mass flux +'min_dmf' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum updraught detrainment rate +'min_udr' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum downdraught detrainment rate +'min_ddr' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total precipitation flux +'min_tpf' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum turbulent diffusion coefficient for heat +'min_tdch' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface photosynthetically active radiation flux, clear sky +'min_parcsf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snow evaporation rate +'min_esrwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snowmelt rate +'min_smr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum magnitude of turbulent surface stress +'min_imagss' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large-scale precipitation fraction +'min_ilspf' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward UV radiation flux +'min_sduvrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface photosynthetically active radiation flux +'min_sparf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large-scale precipitation rate +'min_lsprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective precipitation rate +'min_cpr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snowfall rate +'min_tsrwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum boundary layer dissipation +'min_ibld' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface sensible heat flux +'min_ishf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface latent heat flux +'min_slhtf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward short-wave radiation flux +'min_sdswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward long-wave radiation flux +'min_sdlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net short-wave radiation flux +'min_snswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net long-wave radiation flux +'min_snlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net short-wave radiation flux +'min_tnswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net long-wave radiation flux +'min_tnlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward turbulent surface stress +'min_iews' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 62 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward turbulent surface stress +'min_inss' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 63 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum evaporation rate +'min_ie' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward gravity wave surface stress +'min_iegwss' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward gravity wave surface stress +'min_ingwss' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum gravity wave dissipation +'min_igwd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum runoff rate +'min_rorwe' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net short-wave radiation flux, clear sky +'min_tnswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net long-wave radiation flux, clear sky +'min_tnlwrcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net short-wave radiation flux, clear sky +'min_snswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net long-wave radiation flux, clear sky +'min_snlwrcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top downward short-wave radiation flux +'min_tdswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated moisture divergence +'min_vimdf' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective snowfall rate water equivalent +'min_csfr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large scale snowfall rate water equivalent +'min_lssfr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface direct short-wave radiation flux +'min_sdirswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface direct short-wave radiation flux, clear sky +'min_sdirswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum carbon dioxide net ecosystem exchange flux +'min_fco2nee' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum carbon dioxide gross primary production flux +'min_fco2gpp' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum carbon dioxide ecosystem respiration flux +'min_fco2rec' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward short-wave radiation flux, clear sky +'min_sdswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward long-wave radiation flux, clear sky +'min_sdlwrfcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum potential evaporation rate +'min_pevr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum volumetric soil moisture 'min_vsw' = { discipline = 2 ; @@ -5609,6 +10946,91 @@ parameterNumber = 25 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum snow depth water equivalent +'min_sd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum skin temperature +'min_skt' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snow density +'min_rsn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum sea ice area fraction +'min_ci' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum sea surface temperature +'min_sst' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column cloud liquid water +'min_tclw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column cloud ice water +'min_tciw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre specific humidity +'min_2sh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake mix-layer temperature +'min_lmlt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake mix-layer depth +'min_lmld' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum 2 metre relative humidity 'min_2r' = { discipline = 0 ; @@ -5619,6 +11041,62 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum soil temperature +'min_sot' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wind speed +'min_ws' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum pressure +'min_pres' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum charnock +'min_chnk' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum potential vorticity +'min_pv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific rain water content +'min_crwc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific snow water content +'min_cswc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eta-coordinate vertical velocity +'min_etadot' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum visibility 'min_vis' = { discipline = 0 ; @@ -5626,6 +11104,52 @@ parameterNumber = 0 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum wind direction +'min_wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column snow water +'min_tcsw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum low cloud cover +'min_lcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum medium cloud cover +'min_mcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum high cloud cover +'min_hcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column rain water +'min_tcrw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum most-unstable CAPE 'min_mucape' = { discipline = 0 ; @@ -5645,6 +11169,1582 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum geopotential +'min_z' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature +'min_t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum u component of wind +'min_u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum v component of wind +'min_v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific humidity +'min_q' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface pressure +'min_sp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertical velocity +'min_w' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column water +'min_tcw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated water vapour +'min_tcwv' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vorticity (relative) +'min_vo' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean sea level pressure +'min_msl' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum logarithm of surface pressure +'min_lnsp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum divergence +'min_d' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum relative humidity +'min_r' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum boundary layer height +'min_blh' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre U wind component +'min_10u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre V wind component +'min_10v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre dewpoint temperature +'min_2d' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum sunshine +'min_suns' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum ozone mass mixing ratio +'min_o3' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind speed +'min_10si' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature of snow layer +'min_tsn' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum forecast surface roughness +'min_fsr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum forecast logarithm of surface roughness for heat +'min_flsr' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific cloud liquid water content +'min_clwc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific cloud ice water content +'min_ciwc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum fraction of cloud cover +'min_cc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum k index +'min_kx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total totals index +'min_totalx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind direction +'min_10wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum clear air turbulence (CAT) +'min_cat' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum forecast albedo +'min_al' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum potential temperature +'min_pt' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum UV visible albedo for direct radiation (climatological) +'min_aluvp_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum UV visible albedo for diffuse radiation (climatological) +'min_aluvd_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation (climatological) +'min_alnip_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for diffuse radiation (climatological) +'min_alnid_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum snow albedo +'min_asn' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum montgomery potential +'min_mont' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective available potential energy +'min_cape' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total cloud cover +'min_tcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum skin reservoir content +'min_srcon' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column integrated ozone +'min_tcioz' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated kinetic energy +'min_vike' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated enthalpy +'min_vithe' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated potential + internal energy +'min_vipie' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertical integral of potential+internal+latent energy +'min_vipile' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated total energy +'min_vitoe' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated water enthalpy +'min_viwe' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum UV visible albedo for direct radiation, isotropic component (climatological) +'min_aluvpi_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum UV visible albedo for direct radiation, volumetric component (climatological) +'min_aluvpv_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum UV visible albedo for direct radiation, geometric component (climatological) +'min_aluvpg_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation, isotropic component (climatological) +'min_alnipi_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation, volumetric component (climatological) +'min_alnipv_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation, geometric component (climatological) +'min_alnipg_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum convective inhibition +'min_cin' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum friction velocity +'min_zust' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake bottom temperature +'min_lblt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake total layer temperature +'min_ltlt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake shape factor +'min_lshf' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake ice surface temperature +'min_lict' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake ice total depth +'min_licd' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum minimum vertical gradient of refractivity inside trapping layer +'min_dndzn' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean vertical gradient of refractivity inside trapping layer +'min_dndza' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum duct base height +'min_dctb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum trapping layer base height +'min_tplb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum trapping layer top height +'min_tplt' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum -10 degrees C isothermal level (atm) +'min_degm10l' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum cloud base height +'min_cbh' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 0 degrees C isothermal level (atm) +'min_deg0l' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind gust +'min_i10fg' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum relative humidity with respect to water +'min_rhw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre relative humidity with respect to water +'min_2rhw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective available potential energy shear +'min_capes' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum tropopause pressure +'min_trpp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum height of convective cloud top +'min_hcct' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum height of zero-degree wet-bulb temperature +'min_hwbt0' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum height of one-degree wet-bulb temperature +'min_hwbt1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total lightning flash density +'min_litoti' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column supercooled liquid water +'min_tcslw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre U-component of neutral wind +'min_u10n' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre V-component of neutral wind +'min_v10n' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective rain rate +'min_crr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large scale rain rate +'min_lsrr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CAPE in the lowest 50 hPa +'min_mlcape50' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CIN in the lowest 50 hPa +'min_mlcin50' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CAPE in the lowest 100 hPa +'min_mlcape100' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CIN in the lowest 100 hPa +'min_mlcin100' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum departure level of the most unstable parcel expressed as Pressure +'min_mudlp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum ceiling +'min_ceil' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column integrated saturation specific humidity with respect to water +'min_tcsqw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum direct solar radiation flux +'min_sdirnswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum freezing rain rate water equivalent +'min_fprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward geopotential flux +'min_vige' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward geopotential flux +'min_vign' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of water geopotential flux +'min_viwgd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of geopotential flux +'min_vigd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward enthalpy flux +'min_viee' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward enthalpy flux +'min_vien' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward kinetic energy flux +'min_vikee' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward kinetic energy flux +'min_viken' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward total energy flux +'min_vitee' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward total energy flux +'min_viten' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of enthalpy flux +'min_vied' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of kinetic energy flux +'min_viked' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of total energy flux +'min_vited' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of water enthalpy flux +'min_viwed' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of mass flux +'min_vimad' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward mass flux +'min_vimae' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward mass flux +'min_viman' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of water vapour flux +'min_viwvd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of cloud liquid water flux +'min_viclwd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of cloud ice water flux +'min_viciwd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of rain flux +'min_vird' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of snow flux +'min_visd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward water vapour flux +'min_viwve' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward water vapour flux +'min_viwvn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward cloud liquid water flux +'min_viclwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward cloud liquid water flux +'min_viclwn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward cloud ice water flux +'min_viciwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward cloud ice water flux +'min_viciwn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward rain flux +'min_vire' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward rain flux +'min_virn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward snow flux +'min_vise' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward snow flux +'min_visn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward ozone flux +'min_vioze' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward ozone flux +'min_viozn' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of ozone flux +'min_viozd' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated net source of ozone +'min_vions' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward turbulent surface stress due to orographic form drag +'min_ietssofd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward turbulent surface stress due to orographic form drag +'min_intssofd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward turbulent surface stress due to surface roughness +'min_ietsssr' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward turbulent surface stress due to surface roughness +'min_intsssr' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum visibility through precipitation +'min_visp' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation temperature tendency due to short-wave radiation +'std_ttswr' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to long-wave radiation +'std_ttlwr' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to short wave radiation, clear sky +'std_ttswrcs' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to long-wave radiation, clear sky +'std_ttlwrcs' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to parametrisations +'std_ttpm' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific humidity tendency due to parametrisations +'std_qtpm' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward wind tendency due to parametrisations +'std_utpm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward wind tendency due to parametrisations +'std_vtpm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation updraught mass flux +'std_umf' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation downdraught mass flux +'std_dmf' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation updraught detrainment rate +'std_udr' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation downdraught detrainment rate +'std_ddr' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total precipitation flux +'std_tpf' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation turbulent diffusion coefficient for heat +'std_tdch' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface photosynthetically active radiation flux, clear sky +'std_parcsf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snow evaporation rate +'std_esrwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snowmelt rate +'std_smr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation magnitude of turbulent surface stress +'std_imagss' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large-scale precipitation fraction +'std_ilspf' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward UV radiation flux +'std_sduvrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface photosynthetically active radiation flux +'std_sparf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large-scale precipitation rate +'std_lsprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective precipitation rate +'std_cpr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snowfall rate +'std_tsrwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation boundary layer dissipation +'std_ibld' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface sensible heat flux +'std_ishf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface latent heat flux +'std_slhtf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward short-wave radiation flux +'std_sdswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward long-wave radiation flux +'std_sdlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net short-wave radiation flux +'std_snswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net long-wave radiation flux +'std_snlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net short-wave radiation flux +'std_tnswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net long-wave radiation flux +'std_tnlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward turbulent surface stress +'std_iews' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 62 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward turbulent surface stress +'std_inss' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 63 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation evaporation rate +'std_ie' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward gravity wave surface stress +'std_iegwss' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward gravity wave surface stress +'std_ingwss' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation gravity wave dissipation +'std_igwd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation runoff rate +'std_rorwe' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net short-wave radiation flux, clear sky +'std_tnswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net long-wave radiation flux, clear sky +'std_tnlwrcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net short-wave radiation flux, clear sky +'std_snswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net long-wave radiation flux, clear sky +'std_snlwrcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top downward short-wave radiation flux +'std_tdswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated moisture divergence +'std_vimdf' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total precipitation rate +'std_tprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective snowfall rate water equivalent +'std_csfr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large scale snowfall rate water equivalent +'std_lssfr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface direct short-wave radiation flux +'std_sdirswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface direct short-wave radiation flux, clear sky +'std_sdirswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation carbon dioxide net ecosystem exchange flux +'std_fco2nee' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation carbon dioxide gross primary production flux +'std_fco2gpp' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation carbon dioxide ecosystem respiration flux +'std_fco2rec' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward short-wave radiation flux, clear sky +'std_sdswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward long-wave radiation flux, clear sky +'std_sdlwrfcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation potential evaporation rate +'std_pevr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } #Time-standard-deviation volumetric soil moisture 'std_vsw' = { discipline = 2 ; @@ -5652,6 +12752,200 @@ parameterNumber = 25 ; typeOfStatisticalProcessing = 6 ; } +#Time-standard-deviation snow depth water equivalent +'std_sd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation skin temperature +'std_skt' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snow density +'std_rsn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation sea ice area fraction +'std_ci' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation sea surface temperature +'std_sst' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column cloud liquid water +'std_tclw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column cloud ice water +'std_tciw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre specific humidity +'std_2sh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake mix-layer temperature +'std_lmlt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake mix-layer depth +'std_lmld' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation soil temperature +'std_sot' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wind speed +'std_ws' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation pressure +'std_pres' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation charnock +'std_chnk' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation potential vorticity +'std_pv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific rain water content +'std_crwc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific snow water content +'std_cswc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eta-coordinate vertical velocity +'std_etadot' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation visibility +'std_vis' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wind direction +'std_wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column snow water +'std_tcsw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation low cloud cover +'std_lcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation medium cloud cover +'std_mcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation high cloud cover +'std_hcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column rain water +'std_tcrw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } #Time-standard-deviation most-unstable CAPE 'std_mucape' = { discipline = 0 ; @@ -5671,6 +12965,1145 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 6 ; } +#Time-standard-deviation geopotential +'std_z' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature +'std_t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation u component of wind +'std_u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation v component of wind +'std_v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific humidity +'std_q' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface pressure +'std_sp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertical velocity +'std_w' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column water +'std_tcw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated water vapour +'std_tcwv' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vorticity (relative) +'std_vo' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean sea level pressure +'std_msl' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation logarithm of surface pressure +'std_lnsp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation divergence +'std_d' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation relative humidity +'std_r' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation boundary layer height +'std_blh' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre U wind component +'std_10u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre V wind component +'std_10v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre temperature +'std_2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre dewpoint temperature +'std_2d' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation sunshine +'std_suns' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation ozone mass mixing ratio +'std_o3' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind speed +'std_10si' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature of snow layer +'std_tsn' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation forecast surface roughness +'std_fsr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation forecast logarithm of surface roughness for heat +'std_flsr' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific cloud liquid water content +'std_clwc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific cloud ice water content +'std_ciwc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation fraction of cloud cover +'std_cc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation k index +'std_kx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total totals index +'std_totalx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind direction +'std_10wdir' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation clear air turbulence (CAT) +'std_cat' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation forecast albedo +'std_al' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation potential temperature +'std_pt' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation UV visible albedo for direct radiation (climatological) +'std_aluvp_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation UV visible albedo for diffuse radiation (climatological) +'std_aluvd_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation (climatological) +'std_alnip_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for diffuse radiation (climatological) +'std_alnid_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation snow albedo +'std_asn' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation montgomery potential +'std_mont' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective available potential energy +'std_cape' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total cloud cover +'std_tcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation skin reservoir content +'std_srcon' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column integrated ozone +'std_tcioz' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated kinetic energy +'std_vike' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated enthalpy +'std_vithe' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated potential + internal energy +'std_vipie' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertical integral of potential+internal+latent energy +'std_vipile' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated total energy +'std_vitoe' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated water enthalpy +'std_viwe' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation UV visible albedo for direct radiation, isotropic component (climatological) +'std_aluvpi_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation UV visible albedo for direct radiation, volumetric component (climatological) +'std_aluvpv_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation UV visible albedo for direct radiation, geometric component (climatological) +'std_aluvpg_p' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation, isotropic component (climatological) +'std_alnipi_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation, volumetric component (climatological) +'std_alnipv_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation, geometric component (climatological) +'std_alnipg_p' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation convective inhibition +'std_cin' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation friction velocity +'std_zust' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake bottom temperature +'std_lblt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake total layer temperature +'std_ltlt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake shape factor +'std_lshf' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake ice surface temperature +'std_lict' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake ice total depth +'std_licd' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation minimum vertical gradient of refractivity inside trapping layer +'std_dndzn' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean vertical gradient of refractivity inside trapping layer +'std_dndza' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation duct base height +'std_dctb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation trapping layer base height +'std_tplb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation trapping layer top height +'std_tplt' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation -10 degrees C isothermal level (atm) +'std_degm10l' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation cloud base height +'std_cbh' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 0 degrees C isothermal level (atm) +'std_deg0l' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind gust +'std_i10fg' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation relative humidity with respect to water +'std_rhw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre relative humidity with respect to water +'std_2rhw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective available potential energy shear +'std_capes' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation tropopause pressure +'std_trpp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation height of convective cloud top +'std_hcct' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation height of zero-degree wet-bulb temperature +'std_hwbt0' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation height of one-degree wet-bulb temperature +'std_hwbt1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total lightning flash density +'std_litoti' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column supercooled liquid water +'std_tcslw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre U-component of neutral wind +'std_u10n' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre V-component of neutral wind +'std_v10n' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective rain rate +'std_crr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large scale rain rate +'std_lsrr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CAPE in the lowest 50 hPa +'std_mlcape50' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CIN in the lowest 50 hPa +'std_mlcin50' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CAPE in the lowest 100 hPa +'std_mlcape100' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CIN in the lowest 100 hPa +'std_mlcin100' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation departure level of the most unstable parcel expressed as Pressure +'std_mudlp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation ceiling +'std_ceil' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column integrated saturation specific humidity with respect to water +'std_tcsqw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation direct solar radiation flux +'std_sdirnswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation freezing rain rate water equivalent +'std_fprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward geopotential flux +'std_vige' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward geopotential flux +'std_vign' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of water geopotential flux +'std_viwgd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of geopotential flux +'std_vigd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward enthalpy flux +'std_viee' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward enthalpy flux +'std_vien' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward kinetic energy flux +'std_vikee' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward kinetic energy flux +'std_viken' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward total energy flux +'std_vitee' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward total energy flux +'std_viten' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of enthalpy flux +'std_vied' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of kinetic energy flux +'std_viked' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of total energy flux +'std_vited' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of water enthalpy flux +'std_viwed' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of mass flux +'std_vimad' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward mass flux +'std_vimae' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward mass flux +'std_viman' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of water vapour flux +'std_viwvd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of cloud liquid water flux +'std_viclwd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of cloud ice water flux +'std_viciwd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of rain flux +'std_vird' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of snow flux +'std_visd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward water vapour flux +'std_viwve' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward water vapour flux +'std_viwvn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward cloud liquid water flux +'std_viclwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward cloud liquid water flux +'std_viclwn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward cloud ice water flux +'std_viciwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward cloud ice water flux +'std_viciwn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward rain flux +'std_vire' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward rain flux +'std_virn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward snow flux +'std_vise' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward snow flux +'std_visn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward ozone flux +'std_vioze' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward ozone flux +'std_viozn' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of ozone flux +'std_viozd' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated net source of ozone +'std_vions' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward turbulent surface stress due to orographic form drag +'std_ietssofd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward turbulent surface stress due to orographic form drag +'std_intssofd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward turbulent surface stress due to surface roughness +'std_ietsssr' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward turbulent surface stress due to surface roughness +'std_intsssr' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } #Cross sectional area of flow in channel 'chcross' = { discipline = 1 ; @@ -10318,6 +18751,27 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 1 ; } +#Time-maximum sea ice temperature +'max_sit' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum sea ice temperature +'min_sit' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation sea ice temperature +'std_sit' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 6 ; + } #Virtual temperature 'vtmp' = { discipline = 0 ; @@ -11634,8 +20088,8 @@ parameterCategory = 0 ; parameterNumber = 17 ; } -#Mean 2 metre temperature -'mean2t' = { +#Time-mean 2 metre temperature +'avg_2t' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; @@ -11644,8 +20098,8 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } -#Mean of 10 metre wind speed -'mean10ws' = { +#Time-mean 10 metre wind speed +'avg_10ws' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 1 ; diff --git a/definitions/grib2/shortName.legacy.def b/definitions/grib2/shortName.legacy.def index ffd6469d2..0ba485578 100644 --- a/definitions/grib2/shortName.legacy.def +++ b/definitions/grib2/shortName.legacy.def @@ -1,188 +1,249 @@ -#Volumetric soil moisture content -'soilw' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 9 ; - } -#Upper layer soil temperature -'uplst' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 1 ; - } -#Upper layer soil moisture -'uplsm' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 2 ; - } -#Lower layer soil moisture -'lowlsm' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 3 ; - } -#Bottom layer soil temperature -'botlst' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 4 ; - } -#Liquid volumetric soil moisture (non-frozen) -'soill' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 5 ; - } -#Transpiration stress-onset (soil moisture) -'smref' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 7 ; - } -#Direct evaporation cease (soil moisture) -'smdry' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 8 ; - } -#Soil porosity -'poros' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 9 ; - } +# Automatically generated by ./create_def.pl, do not edit #Instantaneous eastward turbulent surface stress 'iews' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 38 ; - typeOfFirstFixedSurface = 1 ; -} + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + } #Instantaneous northward turbulent surface stress 'inss' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 37 ; - typeOfFirstFixedSurface = 1 ; -} + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + } +#Minimum dew point depression +'mindpd' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + } +#Maximum relative humidity +'maxrh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 27 ; + } +#Maximum absolute humidity +'maxah' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 28 ; + } +#Maximum wind speed +'maxgust' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 21 ; + } +#Net long wave radiation flux (surface) +'nlwrs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 0 ; + } +#Net long wave radiation flux (top of atmosphere) +'nlwrt' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 1 ; + } +#Maximum snow albedo +'mxsalb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 17 ; + } +#Volumetric soil moisture content +'soilw' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Upper layer soil temperature +'uplst' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + } +#Upper layer soil moisture +'uplsm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + } +#Lower layer soil moisture +'lowlsm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 3 ; + } +#Bottom layer soil temperature +'botlst' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Liquid volumetric soil moisture (non-frozen) +'soill' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + } +#Transpiration stress-onset (soil moisture) +'smref' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 7 ; + } +#Direct evaporation cease (soil moisture) +'smdry' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 8 ; + } +#Soil porosity +'poros' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 9 ; + } #Evaporation in the last 6 hours 'eva06' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 79 ; - typeOfFirstFixedSurface = 1 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 6 ; -} + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 6 ; + } #Time-mean evapotranspiration rate in the last 24h 'avg_et24' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 39 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 39 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-integrated potential evapotranspiration rate in the last 24h 'acc_pet24' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 40 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 24 ; + } #Time-mean potential evapotranspiration rate in the last 24h 'avg_pet24' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 40 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-mean volumetric soil moisture 'avg_swv24' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 25 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-integrated water runoff and drainage rate in the last 24h 'acc_rod24' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 42 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 24 ; + } #Time-mean water runoff and drainage rate in the last 24h 'avg_rod24' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 42 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-mean snow depth water equivalent 'avg_sd24' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 60 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-mean skin temperature 'avg_skt24' = { - discipline = 0 ; - parameterCategory = 0 ; - parameterNumber = 17 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-integrated snow melt rate in the last 24h 'acc_smr24' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 41 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 24 ; + } #Upward sea water velocity 'wo' = { - discipline = 10 ; - parameterCategory = 4 ; - parameterNumber = 27 ; - typeOfFirstFixedSurface = 168 ; - typeOfSecondFixedSurface = 168 ; -} + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 168 ; + typeOfSecondFixedSurface = 168 ; + } #Time-mean upward sea water velocity 'avg_wo' = { - discipline = 10 ; - parameterCategory = 4 ; - parameterNumber = 27 ; - typeOfFirstFixedSurface = 168 ; - typeOfSecondFixedSurface = 168 ; - typeOfStatisticalProcessing = 0 ; -} -#Maximum individual wave height + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 168 ; + typeOfSecondFixedSurface = 168 ; + typeOfStatisticalProcessing = 0 ; + } +#Maximum temperature +'tmax' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Minimum temperature +'tmin' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Envelop-maximum individual wave height 'hmax' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 24 ; -} + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + } +#Soil moisture +'sm' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } #Soil temperature 'st' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 2 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 2 ; } diff --git a/definitions/grib2/templates/template.4.100.def b/definitions/grib2/templates/template.4.100.def index a52f903c2..4d17fe66a 100644 --- a/definitions/grib2/templates/template.4.100.def +++ b/definitions/grib2/templates/template.4.100.def @@ -7,6 +7,5 @@ include "grib2/templates/template.4.wave.def" include "grib2/templates/template.4.generating_process.def" include "grib2/templates/template.4.forecast_time.def" include "grib2/templates/template.4.point_in_time.def" -#include "grib2/templates/template.4.horizontal.def" include "grib2/templates/template.4.eps.def" include "grib2/templates/template.4.wave_spectra_list.def" diff --git a/definitions/grib2/templates/template.4.101.def b/definitions/grib2/templates/template.4.101.def index e81209c9d..335eabfb1 100644 --- a/definitions/grib2/templates/template.4.101.def +++ b/definitions/grib2/templates/template.4.101.def @@ -7,5 +7,4 @@ include "grib2/templates/template.4.wave.def" include "grib2/templates/template.4.generating_process.def" include "grib2/templates/template.4.forecast_time.def" include "grib2/templates/template.4.point_in_time.def" -#include "grib2/templates/template.4.horizontal.def" include "grib2/templates/template.4.wave_spectra_formula.def" diff --git a/definitions/grib2/templates/template.4.102.def b/definitions/grib2/templates/template.4.102.def index 49c182bc9..3cd1dcdeb 100644 --- a/definitions/grib2/templates/template.4.102.def +++ b/definitions/grib2/templates/template.4.102.def @@ -7,6 +7,5 @@ include "grib2/templates/template.4.wave.def" include "grib2/templates/template.4.generating_process.def" include "grib2/templates/template.4.forecast_time.def" include "grib2/templates/template.4.point_in_time.def" -#include "grib2/templates/template.4.horizontal.def" include "grib2/templates/template.4.eps.def" include "grib2/templates/template.4.wave_spectra_formula.def" diff --git a/definitions/grib2/templates/template.4.1101.def b/definitions/grib2/templates/template.4.1101.def index 2e0137083..c27de892c 100644 --- a/definitions/grib2/templates/template.4.1101.def +++ b/definitions/grib2/templates/template.4.1101.def @@ -25,4 +25,3 @@ codetable[1] indicatorOfUnitForTimeIncrement ('4.4.table',masterDir,localDir)=25 unsigned[4] timeIncrement=0 ; alias timeIncrementBetweenSuccessiveFields=timeIncrement; -# include "grib2/templates/template.4.statistical.def" diff --git a/definitions/grib2/templates/template.4.128.def b/definitions/grib2/templates/template.4.128.def new file mode 100644 index 000000000..0b99a0438 --- /dev/null +++ b/definitions/grib2/templates/template.4.128.def @@ -0,0 +1,10 @@ +# (C) Copyright 2005- ECMWF. + +# TEMPLATE 4.128, Anomalies significance and other derived products from an analysis or forecast in relation to a reference period at a horizontal level or in a horizontal layer at a point in time + +include "grib2/templates/template.4.parameter.def" +include "grib2/templates/template.4.generating_process.def" +include "grib2/templates/template.4.forecast_time.def" +include "grib2/templates/template.4.horizontal.def" +include "grib2/templates/template.4.point_in_time.def" +include "grib2/templates/template.4.referenceperiod.def" diff --git a/definitions/grib2/templates/template.4.129.def b/definitions/grib2/templates/template.4.129.def new file mode 100644 index 000000000..7f83c186b --- /dev/null +++ b/definitions/grib2/templates/template.4.129.def @@ -0,0 +1,11 @@ +# (C) Copyright 2005- ECMWF. + +# TEMPLATE 4.129, Anomalies significance and other derived products from an individual ensemble forecast, control and perturbed in relation to a reference period at a horizontal level or in a horizontal layer at a point in time + +include "grib2/templates/template.4.parameter.def" +include "grib2/templates/template.4.generating_process.def" +include "grib2/templates/template.4.forecast_time.def" +include "grib2/templates/template.4.horizontal.def" +include "grib2/templates/template.4.point_in_time.def" +include "grib2/templates/template.4.eps.def" +include "grib2/templates/template.4.referenceperiod.def" diff --git a/definitions/grib2/templates/template.4.130.def b/definitions/grib2/templates/template.4.130.def new file mode 100644 index 000000000..ab09d443d --- /dev/null +++ b/definitions/grib2/templates/template.4.130.def @@ -0,0 +1,11 @@ +# (C) Copyright 2005- ECMWF. + +# TEMPLATE 4.130, Anomalies significance and other derived products from derived forecasts based on all ensemble members in relation to a reference period at a horizontal level or in a horizontal layer at a point in time + +include "grib2/templates/template.4.parameter.def" +include "grib2/templates/template.4.generating_process.def" +include "grib2/templates/template.4.forecast_time.def" +include "grib2/templates/template.4.horizontal.def" +include "grib2/templates/template.4.point_in_time.def" +include "grib2/templates/template.4.derived.def" +include "grib2/templates/template.4.referenceperiod.def" diff --git a/definitions/grib2/templates/template.4.131.def b/definitions/grib2/templates/template.4.131.def new file mode 100644 index 000000000..56b91a684 --- /dev/null +++ b/definitions/grib2/templates/template.4.131.def @@ -0,0 +1,11 @@ +# (C) Copyright 2005- ECMWF. + +# TEMPLATE 4.131, Anomalies significance and other derived products as probability forecasts in relation to a reference period at a horizontal level or in a horizontal layer at a point in time + +include "grib2/templates/template.4.parameter.def" +include "grib2/templates/template.4.generating_process.def" +include "grib2/templates/template.4.forecast_time.def" +include "grib2/templates/template.4.horizontal.def" +include "grib2/templates/template.4.point_in_time.def" +include "grib2/templates/template.4.probability.def" +include "grib2/templates/template.4.referenceperiod.def" diff --git a/definitions/grib2/templates/template.4.132.def b/definitions/grib2/templates/template.4.132.def new file mode 100644 index 000000000..8931d93a7 --- /dev/null +++ b/definitions/grib2/templates/template.4.132.def @@ -0,0 +1,11 @@ +# (C) Copyright 2005- ECMWF. + +# TEMPLATE 4.132, Quantile forecasts of anomalies, significance and other derived products in relation to a reference period at a horizontal level or in a horizontal layer at a point in time + +include "grib2/templates/template.4.parameter.def" +include "grib2/templates/template.4.generating_process.def" +include "grib2/templates/template.4.forecast_time.def" +include "grib2/templates/template.4.point_in_time.def" +include "grib2/templates/template.4.horizontal.def" +include "grib2/templates/template.4.quantile.def" +include "grib2/templates/template.4.referenceperiod.def" diff --git a/definitions/grib2/templates/template.4.133.def b/definitions/grib2/templates/template.4.133.def new file mode 100644 index 000000000..4bb4cf9d8 --- /dev/null +++ b/definitions/grib2/templates/template.4.133.def @@ -0,0 +1,12 @@ +# (C) Copyright 2005- ECMWF. + +# TEMPLATE 4.133, Post-processed quantile forecasts of anomalies, significance and other derived products in relation to a reference period at a horizontal level or in a horizontal layer at a point in time + +include "grib2/templates/template.4.parameter.def" +include "grib2/templates/template.4.postproc.def" +include "grib2/templates/template.4.generating_process.def" +include "grib2/templates/template.4.forecast_time.def" +include "grib2/templates/template.4.point_in_time.def" +include "grib2/templates/template.4.horizontal.def" +include "grib2/templates/template.4.quantile.def" +include "grib2/templates/template.4.referenceperiod.def" diff --git a/definitions/grib2/templates/template.4.134.def b/definitions/grib2/templates/template.4.134.def new file mode 100644 index 000000000..9b6848d96 --- /dev/null +++ b/definitions/grib2/templates/template.4.134.def @@ -0,0 +1,11 @@ +# (C) Copyright 2005- ECMWF. + +# TEMPLATE 4.134, Quantile forecasts of anomalies, significance and other derived products in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "grib2/templates/template.4.parameter.def" +include "grib2/templates/template.4.generating_process.def" +include "grib2/templates/template.4.forecast_time.def" +include "grib2/templates/template.4.horizontal.def" +include "grib2/templates/template.4.quantile.def" +include "grib2/templates/template.4.statistical.def" +include "grib2/templates/template.4.referenceperiod.def" diff --git a/definitions/grib2/templates/template.4.135.def b/definitions/grib2/templates/template.4.135.def new file mode 100644 index 000000000..8e952e9e3 --- /dev/null +++ b/definitions/grib2/templates/template.4.135.def @@ -0,0 +1,13 @@ +# (C) Copyright 2005- ECMWF. + +# TEMPLATE 4.135, Post-processed quantile forecasts of anomalies, significance and other derived products in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "grib2/templates/template.4.parameter.def" +include "grib2/templates/template.4.postproc.def" +include "grib2/templates/template.4.generating_process.def" +include "grib2/templates/template.4.forecast_time.def" +include "grib2/templates/template.4.horizontal.def" +include "grib2/templates/template.4.quantile.def" +include "grib2/templates/template.4.statistical.def" +include "grib2/templates/template.4.referenceperiod.def" + diff --git a/definitions/grib2/templates/template.4.136.def b/definitions/grib2/templates/template.4.136.def new file mode 100644 index 000000000..f056ae6ed --- /dev/null +++ b/definitions/grib2/templates/template.4.136.def @@ -0,0 +1,11 @@ +# (C) Copyright 2005- ECMWF. + +# TEMPLATE 4.136, Probability forecasts of anomalies, significance and other derived products in relation to a reference period with spatiotemporal processing based on focal (moving window) statistics in relation to a reference period at a horizontal level or in at a point in time + +include "grib2/templates/template.4.parameter.def" +include "grib2/templates/template.4.generating_process.def" +include "grib2/templates/template.4.forecast_time.def" +include "grib2/templates/template.4.horizontal.def" +include "grib2/templates/template.4.probabilityLargeEnsemble.def" +include "grib2/templates/template.4.referenceperiod.def" +include "grib2/templates/template.4.focalStatistics.def" diff --git a/definitions/grib2/templates/template.4.generalised_tile.def b/definitions/grib2/templates/template.4.generalised_tile.def index e10f491c2..5eb4be333 100644 --- a/definitions/grib2/templates/template.4.generalised_tile.def +++ b/definitions/grib2/templates/template.4.generalised_tile.def @@ -40,6 +40,7 @@ alias nTileAtt=numberOfUsedTileAttributesForTileAttributeCombination; alias tile.nTileAtt=nTileAtt; alias mars.tile=typeOfTile; -alias mars.tileAttribute=tileAttribute; -transient paramtype = "tile"; -alias mars.paramType=paramtype; +alias mars.tileattribute=tileAttribute; +constant paramTypeTile = "tile"; +unalias mars.paramtype; +alias mars.paramtype=paramTypeTile; diff --git a/definitions/grib2/templates/template.4.horizontal.def b/definitions/grib2/templates/template.4.horizontal.def index 4702e0319..393f10f2f 100644 --- a/definitions/grib2/templates/template.4.horizontal.def +++ b/definitions/grib2/templates/template.4.horizontal.def @@ -64,11 +64,15 @@ if (extraDim) { alias mars.levelist = dimension; alias mars.levtype = dimensionType; } else { + # ECC-1333: levtype should be read-only in GRIB2 + concept mars.levtype(unknown,"marsLevtypeConcept.def",conceptsDir2,conceptsDir1):no_copy, read_only; + # GRIB-372: levelist alias does not pertain to surface parameters + transient tempLevtype = levtype; # Faster to copy the concept so we evaluate it once # See GRIB-74 why we store the pressureUnits in a transient transient tempPressureUnits=pressureUnits; # Same as typeOfLevel != "surface" but much quicker to evaluate # than via the concept - if ( ! (typeOfFirstFixedSurface == 1 && typeOfSecondFixedSurface == 255) ) { + if ( ! ((typeOfFirstFixedSurface == 1 && typeOfSecondFixedSurface == 255) || tempLevtype is "sfc" || tempLevtype is "o2d")) { if (tempPressureUnits is "Pa") { meta marsLevel scale(level,one,hundred) : read_only; alias mars.levelist=marsLevel; @@ -76,13 +80,6 @@ if (extraDim) { alias mars.levelist = level; } } - # ECC-1333: levtype should be read-only in GRIB2 - concept mars.levtype(unknown,"marsLevtypeConcept.def",conceptsDir2,conceptsDir1):no_copy, read_only; - # GRIB-372: levelist alias does not pertain to surface parameters - transient tempLevtype = levtype; # Faster to copy the concept so we evaluate it once - if (tempLevtype is "sfc" || tempLevtype is "o2d") { - unalias mars.levelist; - } } # See ECC-854, ECC-1435, ECC-1451, ECC-1462 diff --git a/definitions/grib2/templates/template.4.statistical.def b/definitions/grib2/templates/template.4.statistical.def index a98b8f212..fde76eba3 100644 --- a/definitions/grib2/templates/template.4.statistical.def +++ b/definitions/grib2/templates/template.4.statistical.def @@ -54,12 +54,9 @@ statisticalProcessesList list(numberOfTimeRanges) if (numberOfTimeRanges == 1 || numberOfTimeRanges == 2) { concept stepTypeInternal { "instant" = {typeOfStatisticalProcessing=255;} - "avg" = {typeOfStatisticalProcessing=0;typeOfTimeIncrement=255;} - "avg" = {typeOfStatisticalProcessing=0;typeOfTimeIncrement=2;} - "avg" = {typeOfStatisticalProcessing=0;typeOfTimeIncrement=3;} + "avg" = {typeOfStatisticalProcessing=0;} "avgd" = {typeOfStatisticalProcessing=0;typeOfTimeIncrement=1;} - "accum" = {typeOfStatisticalProcessing=1;typeOfTimeIncrement=255;} - "accum" = {typeOfStatisticalProcessing=1;typeOfTimeIncrement=2;} + "accum" = {typeOfStatisticalProcessing=1;} "max" = {typeOfStatisticalProcessing=2;} "min" = {typeOfStatisticalProcessing=3;} "diff" = {typeOfStatisticalProcessing=4;} # end-start diff --git a/definitions/grib2/typeOfLevelConcept.def b/definitions/grib2/typeOfLevelConcept.def index 2f350d663..aaea705ad 100644 --- a/definitions/grib2/typeOfLevelConcept.def +++ b/definitions/grib2/typeOfLevelConcept.def @@ -20,6 +20,7 @@ 'neutralBuoyancy' = {typeOfFirstFixedSurface=16; typeOfSecondFixedSurface=255;} 'mostUnstableParcel' = {typeOfFirstFixedSurface=17; typeOfSecondFixedSurface=255;} 'mixedLayerParcel' = {typeOfFirstFixedSurface=18; typeOfSecondFixedSurface=255;} +'lowestLevelOfCloudCoverExceedance' = {typeOfFirstFixedSurface=19; typeOfSecondFixedSurface=255;} 'isothermal' = {typeOfFirstFixedSurface=20; typeOfSecondFixedSurface=255;} 'isobaricInPa' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=255; pressureUnits='Pa';} 'isobaricInhPa' = {typeOfFirstFixedSurface=100; pressureUnits='hPa'; typeOfSecondFixedSurface=255;} @@ -97,4 +98,4 @@ 'road' = {typeOfFirstFixedSurface=187; typeOfSecondFixedSurface=255;} 'roadLayer' = {typeOfFirstFixedSurface=187; typeOfSecondFixedSurface=187;} 'urbanCanyon' = {typeOfFirstFixedSurface=187; typeOfSecondFixedSurface=185;} -'unknown' = {dummy=0;} +'unknown' = {dummyc=1;} diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 535b1caae..869214681 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -1305,6 +1305,372 @@ parameterCategory = 0 ; parameterNumber = 84 ; } +#Time-mean wave induced mean sea level correction +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean ratio of wave angular and frequency width +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean number of events in freak waves statistics +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U-component of atmospheric surface momentum flux +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V-component of atmospheric surface momentum flux +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U-component of surface momentum flux into ocean +'N m**-2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V-component of surface momentum flux into ocean +'N m**-2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave turbulent energy flux into ocean +'W m**-2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave directional width of first swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave frequency width of first swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave directional width of second swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave frequency width of second swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave directional width of third swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave frequency width of third swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave energy flux magnitude +'W m**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave energy flux mean direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-mean significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-mean significant wave height of all waves with period larger than 10s +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-mean significant wave height of first swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave direction of first swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period of first swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant wave height of second swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave direction of second swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period of second swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant wave height of third swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave direction of third swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period of third swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean time domain maximum individual crest height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean time domain maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean space time maximum individual crest height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean space time maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave Spectral Skewness +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean free convective velocity over the oceans +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean air density over the oceans +'kg m**-3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean normalized energy flux into waves +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean normalized energy flux into ocean +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean normalized stress into ocean +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U-component surface stokes drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V-component surface stokes drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean period corresponding to maximum individual wave height +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean envelop-maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on first moment +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean mean zero-crossing wave period 's' = { discipline = 10 ; @@ -1312,6 +1678,55 @@ parameterNumber = 28 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean wave spectral directional width +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on first moment for wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on second moment for wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral directional width for wind waves +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on first moment for swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period based on second moment for swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral directional width for swell +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean significant height of combined wind waves and swell 'm' = { discipline = 10 ; @@ -1319,6 +1734,13 @@ parameterNumber = 3 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean mean wave direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean peak wave period 's' = { discipline = 10 ; @@ -1333,6 +1755,1772 @@ parameterNumber = 15 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean coefficient of drag with waves +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant height of wind waves +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean direction of wind waves +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean period of wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant height of total swell +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean direction of total swell +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean period of total swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean square slope of waves +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre wind speed +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre wind direction +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 2D wave spectra (single) +'m**2 s radian**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral kurtosis +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean benjamin-Feir index +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wave spectral peakedness +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-maximum wave induced mean sea level correction +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum ratio of wave angular and frequency width +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum number of events in freak waves statistics +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum U-component of atmospheric surface momentum flux +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum V-component of atmospheric surface momentum flux +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum U-component of surface momentum flux into ocean +'N m**-2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum V-component of surface momentum flux into ocean +'N m**-2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave turbulent energy flux into ocean +'W m**-2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave directional width of first swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave frequency width of first swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave directional width of second swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave frequency width of second swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave directional width of third swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave frequency width of third swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave energy flux magnitude +'W m**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave energy flux mean direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-maximum significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-maximum significant wave height of all waves with period larger than 10s +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-maximum significant wave height of first swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction of first swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period of first swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant wave height of second swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction of second swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period of second swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant wave height of third swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction of third swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period of third swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum time domain maximum individual crest height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum time domain maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum space time maximum individual crest height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum space time maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave Spectral Skewness +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum free convective velocity over the oceans +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum air density over the oceans +'kg m**-3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum normalized energy flux into waves +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum normalized energy flux into ocean +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum normalized stress into ocean +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum U-component surface stokes drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum V-component surface stokes drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum period corresponding to maximum individual wave height +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum envelop-maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on first moment +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean zero-crossing wave period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral directional width +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on first moment for wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on second moment for wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral directional width for wind waves +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on first moment for swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period based on second moment for swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral directional width for swell +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant height of combined wind waves and swell +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum peak wave period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean wave period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum coefficient of drag with waves +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant height of wind waves +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean direction of wind waves +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean period of wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum significant height of total swell +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean direction of total swell +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean period of total swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean square slope of waves +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind speed +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind direction +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2D wave spectra (single) +'m**2 s radian**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral kurtosis +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum benjamin-Feir index +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wave spectral peakedness +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum wave induced mean sea level correction +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum ratio of wave angular and frequency width +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum number of events in freak waves statistics +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum U-component of atmospheric surface momentum flux +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum V-component of atmospheric surface momentum flux +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum U-component of surface momentum flux into ocean +'N m**-2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum V-component of surface momentum flux into ocean +'N m**-2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave turbulent energy flux into ocean +'W m**-2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave directional width of first swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave frequency width of first swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave directional width of second swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave frequency width of second swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave directional width of third swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave frequency width of third swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave energy flux magnitude +'W m**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave energy flux mean direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-minimum significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-minimum significant wave height of all waves with period larger than 10s +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-minimum significant wave height of first swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction of first swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period of first swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant wave height of second swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction of second swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period of second swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant wave height of third swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction of third swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period of third swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum time domain maximum individual crest height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum time domain maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum space time maximum individual crest height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum space time maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave Spectral Skewness +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum free convective velocity over the oceans +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum air density over the oceans +'kg m**-3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum normalized energy flux into waves +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum normalized energy flux into ocean +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum normalized stress into ocean +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum U-component surface stokes drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum V-component surface stokes drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum period corresponding to maximum individual wave height +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum envelop-maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on first moment +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean zero-crossing wave period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral directional width +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on first moment for wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on second moment for wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral directional width for wind waves +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on first moment for swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period based on second moment for swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral directional width for swell +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant height of combined wind waves and swell +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum peak wave period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean wave period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum coefficient of drag with waves +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant height of wind waves +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean direction of wind waves +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean period of wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum significant height of total swell +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean direction of total swell +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean period of total swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean square slope of waves +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind speed +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind direction +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2D wave spectra (single) +'m**2 s radian**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral kurtosis +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum benjamin-Feir index +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wave spectral peakedness +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation wave induced mean sea level correction +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 87 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation ratio of wave angular and frequency width +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 80 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation number of events in freak waves statistics +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 89 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation U-component of atmospheric surface momentum flux +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation V-component of atmospheric surface momentum flux +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation U-component of surface momentum flux into ocean +'N m**-2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 90 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation V-component of surface momentum flux into ocean +'N m**-2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 91 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave turbulent energy flux into ocean +'W m**-2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 92 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave directional width of first swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave frequency width of first swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave directional width of second swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave frequency width of second swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave directional width of third swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave frequency width of third swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave energy flux magnitude +'W m**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 78 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave energy flux mean direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Time-standard-deviation significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Time-standard-deviation significant wave height of all waves with period larger than 10s +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfWavePeriodInterval = 3 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + } +#Time-standard-deviation significant wave height of first swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction of first swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period of first swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant wave height of second swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction of second swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period of second swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant wave height of third swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction of third swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period of third swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation time domain maximum individual crest height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 94 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation time domain maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 95 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation space time maximum individual crest height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 96 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation space time maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 97 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave Spectral Skewness +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 77 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation free convective velocity over the oceans +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 81 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation air density over the oceans +'kg m**-3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 82 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation normalized energy flux into waves +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation normalized energy flux into ocean +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation normalized stress into ocean +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation U-component surface stokes drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation V-component surface stokes drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation period corresponding to maximum individual wave height +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation envelop-maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on first moment +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean zero-crossing wave period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral directional width +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on first moment for wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on second moment for wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral directional width for wind waves +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on first moment for swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period based on second moment for swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral directional width for swell +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant height of combined wind waves and swell +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation peak wave period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean wave period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation coefficient of drag with waves +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant height of wind waves +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean direction of wind waves +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 75 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean period of wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation significant height of total swell +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean direction of total swell +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 74 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean period of total swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean square slope of waves +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind speed +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind direction +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2D wave spectra (single) +'m**2 s radian**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral kurtosis +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation benjamin-Feir index +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wave spectral peakedness +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 98 ; + typeOfStatisticalProcessing = 6 ; + } #Mean sea water temperature in the upper 300 m 'K' = { discipline = 10 ; @@ -4079,6 +6267,27 @@ parameterNumber = 148 ; typeOfFirstFixedSurface = 1 ; } +#Radar reflectivity +'dB' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 4 ; + } +#Pressure at cloud ceiling +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 19 ; + scaledValueOfFirstFixedSurface = 50 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Visibility through precipitation +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + } #Burned area '%' = { discipline = 2 ; @@ -4463,98 +6672,98 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 1 ; } -#Mean temperature tendency due to short-wave radiation +#Time-mean temperature tendency due to short-wave radiation 'K s**-1' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 22 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to long-wave radiation +#Time-mean temperature tendency due to long-wave radiation 'K s**-1' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 23 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to short-wave radiation, clear sky +#Time-mean temperature tendency due to short wave radiation, clear sky 'K s**-1' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 24 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to long-wave radiation, clear sky +#Time-mean temperature tendency due to long-wave radiation, clear sky 'K s**-1' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 25 ; typeOfStatisticalProcessing = 0 ; } -#Mean temperature tendency due to parametrisations +#Time-mean temperature tendency due to parametrisations 'K s**-1' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 26 ; typeOfStatisticalProcessing = 0 ; } -#Mean specific humidity tendency due to parametrisations +#Time-mean specific humidity tendency due to parametrisations 'kg kg**-1 s**-1' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 108 ; typeOfStatisticalProcessing = 0 ; } -#Mean eastward wind tendency due to parametrisations +#Time-mean eastward wind tendency due to parametrisations 'm s**-2' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 39 ; typeOfStatisticalProcessing = 0 ; } -#Mean northward wind tendency due to parametrisations +#Time-mean northward wind tendency due to parametrisations 'm s**-2' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 40 ; typeOfStatisticalProcessing = 0 ; } -#Mean updraught mass flux +#Time-mean updraught mass flux 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 27 ; typeOfStatisticalProcessing = 0 ; } -#Mean downdraught mass flux +#Time-mean downdraught mass flux 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 28 ; typeOfStatisticalProcessing = 0 ; } -#Mean updraught detrainment rate +#Time-mean updraught detrainment rate 'kg m**-3 s**-1' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 29 ; typeOfStatisticalProcessing = 0 ; } -#Mean downdraught detrainment rate +#Time-mean downdraught detrainment rate 'kg m**-3 s**-1' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 30 ; typeOfStatisticalProcessing = 0 ; } -#Mean total precipitation flux +#Time-mean total precipitation flux 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; typeOfStatisticalProcessing = 0 ; } -#Mean turbulent diffusion coefficient for heat +#Time-mean turbulent diffusion coefficient for heat 'm**2 s**-1' = { discipline = 0 ; parameterCategory = 0 ; @@ -4597,7 +6806,7 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Mean surface runoff rate +#Time-mean surface runoff rate 'kg m**-2 s**-1' = { discipline = 2 ; parameterCategory = 0 ; @@ -4605,7 +6814,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean sub-surface runoff rate +#Time-mean sub-surface runoff rate 'kg m**-2 s**-1' = { discipline = 2 ; parameterCategory = 0 ; @@ -4613,7 +6822,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface photosynthetically active radiation flux, clear sky +#Time-mean surface photosynthetically active radiation flux, clear sky 'W m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -4621,7 +6830,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean snow evaporation rate +#Time-mean snow evaporation rate water equivalent 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; @@ -4629,7 +6838,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean snowmelt rate +#Time-mean snow melt rate 'kg m**-2 s**-1' = { discipline = 2 ; parameterCategory = 0 ; @@ -4637,7 +6846,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean magnitude of turbulent surface stress +#Time-mean magnitude of turbulent surface stress 'N m**-2' = { discipline = 0 ; parameterCategory = 2 ; @@ -4645,7 +6854,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean large-scale precipitation fraction +#Time-mean large-scale precipitation fraction 'Proportion' = { discipline = 0 ; parameterCategory = 6 ; @@ -4653,7 +6862,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward UV radiation flux +#Time-mean surface downward UV radiation flux 'W m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -4661,7 +6870,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface photosynthetically active radiation flux +#Time-mean surface photosynthetically active radiation flux 'W m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -4669,7 +6878,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean large-scale precipitation rate +#Time-mean large-scale precipitation rate 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; @@ -4677,7 +6886,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean convective precipitation rate +#Time-mean convective precipitation rate 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; @@ -4685,7 +6894,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean snowfall rate +#Time-mean total snowfall rate water equivalent 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; @@ -4693,14 +6902,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean boundary layer dissipation +#Time-mean boundary layer dissipation 'W m**-2' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 20 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface sensible heat flux +#Time-mean surface sensible heat flux 'W m**-2' = { discipline = 0 ; parameterCategory = 0 ; @@ -4708,7 +6917,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface latent heat flux +#Time-mean surface latent heat flux 'W m**-2' = { discipline = 0 ; parameterCategory = 0 ; @@ -4716,7 +6925,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward short-wave radiation flux +#Time-mean surface downward short-wave radiation flux 'W m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -4724,7 +6933,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward long-wave radiation flux +#Time-mean surface downward long-wave radiation flux 'W m**-2' = { discipline = 0 ; parameterCategory = 5 ; @@ -4732,7 +6941,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net short-wave radiation flux +#Time-mean surface net short-wave radiation flux 'W m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -4740,7 +6949,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net long-wave radiation flux +#Time-mean surface net long-wave radiation flux 'W m**-2' = { discipline = 0 ; parameterCategory = 5 ; @@ -4748,7 +6957,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net short-wave radiation flux +#Time-mean top net short-wave radiation flux 'W m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -4756,7 +6965,7 @@ typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net long-wave radiation flux +#Time-mean top net long-wave radiation flux 'W m**-2' = { discipline = 0 ; parameterCategory = 5 ; @@ -4764,7 +6973,7 @@ typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean eastward turbulent surface stress +#Time-mean eastward turbulent surface stress 'N m**-2' = { discipline = 0 ; parameterCategory = 2 ; @@ -4772,7 +6981,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean northward turbulent surface stress +#Time-mean northward turbulent surface stress 'N m**-2' = { discipline = 0 ; parameterCategory = 2 ; @@ -4780,7 +6989,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean evaporation rate +#Time-mean moisture flux 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; @@ -4788,14 +6997,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Sunshine duration fraction +#Time-mean sunshine duration fraction 'Proportion' = { discipline = 0 ; parameterCategory = 6 ; parameterNumber = 51 ; typeOfFirstFixedSurface = 1 ; } -#Mean eastward gravity wave surface stress +#Time-mean eastward gravity wave surface stress 'N m**-2' = { discipline = 0 ; parameterCategory = 3 ; @@ -4803,7 +7012,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean northward gravity wave surface stress +#Time-mean northward gravity wave surface stress 'N m**-2' = { discipline = 0 ; parameterCategory = 3 ; @@ -4811,21 +7020,21 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean gravity wave dissipation +#Time-mean gravity wave dissipation 'W m**-2' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 23 ; typeOfStatisticalProcessing = 0 ; } -#Mean runoff rate +#Time-mean runoff rate water equivalent (surface plus subsurface) 'kg m**-2 s**-1' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 42 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net short-wave radiation flux, clear sky +#Time-mean top net short-wave radiation flux, clear sky 'W m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -4833,7 +7042,7 @@ typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean top net long-wave radiation flux, clear sky +#Time-mean top net long-wave radiation flux, clear sky 'W m**-2' = { discipline = 0 ; parameterCategory = 5 ; @@ -4841,7 +7050,7 @@ typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net short-wave radiation flux, clear sky +#Time-mean surface net short-wave radiation flux, clear sky 'W m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -4849,7 +7058,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface net long-wave radiation flux, clear sky +#Time-mean surface net long-wave radiation flux, clear sky 'W m**-2' = { discipline = 0 ; parameterCategory = 5 ; @@ -4857,7 +7066,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean top downward short-wave radiation flux +#Time mean top downward short-wave radiation flux 'W m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -4865,14 +7074,14 @@ typeOfFirstFixedSurface = 8 ; typeOfStatisticalProcessing = 0 ; } -#Mean vertically integrated moisture divergence +#Time-mean total column vertically-integrated moisture divergence flux 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; typeOfStatisticalProcessing = 0 ; } -#Mean total precipitation rate +#Time-mean total precipitation rate 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; @@ -4880,7 +7089,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean convective snowfall rate +#Time-mean convective snowfall rate water equivalent 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; @@ -4888,7 +7097,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean large-scale snowfall rate +#Time-mean large scale snowfall rate water equivalent 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; @@ -4896,7 +7105,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface direct short-wave radiation flux +#Time-mean surface direct short-wave radiation flux 'W m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -4904,7 +7113,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface direct short-wave radiation flux, clear sky +#Time-mean surface direct short-wave radiation flux, clear sky 'W m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -4912,7 +7121,15 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward short-wave radiation flux, clear sky +#Mean surface diffuse short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean surface downward short-wave radiation flux, clear sky 'W m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -4920,7 +7137,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean surface downward long-wave radiation flux, clear sky +#Time-mean surface downward long-wave radiation flux, clear sky 'W m**-2' = { discipline = 0 ; parameterCategory = 5 ; @@ -4928,7 +7145,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } -#Mean potential evaporation rate +#Time-mean potential evaporation rate 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; @@ -4954,7 +7171,7 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Time-mean evapotranspiration flux +#Time-mean evapotranspiration rate 'kg m**-2 s**-1' = { discipline = 2 ; parameterCategory = 0 ; @@ -5136,6 +7353,13 @@ parameterNumber = 0 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean charnock +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean potential vorticity 'K m**2 kg**-1 s**-1' = { discipline = 0 ; @@ -5164,6 +7388,59 @@ parameterNumber = 32 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean visibility +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean wind direction +'Degree true' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column snow water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column rain water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean soil moisture top 20 cm 'kg m**-3' = { discipline = 2 ; @@ -5411,6 +7688,14 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean sunshine +'Numeric' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean ozone mass mixing ratio 'kg kg**-1' = { discipline = 0 ; @@ -5476,6 +7761,16 @@ parameterNumber = 4 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean 10 metre wind direction +'Degree true' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean clear air turbulence (CAT) 'm**2/3 s**-1' = { discipline = 0 ; @@ -5483,6 +7778,20 @@ parameterNumber = 29 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean forecast albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean potential temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean discharge from rivers or streams 'm**3 s**-1' = { discipline = 1 ; @@ -5566,6 +7875,1300 @@ parameterNumber = 23 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean UV visible albedo for direct radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean UV visible albedo for diffuse radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for diffuse radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean snow albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean montgomery potential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean convective available potential energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean skin reservoir content +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column integrated ozone +'DU' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated kinetic energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated enthalpy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated potential + internal energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated potential+internal+latent energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated total energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated water enthalpy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean UV visible albedo for direct radiation, isotropic component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean UV visible albedo for direct radiation, volumetric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean UV visible albedo for direct radiation, geometric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation, isotropic component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation, volumetric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean near IR albedo for direct radiation, geometric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Time-mean convective inhibition +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean friction velocity +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake bottom temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake total layer temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake shape factor +'dimensionless' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake ice surface temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake ice total depth +'m' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean minimum vertical gradient of refractivity inside trapping layer +'m**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean vertical gradient of refractivity inside trapping layer +'m**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean duct base height +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean trapping layer base height +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean trapping layer top height +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean -10 degrees C isothermal level (atm) +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean cloud base height +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 0 degrees C isothermal level (atm) +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre wind gust +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean relative humidity with respect to water +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 2 metre relative humidity with respect to water +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean convective available potential energy shear +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean tropopause pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean height of convective cloud top +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean height of zero-degree wet-bulb temperature +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean height of one-degree wet-bulb temperature +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column supercooled liquid water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre U-component of neutral wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre V-component of neutral wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean convective rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean large scale rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CAPE in the lowest 50 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CIN in the lowest 50 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CAPE in the lowest 100 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mixed-layer CIN in the lowest 100 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean departure level of the most unstable parcel expressed as Pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean ceiling +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column integrated saturation specific humidity with respect to water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean surface direct normal short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean freezing rain precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward geopotential flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward geopotential flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of water geopotential flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of geopotential flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward enthalpy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward enthalpy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward kinetic energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward kinetic energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward total energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward total energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of enthalpy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of kinetic energy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of total energy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of water enthalpy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of mass flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward mass flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward mass flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of water vapour flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of cloud liquid water flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of cloud ice water flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of rain flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of snow flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward water vapour flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward water vapour flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward cloud liquid water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward cloud liquid water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward cloud ice water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward cloud ice water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward rain flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward rain flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward snow flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward snow flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated eastward ozone flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated northward ozone flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated divergence of ozone flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated net source of ozone +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean eastward turbulent surface stress due to orographic form drag +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean northward turbulent surface stress due to orographic form drag +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean eastward turbulent surface stress due to surface roughness +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean northward turbulent surface stress due to surface roughness +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean visibility through precipitation +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-maximum temperature tendency due to short-wave radiation +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to long-wave radiation +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to short wave radiation, clear sky +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to long-wave radiation, clear sky +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature tendency due to parametrisations +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific humidity tendency due to parametrisations +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward wind tendency due to parametrisations +'m s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward wind tendency due to parametrisations +'m s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum updraught mass flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum downdraught mass flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum updraught detrainment rate +'kg m**-3 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum downdraught detrainment rate +'kg m**-3 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total precipitation flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum turbulent diffusion coefficient for heat +'m**2 s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface photosynthetically active radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum snow evaporation rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum snow melt rate +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum magnitude of turbulent surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large-scale precipitation fraction +'Proportion' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward UV radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface photosynthetically active radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large-scale precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum convective precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum boundary layer dissipation +'W m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface sensible heat flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface latent heat flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward turbulent surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 62 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward turbulent surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 63 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum moisture flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward gravity wave surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward gravity wave surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum gravity wave dissipation +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum runoff rate water equivalent (surface plus subsurface) +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum top net long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface net long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time mean top downward short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated moisture divergence flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum convective snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large scale snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface direct short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface direct short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum carbon dioxide net ecosystem exchange flux +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum carbon dioxide gross primary production flux +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum carbon dioxide ecosystem respiration flux +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface downward long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum potential evaporation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum volumetric soil moisture 'm**3 m**-3' = { discipline = 2 ; @@ -5573,6 +9176,91 @@ parameterNumber = 25 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum snow depth water equivalent +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum skin temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum snow density +'kg m**-3' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum sea ice area fraction +'(0 - 1)' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum sea surface temperature +'K' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column cloud liquid water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column cloud ice water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre specific humidity +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake mix-layer temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake mix-layer depth +'m' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum 2 metre relative humidity '%' = { discipline = 0 ; @@ -5583,6 +9271,115 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum soil temperature +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wind speed +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum charnock +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum potential vorticity +'K m**2 kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific rain water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific snow water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eta-coordinate vertical velocity +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum visibility +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum wind direction +'Degree true' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column snow water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum low cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum medium cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum high cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column rain water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } #Time-maximum most-unstable CAPE 'J kg**-1' = { discipline = 0 ; @@ -5602,6 +9399,1546 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 2 ; } +#Time-maximum geopotential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum u component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum v component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific humidity +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum vertical velocity +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated water vapour +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum vorticity (relative) +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean sea level pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum logarithm of surface pressure +'Numeric' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum divergence +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum relative humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum boundary layer height +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre U wind component +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre V wind component +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre dewpoint temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum sunshine +'Numeric' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum ozone mass mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind speed +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum temperature of snow layer +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum forecast surface roughness +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum forecast logarithm of surface roughness for heat +'Numeric' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific cloud liquid water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum specific cloud ice water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum fraction of cloud cover +'(0 - 1)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum k index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total totals index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre wind direction +'Degree true' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum clear air turbulence (CAT) +'m**2/3 s**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum forecast albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum potential temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum UV visible albedo for direct radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum UV visible albedo for diffuse radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for diffuse radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum snow albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum montgomery potential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum skin reservoir content +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column integrated ozone +'DU' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated kinetic energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated enthalpy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated potential + internal energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated potential+internal+latent energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated total energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated water enthalpy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum UV visible albedo for direct radiation, isotropic component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum UV visible albedo for direct radiation, volumetric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum UV visible albedo for direct radiation, geometric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation, isotropic component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation, volumetric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum near IR albedo for direct radiation, geometric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 2 ; + typeOfGeneratingProcess = 9 ; + } +#Time-maximum convective inhibition +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum friction velocity +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake bottom temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake total layer temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake shape factor +'dimensionless' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake ice surface temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum lake ice total depth +'m' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum minimum vertical gradient of refractivity inside trapping layer +'m**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mean vertical gradient of refractivity inside trapping layer +'m**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum duct base height +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum trapping layer base height +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum trapping layer top height +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum -10 degrees C isothermal level (atm) +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum cloud base height +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 0 degrees C isothermal level (atm) +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum relative humidity with respect to water +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 2 metre relative humidity with respect to water +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum tropopause pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum height of convective cloud top +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum height of zero-degree wet-bulb temperature +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum height of one-degree wet-bulb temperature +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total lightning flash density +'km**-2 day**-1' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column supercooled liquid water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre U-component of neutral wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum 10 metre V-component of neutral wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum convective rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum large scale rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CAPE in the lowest 50 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CIN in the lowest 50 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CAPE in the lowest 100 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum mixed-layer CIN in the lowest 100 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum departure level of the most unstable parcel expressed as Pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum ceiling +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column integrated saturation specific humidity with respect to water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum surface direct normal short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum freezing rain precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward geopotential flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward geopotential flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of water geopotential flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of geopotential flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward enthalpy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward enthalpy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward kinetic energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward kinetic energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward total energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward total energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of enthalpy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of kinetic energy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of total energy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of water enthalpy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of mass flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward mass flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward mass flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of water vapour flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of cloud liquid water flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of cloud ice water flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of rain flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of snow flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward water vapour flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward water vapour flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward cloud liquid water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward cloud liquid water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward cloud ice water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward cloud ice water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward rain flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward rain flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward snow flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward snow flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated eastward ozone flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated northward ozone flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated divergence of ozone flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum total column vertically-integrated net source of ozone +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward turbulent surface stress due to orographic form drag +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward turbulent surface stress due to orographic form drag +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum eastward turbulent surface stress due to surface roughness +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum northward turbulent surface stress due to surface roughness +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-maximum visibility through precipitation +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum temperature tendency due to short-wave radiation +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to long-wave radiation +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to short wave radiation, clear sky +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to long-wave radiation, clear sky +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature tendency due to parametrisations +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific humidity tendency due to parametrisations +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward wind tendency due to parametrisations +'m s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward wind tendency due to parametrisations +'m s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum updraught mass flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum downdraught mass flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum updraught detrainment rate +'kg m**-3 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum downdraught detrainment rate +'kg m**-3 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total precipitation flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum turbulent diffusion coefficient for heat +'m**2 s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface photosynthetically active radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snow evaporation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snowmelt rate +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum magnitude of turbulent surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large-scale precipitation fraction +'Proportion' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward UV radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface photosynthetically active radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large-scale precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snowfall rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum boundary layer dissipation +'W m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface sensible heat flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface latent heat flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward turbulent surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 62 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward turbulent surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 63 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum evaporation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward gravity wave surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward gravity wave surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum gravity wave dissipation +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum runoff rate +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top net long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface net long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum top downward short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated moisture divergence +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large scale snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface direct short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface direct short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum carbon dioxide net ecosystem exchange flux +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum carbon dioxide gross primary production flux +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum carbon dioxide ecosystem respiration flux +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface downward long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum potential evaporation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum volumetric soil moisture 'm**3 m**-3' = { discipline = 2 ; @@ -5609,6 +10946,91 @@ parameterNumber = 25 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum snow depth water equivalent +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum skin temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum snow density +'kg m**-3' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum sea ice area fraction +'(0 - 1)' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum sea surface temperature +'K' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column cloud liquid water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column cloud ice water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre specific humidity +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake mix-layer temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake mix-layer depth +'m' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum 2 metre relative humidity '%' = { discipline = 0 ; @@ -5619,6 +11041,62 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum soil temperature +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum wind speed +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum charnock +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum potential vorticity +'K m**2 kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific rain water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific snow water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eta-coordinate vertical velocity +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum visibility 'm' = { discipline = 0 ; @@ -5626,6 +11104,52 @@ parameterNumber = 0 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum wind direction +'Degree true' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column snow water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum low cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum medium cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum high cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column rain water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } #Time-minimum most-unstable CAPE 'J kg**-1' = { discipline = 0 ; @@ -5645,6 +11169,1582 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 3 ; } +#Time-minimum geopotential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum u component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum v component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific humidity +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum surface pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertical velocity +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated water vapour +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vorticity (relative) +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean sea level pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum logarithm of surface pressure +'Numeric' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum divergence +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum relative humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum boundary layer height +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre U wind component +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre V wind component +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre dewpoint temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum sunshine +'Numeric' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum ozone mass mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind speed +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum temperature of snow layer +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum forecast surface roughness +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum forecast logarithm of surface roughness for heat +'Numeric' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific cloud liquid water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum specific cloud ice water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum fraction of cloud cover +'(0 - 1)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum k index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total totals index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind direction +'Degree true' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum clear air turbulence (CAT) +'m**2/3 s**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum forecast albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum potential temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum UV visible albedo for direct radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum UV visible albedo for diffuse radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for diffuse radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum snow albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum montgomery potential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective available potential energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum skin reservoir content +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column integrated ozone +'DU' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated kinetic energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated enthalpy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated potential + internal energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertical integral of potential+internal+latent energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated total energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated water enthalpy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum UV visible albedo for direct radiation, isotropic component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum UV visible albedo for direct radiation, volumetric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum UV visible albedo for direct radiation, geometric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation, isotropic component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation, volumetric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum near IR albedo for direct radiation, geometric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 3 ; + typeOfGeneratingProcess = 9 ; + } +#Time-minimum convective inhibition +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum friction velocity +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake bottom temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake total layer temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake shape factor +'dimensionless' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake ice surface temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum lake ice total depth +'m' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum minimum vertical gradient of refractivity inside trapping layer +'m**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mean vertical gradient of refractivity inside trapping layer +'m**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum duct base height +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum trapping layer base height +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum trapping layer top height +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum -10 degrees C isothermal level (atm) +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum cloud base height +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 0 degrees C isothermal level (atm) +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre wind gust +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum relative humidity with respect to water +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 2 metre relative humidity with respect to water +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective available potential energy shear +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum tropopause pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum height of convective cloud top +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum height of zero-degree wet-bulb temperature +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum height of one-degree wet-bulb temperature +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total lightning flash density +'km**-2 day**-1' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column supercooled liquid water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre U-component of neutral wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum 10 metre V-component of neutral wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum convective rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum large scale rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CAPE in the lowest 50 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CIN in the lowest 50 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CAPE in the lowest 100 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum mixed-layer CIN in the lowest 100 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum departure level of the most unstable parcel expressed as Pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum ceiling +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column integrated saturation specific humidity with respect to water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum direct solar radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum freezing rain rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward geopotential flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward geopotential flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of water geopotential flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of geopotential flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward enthalpy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward enthalpy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward kinetic energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward kinetic energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated eastward total energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated northward total energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of enthalpy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of kinetic energy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of total energy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum total column vertically-integrated divergence of water enthalpy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of mass flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward mass flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward mass flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of water vapour flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of cloud liquid water flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of cloud ice water flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of rain flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of snow flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward water vapour flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward water vapour flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward cloud liquid water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward cloud liquid water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward cloud ice water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward cloud ice water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward rain flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward rain flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward snow flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward snow flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated eastward ozone flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated northward ozone flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated divergence of ozone flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum vertically integrated net source of ozone +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward turbulent surface stress due to orographic form drag +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward turbulent surface stress due to orographic form drag +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum eastward turbulent surface stress due to surface roughness +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum northward turbulent surface stress due to surface roughness +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-minimum visibility through precipitation +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 51 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation temperature tendency due to short-wave radiation +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to long-wave radiation +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to short wave radiation, clear sky +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to long-wave radiation, clear sky +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature tendency due to parametrisations +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific humidity tendency due to parametrisations +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward wind tendency due to parametrisations +'m s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward wind tendency due to parametrisations +'m s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation updraught mass flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation downdraught mass flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation updraught detrainment rate +'kg m**-3 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation downdraught detrainment rate +'kg m**-3 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total precipitation flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation turbulent diffusion coefficient for heat +'m**2 s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface photosynthetically active radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snow evaporation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snowmelt rate +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation magnitude of turbulent surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large-scale precipitation fraction +'Proportion' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward UV radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface photosynthetically active radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large-scale precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snowfall rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation boundary layer dissipation +'W m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface sensible heat flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface latent heat flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward turbulent surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 62 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward turbulent surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 63 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation evaporation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward gravity wave surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward gravity wave surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation gravity wave dissipation +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation runoff rate +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top net long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface net long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation top downward short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated moisture divergence +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large scale snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface direct short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface direct short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation carbon dioxide net ecosystem exchange flux +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation carbon dioxide gross primary production flux +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation carbon dioxide ecosystem respiration flux +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + constituentType = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface downward long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation potential evaporation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } #Time-standard-deviation volumetric soil moisture 'm**3 m**-3' = { discipline = 2 ; @@ -5652,6 +12752,200 @@ parameterNumber = 25 ; typeOfStatisticalProcessing = 6 ; } +#Time-standard-deviation snow depth water equivalent +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation skin temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation snow density +'kg m**-3' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation sea ice area fraction +'(0 - 1)' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation sea surface temperature +'K' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column cloud liquid water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column cloud ice water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre specific humidity +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake mix-layer temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake mix-layer depth +'m' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation soil temperature +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wind speed +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation charnock +'Numeric' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation potential vorticity +'K m**2 kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific rain water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific snow water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eta-coordinate vertical velocity +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation visibility +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation wind direction +'Degree true' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column snow water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation low cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation medium cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation high cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column rain water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } #Time-standard-deviation most-unstable CAPE 'J kg**-1' = { discipline = 0 ; @@ -5671,6 +12965,1145 @@ typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 6 ; } +#Time-standard-deviation geopotential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation u component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation v component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific humidity +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation surface pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertical velocity +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated water vapour +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vorticity (relative) +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean sea level pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation logarithm of surface pressure +'Numeric' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation divergence +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation relative humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation boundary layer height +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre U wind component +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre V wind component +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre dewpoint temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation sunshine +'Numeric' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation ozone mass mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind speed +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation temperature of snow layer +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation forecast surface roughness +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation forecast logarithm of surface roughness for heat +'Numeric' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific cloud liquid water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation specific cloud ice water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation fraction of cloud cover +'(0 - 1)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation k index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total totals index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind direction +'Degree true' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation clear air turbulence (CAT) +'m**2/3 s**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation forecast albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation potential temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation UV visible albedo for direct radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation UV visible albedo for diffuse radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for diffuse radiation (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation snow albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 19 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation montgomery potential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective available potential energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation skin reservoir content +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column integrated ozone +'DU' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated kinetic energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated enthalpy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated potential + internal energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertical integral of potential+internal+latent energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated total energy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated water enthalpy +'J m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation UV visible albedo for direct radiation, isotropic component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 58 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation UV visible albedo for direct radiation, volumetric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 59 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation UV visible albedo for direct radiation, geometric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 57 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation, isotropic component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 12 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation, volumetric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation near IR albedo for direct radiation, geometric component (climatological) +'%' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 9 ; + } +#Time-standard-deviation convective inhibition +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation friction velocity +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake bottom temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 162 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake total layer temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake shape factor +'dimensionless' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake ice surface temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation lake ice total depth +'m' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation minimum vertical gradient of refractivity inside trapping layer +'m**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mean vertical gradient of refractivity inside trapping layer +'m**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation duct base height +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 41 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation trapping layer base height +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation trapping layer top height +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 43 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation -10 degrees C isothermal level (atm) +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 26315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation cloud base height +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 0 degrees C isothermal level (atm) +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 20 ; + scaledValueOfFirstFixedSurface = 27315 ; + scaleFactorOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre wind gust +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation relative humidity with respect to water +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 2 metre relative humidity with respect to water +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 93 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective available potential energy shear +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation tropopause pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 7 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation height of convective cloud top +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation height of zero-degree wet-bulb temperature +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 44 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation height of one-degree wet-bulb temperature +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 45 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total lightning flash density +'km**-2 day**-1' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column supercooled liquid water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 167 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre U-component of neutral wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation 10 metre V-component of neutral wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 57 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation convective rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation large scale rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CAPE in the lowest 50 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CIN in the lowest 50 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 5000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CAPE in the lowest 100 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation mixed-layer CIN in the lowest 100 hPa +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 18 ; + scaledValueOfFirstFixedSurface = 10000 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation departure level of the most unstable parcel expressed as Pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 17 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation ceiling +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column integrated saturation specific humidity with respect to water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 169 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation direct solar radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation freezing rain rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward geopotential flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward geopotential flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of water geopotential flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 42 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of geopotential flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 43 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward enthalpy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward enthalpy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward kinetic energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward kinetic energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated eastward total energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated northward total energy flux +'W m**-1' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of enthalpy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of kinetic energy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of total energy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation total column vertically-integrated divergence of water enthalpy flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 21 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of mass flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 35 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward mass flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward mass flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of water vapour flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 160 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of cloud liquid water flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 161 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of cloud ice water flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 162 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of rain flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 163 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of snow flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 164 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward water vapour flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward water vapour flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward cloud liquid water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 152 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward cloud liquid water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 153 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward cloud ice water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 154 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward cloud ice water flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 155 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward rain flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 156 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward rain flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 157 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward snow flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 158 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward snow flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 159 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated eastward ozone flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated northward ozone flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated divergence of ozone flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 80 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation vertically integrated net source of ozone +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 81 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + constituentType = 0 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward turbulent surface stress due to orographic form drag +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward turbulent surface stress due to orographic form drag +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation eastward turbulent surface stress due to surface roughness +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } +#Time-standard-deviation northward turbulent surface stress due to surface roughness +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 6 ; + } #Cross sectional area of flow in channel 'm**2' = { discipline = 1 ; @@ -10318,6 +18751,27 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 1 ; } +#Time-maximum sea ice temperature +'K' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum sea ice temperature +'K' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 3 ; + } +#Time-standard-deviation sea ice temperature +'K' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 6 ; + } #Virtual temperature 'K' = { discipline = 0 ; @@ -11634,7 +20088,7 @@ parameterCategory = 0 ; parameterNumber = 17 ; } -#Mean 2 metre temperature +#Time-mean 2 metre temperature 'K' = { discipline = 0 ; parameterCategory = 0 ; @@ -11644,7 +20098,7 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } -#Mean of 10 metre wind speed +#Time-mean 10 metre wind speed 'm s**-1' = { discipline = 0 ; parameterCategory = 2 ; diff --git a/definitions/grib2/units.legacy.def b/definitions/grib2/units.legacy.def index 3a102bd06..6786ffc6b 100644 --- a/definitions/grib2/units.legacy.def +++ b/definitions/grib2/units.legacy.def @@ -1,188 +1,249 @@ -#Volumetric soil moisture content -'Proportion' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 9 ; - } -#Upper layer soil temperature -'K' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 1 ; - } -#Upper layer soil moisture -'kg m**-3' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 2 ; - } -#Lower layer soil moisture -'kg m**-3' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 3 ; - } -#Bottom layer soil temperature -'K' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 4 ; - } -#Liquid volumetric soil moisture (non-frozen) -'Proportion' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 5 ; - } -#Transpiration stress-onset (soil moisture) -'Proportion' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 7 ; - } -#Direct evaporation cease (soil moisture) -'Proportion' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 8 ; - } -#Soil porosity -'Proportion' = { - discipline = 2 ; - parameterCategory = 3 ; - parameterNumber = 9 ; - } +# Automatically generated by ./create_def.pl, do not edit #Instantaneous eastward turbulent surface stress 'N m**-2' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 38 ; - typeOfFirstFixedSurface = 1 ; -} + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + } #Instantaneous northward turbulent surface stress 'N m**-2' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 37 ; - typeOfFirstFixedSurface = 1 ; -} + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + } +#Minimum dew point depression +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + } +#Maximum relative humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 27 ; + } +#Maximum absolute humidity +'kg m**-3' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 28 ; + } +#Maximum wind speed +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 21 ; + } +#Net long wave radiation flux (surface) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 0 ; + } +#Net long wave radiation flux (top of atmosphere) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 1 ; + } +#Maximum snow albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 17 ; + } +#Volumetric soil moisture content +'Proportion' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Upper layer soil temperature +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + } +#Upper layer soil moisture +'kg m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + } +#Lower layer soil moisture +'kg m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 3 ; + } +#Bottom layer soil temperature +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Liquid volumetric soil moisture (non-frozen) +'Proportion' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + } +#Transpiration stress-onset (soil moisture) +'Proportion' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 7 ; + } +#Direct evaporation cease (soil moisture) +'Proportion' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 8 ; + } +#Soil porosity +'Proportion' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 9 ; + } #Evaporation in the last 6 hours 'kg m**-2' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 79 ; - typeOfFirstFixedSurface = 1 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 6 ; -} + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 6 ; + } #Time-mean evapotranspiration rate in the last 24h 'kg m**-2 s**-1' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 39 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 39 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-integrated potential evapotranspiration rate in the last 24h 'kg m**-2' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 40 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 24 ; + } #Time-mean potential evapotranspiration rate in the last 24h 'kg m**-2 s**-1' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 40 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-mean volumetric soil moisture 'm**3 m**-3' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 25 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-integrated water runoff and drainage rate in the last 24h 'kg m**-2' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 42 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 24 ; + } #Time-mean water runoff and drainage rate in the last 24h 'kg m**-2 s**-1' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 42 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-mean snow depth water equivalent 'kg m**-2' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 60 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-mean skin temperature 'K' = { - discipline = 0 ; - parameterCategory = 0 ; - parameterNumber = 17 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 24 ; -} + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 24 ; + } #Time-integrated snow melt rate in the last 24h 'kg m**-2' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 41 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfStatisticalProcessing = 1 ; - lengthOfTimeRange = 24 ; -} + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 1 ; + lengthOfTimeRange = 24 ; + } #Upward sea water velocity 'm s**-1' = { - discipline = 10 ; - parameterCategory = 4 ; - parameterNumber = 27 ; - typeOfFirstFixedSurface = 168 ; - typeOfSecondFixedSurface = 168 ; -} + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 168 ; + typeOfSecondFixedSurface = 168 ; + } #Time-mean upward sea water velocity 'm s**-1' = { - discipline = 10 ; - parameterCategory = 4 ; - parameterNumber = 27 ; - typeOfFirstFixedSurface = 168 ; - typeOfSecondFixedSurface = 168 ; - typeOfStatisticalProcessing = 0 ; -} -#Maximum individual wave height + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 168 ; + typeOfSecondFixedSurface = 168 ; + typeOfStatisticalProcessing = 0 ; + } +#Maximum temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Minimum temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Envelop-maximum individual wave height 'm' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 24 ; -} + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + } +#Soil moisture +'kg m**-3' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } #Soil temperature 'K' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 2 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 2 ; } diff --git a/definitions/mars/grib.dacl.pb.def b/definitions/mars/grib.dacl.pb.def index 5ecc47b04..db9763909 100644 --- a/definitions/mars/grib.dacl.pb.def +++ b/definitions/mars/grib.dacl.pb.def @@ -1,4 +1,3 @@ -alias mars.step = stepRange; -meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); -alias mars.quantile = marsQuantile; +alias mars.step = stepRange; +include "mars/mars.quantile.def" diff --git a/definitions/mars/grib.dacw.pb.def b/definitions/mars/grib.dacw.pb.def index 5ecc47b04..4144f1bc3 100644 --- a/definitions/mars/grib.dacw.pb.def +++ b/definitions/mars/grib.dacw.pb.def @@ -1,4 +1,4 @@ -alias mars.step = stepRange; -meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); -alias mars.quantile = marsQuantile; +alias mars.step = stepRange; + +include "mars/mars.quantile.def" diff --git a/definitions/mars/grib.eefo.pb.def b/definitions/mars/grib.eefo.pb.def index 5ecc47b04..db9763909 100644 --- a/definitions/mars/grib.eefo.pb.def +++ b/definitions/mars/grib.eefo.pb.def @@ -1,4 +1,3 @@ -alias mars.step = stepRange; -meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); -alias mars.quantile = marsQuantile; +alias mars.step = stepRange; +include "mars/mars.quantile.def" diff --git a/definitions/mars/grib.eefo.pd.def b/definitions/mars/grib.eefo.pd.def index a53d82ca0..db9763909 100644 --- a/definitions/mars/grib.eefo.pd.def +++ b/definitions/mars/grib.eefo.pd.def @@ -1,3 +1,3 @@ -alias mars.step = stepRange; -meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); -alias mars.quantile = marsQuantile; +alias mars.step = stepRange; + +include "mars/mars.quantile.def" diff --git a/definitions/mars/grib.eehs.cd.def b/definitions/mars/grib.eehs.cd.def index 05e94a6f1..db9763909 100644 --- a/definitions/mars/grib.eehs.cd.def +++ b/definitions/mars/grib.eehs.cd.def @@ -1,3 +1,3 @@ -alias mars.step = stepRange; -alias mars.quantile = quantile; +alias mars.step = stepRange; +include "mars/mars.quantile.def" diff --git a/definitions/mars/grib.efhs.cd.def b/definitions/mars/grib.efhs.cd.def index 05e94a6f1..db9763909 100644 --- a/definitions/mars/grib.efhs.cd.def +++ b/definitions/mars/grib.efhs.cd.def @@ -1,3 +1,3 @@ -alias mars.step = stepRange; -alias mars.quantile = quantile; +alias mars.step = stepRange; +include "mars/mars.quantile.def" diff --git a/definitions/mars/grib.enfo.pb.def b/definitions/mars/grib.enfo.pb.def index 5ecc47b04..db9763909 100644 --- a/definitions/mars/grib.enfo.pb.def +++ b/definitions/mars/grib.enfo.pb.def @@ -1,4 +1,3 @@ -alias mars.step = stepRange; -meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); -alias mars.quantile = marsQuantile; +alias mars.step = stepRange; +include "mars/mars.quantile.def" diff --git a/definitions/mars/grib.enfo.pd.def b/definitions/mars/grib.enfo.pd.def index a53d82ca0..db9763909 100644 --- a/definitions/mars/grib.enfo.pd.def +++ b/definitions/mars/grib.enfo.pd.def @@ -1,3 +1,3 @@ -alias mars.step = stepRange; -meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); -alias mars.quantile = marsQuantile; +alias mars.step = stepRange; + +include "mars/mars.quantile.def" diff --git a/definitions/mars/grib.mfam.pb.def b/definitions/mars/grib.mfam.pb.def index 27df3cc1b..72b841ecc 100644 --- a/definitions/mars/grib.mfam.pb.def +++ b/definitions/mars/grib.mfam.pb.def @@ -3,8 +3,7 @@ alias mars.origin = centre; meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; alias mars.fcperiod = forecastperiod; -meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); -alias mars.quantile = marsQuantile; +include "mars/mars.quantile.def" # TODO: Check why they are set in the first place unalias mars.step; diff --git a/definitions/mars/grib.mfam.pd.def b/definitions/mars/grib.mfam.pd.def index 96f272f62..cd37d34f6 100644 --- a/definitions/mars/grib.mfam.pd.def +++ b/definitions/mars/grib.mfam.pd.def @@ -3,8 +3,7 @@ alias mars.origin = centre; meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; alias mars.fcperiod = forecastperiod; -meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); -alias mars.quantile = marsQuantile; +include "mars/mars.quantile.def" # TODO: Check why they are set in the first place unalias mars.step; diff --git a/definitions/mars/grib.mmam.fcmean.def b/definitions/mars/grib.mmam.fcmean.def index a2ece7923..84c4cce2f 100644 --- a/definitions/mars/grib.mmam.fcmean.def +++ b/definitions/mars/grib.mmam.fcmean.def @@ -4,5 +4,6 @@ alias mars.fcmonth = marsForecastMonth; unalias mars.step; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } +if (class is "od" || class is "en") { + alias mars.system = systemNumber; +} diff --git a/definitions/mars/grib.mmsa.em.def b/definitions/mars/grib.mmsa.em.def index 6d152901b..36ac9adc5 100644 --- a/definitions/mars/grib.mmsa.em.def +++ b/definitions/mars/grib.mmsa.em.def @@ -6,7 +6,10 @@ if (class is "od") { alias mars.system = systemNumber; } if (class is "c3") { alias mars.system = systemNumber; } # See ECC-624 -if (centre == 80 && subCentre == 98 && class is "c3") { +if (centre == 80 && subCentre == 98 && (class is "c3" || class is "ci")) { constant cnmc_cmcc = 'cmcc'; alias mars.origin = cnmc_cmcc; } + +if (class is "ci") { unalias mars.method; } + diff --git a/definitions/mars/grib.mmsa.fcmean.def b/definitions/mars/grib.mmsa.fcmean.def index f828d5a8c..3b7f185b3 100644 --- a/definitions/mars/grib.mmsa.fcmean.def +++ b/definitions/mars/grib.mmsa.fcmean.def @@ -8,7 +8,10 @@ if (class is "od") { alias mars.system = systemNumber; } if (class is "c3") { alias mars.system = systemNumber; } # See ECC-624 -if (centre == 80 && subCentre == 98 && class is "c3") { +if (centre == 80 && subCentre == 98 && (class is "c3" || class is "ci")) { constant cnmc_cmcc = 'cmcc'; alias mars.origin = cnmc_cmcc; } + +if (class is "ci") { unalias mars.method; } + diff --git a/definitions/mars/grib.mmsf.an.def b/definitions/mars/grib.mmsf.an.def index 86ccb55b5..9d337ce4c 100644 --- a/definitions/mars/grib.mmsf.an.def +++ b/definitions/mars/grib.mmsf.an.def @@ -1,6 +1,3 @@ -#no step in type an -unalias mars.step; - if (class is "od" || class is "me" || class is "en" || class is "c3" || class is "ci") { @@ -15,7 +12,7 @@ if (class isnot "gw") { # ECC-1448 } # See ECC-624 -if (centre == 80 && subCentre == 98 && class is "c3") { +if (centre == 80 && subCentre == 98 && (class is "c3" || class is "ci")) { constant cnmc_cmcc = 'cmcc'; alias mars.origin = cnmc_cmcc; } diff --git a/definitions/mars/grib.mmsf.fc.def b/definitions/mars/grib.mmsf.fc.def index 30b2f7394..6fe01e2a6 100644 --- a/definitions/mars/grib.mmsf.fc.def +++ b/definitions/mars/grib.mmsf.fc.def @@ -18,7 +18,7 @@ if (class isnot "gw") { # ECC-1448 } # See ECC-624 -if (centre == 80 && subCentre == 98 && class is "c3") { +if (centre == 80 && subCentre == 98 && (class is "c3" || class is "ci")) { constant cnmc_cmcc = 'cmcc'; alias mars.origin = cnmc_cmcc; } diff --git a/definitions/mars/grib.msmm.em.def b/definitions/mars/grib.msmm.em.def index 3131d45a7..cce87213b 100644 --- a/definitions/mars/grib.msmm.em.def +++ b/definitions/mars/grib.msmm.em.def @@ -5,13 +5,15 @@ unalias mars.step; alias mars.origin = centre; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } -if (class is "c3") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en" || class is "c3") { + alias mars.system = systemNumber; +} # See ECC-624 -if (centre == 80 && subCentre == 98 && class is "c3") { +if (centre == 80 && subCentre == 98 && (class is "c3" || class is "ci")) { constant cnmc_cmcc = 'cmcc'; alias mars.origin = cnmc_cmcc; } + +if (class is "ci") { unalias mars.method; } + diff --git a/definitions/mars/grib.msmm.fcmax.def b/definitions/mars/grib.msmm.fcmax.def index 573343213..52eecab7d 100644 --- a/definitions/mars/grib.msmm.fcmax.def +++ b/definitions/mars/grib.msmm.fcmax.def @@ -6,13 +6,15 @@ alias mars.number = perturbationNumber; alias mars.origin = centre; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } -if (class is "c3") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en" || class is "c3") { + alias mars.system = systemNumber; +} # See ECC-624 -if (centre == 80 && subCentre == 98 && class is "c3") { +if (centre == 80 && subCentre == 98 && (class is "c3" || class is "ci")) { constant cnmc_cmcc = 'cmcc'; alias mars.origin = cnmc_cmcc; } + +if (class is "ci") { unalias mars.method; } + diff --git a/definitions/mars/grib.msmm.fcmean.def b/definitions/mars/grib.msmm.fcmean.def index a13ca9918..7a7ff8e66 100644 --- a/definitions/mars/grib.msmm.fcmean.def +++ b/definitions/mars/grib.msmm.fcmean.def @@ -6,14 +6,12 @@ alias mars.method = methodNumber; unalias mars.step; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } -if (class is "c3") { alias mars.system = systemNumber; } -if (class is "ci") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en" || class is "c3" || class is "ci") { + alias mars.system = systemNumber; +} # See ECC-624 -if (centre == 80 && subCentre == 98 && class is "c3") { +if (centre == 80 && subCentre == 98 && (class is "c3" || class is "ci")) { constant cnmc_cmcc = 'cmcc'; alias mars.origin = cnmc_cmcc; } diff --git a/definitions/mars/grib.msmm.fcmin.def b/definitions/mars/grib.msmm.fcmin.def index 59f10189a..0c3d347d0 100644 --- a/definitions/mars/grib.msmm.fcmin.def +++ b/definitions/mars/grib.msmm.fcmin.def @@ -5,14 +5,14 @@ alias mars.number = perturbationNumber; alias mars.origin = centre; alias mars.method = methodNumber; - -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } -if (class is "c3") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en" || class is "c3") { + alias mars.system = systemNumber; +} # See ECC-624 -if (centre == 80 && subCentre == 98 && class is "c3") { +if (centre == 80 && subCentre == 98 && (class is "c3" || class is "ci")) { constant cnmc_cmcc = 'cmcc'; alias mars.origin = cnmc_cmcc; } + +if (class is "ci") { unalias mars.method; } diff --git a/definitions/mars/grib.msmm.fcstdev.def b/definitions/mars/grib.msmm.fcstdev.def index f4b8c2414..86ac736a4 100644 --- a/definitions/mars/grib.msmm.fcstdev.def +++ b/definitions/mars/grib.msmm.fcstdev.def @@ -7,13 +7,14 @@ unalias mars.step; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } -if (class is "c3") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en" || class is "c3") { + alias mars.system = systemNumber; +} # See ECC-624 -if (centre == 80 && subCentre == 98 && class is "c3") { +if (centre == 80 && subCentre == 98 && (class is "c3" || class is "ci")) { constant cnmc_cmcc = 'cmcc'; alias mars.origin = cnmc_cmcc; } + +if (class is "ci") { unalias mars.method; } diff --git a/definitions/mars/grib.msmm.hcmean.def b/definitions/mars/grib.msmm.hcmean.def deleted file mode 120000 index 0b5cb2f13..000000000 --- a/definitions/mars/grib.msmm.hcmean.def +++ /dev/null @@ -1 +0,0 @@ -grib.msmm.em.def \ No newline at end of file diff --git a/definitions/mars/grib.msmm.hcmean.def b/definitions/mars/grib.msmm.hcmean.def new file mode 100644 index 000000000..9fd3f4b70 --- /dev/null +++ b/definitions/mars/grib.msmm.hcmean.def @@ -0,0 +1,18 @@ +# assert(16); +alias mars.fcmonth = marsForecastMonth; +unalias mars.step; + +alias mars.origin = centre; +alias mars.method = methodNumber; + +if (class is "od" || class is "me" || class is "en" || class is "c3") { + alias mars.system = systemNumber; +} + +# See ECC-624 +if (centre == 80 && subCentre == 98 && (class is "c3" || class is "ci")) { + constant cnmc_cmcc = 'cmcc'; + alias mars.origin = cnmc_cmcc; +} + +if (class is "ci") { unalias mars.method; } diff --git a/definitions/mars/grib.ocea.an.def b/definitions/mars/grib.ocea.an.def index d682c50bd..13ff8360e 100644 --- a/definitions/mars/grib.ocea.an.def +++ b/definitions/mars/grib.ocea.an.def @@ -1,5 +1,6 @@ alias mars.number = perturbationNumber; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } + +if (class is "od" || class is "me" || class is "en") { + alias mars.system = systemNumber; +} diff --git a/definitions/mars/grib.ocea.ff.def b/definitions/mars/grib.ocea.ff.def index d682c50bd..5a03a2e58 100644 --- a/definitions/mars/grib.ocea.ff.def +++ b/definitions/mars/grib.ocea.ff.def @@ -1,5 +1,5 @@ alias mars.number = perturbationNumber; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en") { + alias mars.system = systemNumber; +} diff --git a/definitions/mars/grib.ocea.fx.def b/definitions/mars/grib.ocea.fx.def index d682c50bd..5a03a2e58 100644 --- a/definitions/mars/grib.ocea.fx.def +++ b/definitions/mars/grib.ocea.fx.def @@ -1,5 +1,5 @@ alias mars.number = perturbationNumber; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en") { + alias mars.system = systemNumber; +} diff --git a/definitions/mars/grib.ocea.of.def b/definitions/mars/grib.ocea.of.def index d682c50bd..5a03a2e58 100644 --- a/definitions/mars/grib.ocea.of.def +++ b/definitions/mars/grib.ocea.of.def @@ -1,5 +1,5 @@ alias mars.number = perturbationNumber; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en") { + alias mars.system = systemNumber; +} diff --git a/definitions/mars/grib.ocea.or.def b/definitions/mars/grib.ocea.or.def index d682c50bd..5a03a2e58 100644 --- a/definitions/mars/grib.ocea.or.def +++ b/definitions/mars/grib.ocea.or.def @@ -1,5 +1,5 @@ alias mars.number = perturbationNumber; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en") { + alias mars.system = systemNumber; +} diff --git a/definitions/mars/grib.olda.tpa.def b/definitions/mars/grib.olda.tpa.def new file mode 100644 index 000000000..198e4144f --- /dev/null +++ b/definitions/mars/grib.olda.tpa.def @@ -0,0 +1,15 @@ +# aliasing MARS date and Time to the date and time defined in local section, +# corresponding to the end of the Ocean NRT data assimilation +alias mars.date = dateOfAnalysis; +alias mars.time = timeOfAnalysis; + +# aliasing the new offset date and time to the date and time +# coming fron the section 1, i.e. reference date and time +alias mars.offsetdate = dataDate; +alias mars.offsettime = dataTime; + +unalias mars.step; +alias mars.step = stepRange; +if (defined(perturbationNumber)) { + alias mars.number = perturbationNumber; +} diff --git a/definitions/mars/grib.oper.ep.def b/definitions/mars/grib.oper.ep.def new file mode 100644 index 000000000..1b744d28a --- /dev/null +++ b/definitions/mars/grib.oper.ep.def @@ -0,0 +1,3 @@ +if (class is "ai") { + alias mars.step = stepRange; +} diff --git a/definitions/mars/grib.swmm.fcmax.def b/definitions/mars/grib.swmm.fcmax.def index a628fb1a2..864aed20f 100644 --- a/definitions/mars/grib.swmm.fcmax.def +++ b/definitions/mars/grib.swmm.fcmax.def @@ -4,6 +4,6 @@ alias mars.number = perturbationNumber; unalias mars.step; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en") { + alias mars.system = systemNumber; +} diff --git a/definitions/mars/grib.swmm.fcmean.def b/definitions/mars/grib.swmm.fcmean.def index a628fb1a2..864aed20f 100644 --- a/definitions/mars/grib.swmm.fcmean.def +++ b/definitions/mars/grib.swmm.fcmean.def @@ -4,6 +4,6 @@ alias mars.number = perturbationNumber; unalias mars.step; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en") { + alias mars.system = systemNumber; +} diff --git a/definitions/mars/grib.swmm.fcmin.def b/definitions/mars/grib.swmm.fcmin.def index a628fb1a2..864aed20f 100644 --- a/definitions/mars/grib.swmm.fcmin.def +++ b/definitions/mars/grib.swmm.fcmin.def @@ -4,6 +4,6 @@ alias mars.number = perturbationNumber; unalias mars.step; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en") { + alias mars.system = systemNumber; +} diff --git a/definitions/mars/grib.swmm.fcstdev.def b/definitions/mars/grib.swmm.fcstdev.def index a628fb1a2..864aed20f 100644 --- a/definitions/mars/grib.swmm.fcstdev.def +++ b/definitions/mars/grib.swmm.fcstdev.def @@ -4,6 +4,6 @@ alias mars.number = perturbationNumber; unalias mars.step; alias mars.method = methodNumber; -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } +if (class is "od" || class is "me" || class is "en") { + alias mars.system = systemNumber; +} diff --git a/definitions/mars/grib.wees.cd.def b/definitions/mars/grib.wees.cd.def index 05e94a6f1..db9763909 100644 --- a/definitions/mars/grib.wees.cd.def +++ b/definitions/mars/grib.wees.cd.def @@ -1,3 +1,3 @@ -alias mars.step = stepRange; -alias mars.quantile = quantile; +alias mars.step = stepRange; +include "mars/mars.quantile.def" diff --git a/definitions/mars/grib.wehs.cd.def b/definitions/mars/grib.wehs.cd.def index 05e94a6f1..db9763909 100644 --- a/definitions/mars/grib.wehs.cd.def +++ b/definitions/mars/grib.wehs.cd.def @@ -1,3 +1,3 @@ -alias mars.step = stepRange; -alias mars.quantile = quantile; +alias mars.step = stepRange; +include "mars/mars.quantile.def" diff --git a/definitions/mars/mars.quantile.def b/definitions/mars/mars.quantile.def new file mode 100644 index 000000000..83bebb5d1 --- /dev/null +++ b/definitions/mars/mars.quantile.def @@ -0,0 +1,19 @@ +if ((stream is "eehs" or stream is "efhs" or stream is "wees" or stream is "wehs") and (type is "cd")) { + if (edition == 1) { + # defined in local section 19 + alias mars.quantile = quantile; + } else { + meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles); + alias mars.quantile = marsQuantile; + } +} +else +{ + if (edition == 1) { + meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); + alias mars.quantile = marsQuantile; + } else { + meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles); + alias mars.quantile = marsQuantile; + } +} diff --git a/eccodes_config.h.in b/eccodes_config.h.in index 4432f9a10..29877a3d9 100644 --- a/eccodes_config.h.in +++ b/eccodes_config.h.in @@ -115,6 +115,7 @@ #cmakedefine HAVE_GEOGRAPHY #cmakedefine HAVE_MEMFS +#cmakedefine HAVE_FORTRAN #ifdef HAVE_MEMFS #undef ECCODES_DEFINITION_PATH diff --git a/examples/F90/CMakeLists.txt b/examples/F90/CMakeLists.txt index 7ec9c28b2..c98f234df 100644 --- a/examples/F90/CMakeLists.txt +++ b/examples/F90/CMakeLists.txt @@ -55,6 +55,7 @@ if( HAVE_BUILD_TOOLS ) grib_get_set_uuid grib_clone grib_ecc-1316 + grib_infinity_grid_second_order bufr_attributes bufr_clone bufr_expanded diff --git a/examples/F90/codes_dump.f90 b/examples/F90/codes_dump.f90 index 84f04f668..97f8bed95 100644 --- a/examples/F90/codes_dump.f90 +++ b/examples/F90/codes_dump.f90 @@ -31,8 +31,10 @@ program codes_dump_test if (iret == CODES_END_OF_FILE) exit call codes_set_debug(0) + call codes_set_data_quality_checks(1) call codes_dump(msgid) call codes_set_debug(1) + call codes_set_data_quality_checks(0) call codes_release(msgid) diff --git a/examples/F90/grib_infinity_grid_second_order.f90 b/examples/F90/grib_infinity_grid_second_order.f90 new file mode 100644 index 000000000..4a1939b88 --- /dev/null +++ b/examples/F90/grib_infinity_grid_second_order.f90 @@ -0,0 +1,41 @@ +! (C) Copyright 2005- ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! 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. +! +! Description: issue with grid_second_order hanging when encoding fields with infinite values +! +! +USE eccodes +USE ieee_arithmetic + +IMPLICIT NONE + +INTEGER :: IGRIBH +REAL(KIND=8) :: ZT (421*441) + +CHARACTER*32 :: CLPACKING ! grid_simple / grid_second_order +CHARACTER*32 :: CLINFINITY ! 0 / 1 + +CALL GETARG (1, CLPACKING) +CALL GETARG (2, CLINFINITY) + +CALL codes_grib_new_from_samples(IGRIBH, "regular_ll_sfc_grib2") +CALL codes_set_long (IGRIBH, "Ni", 421_8) +CALL codes_set_long (IGRIBH, "Nj", 441_8) +CALL codes_set_long (IGRIBH, "bitsPerValue", 16_8) +CALL codes_set_string (IGRIBH, "packingType", TRIM (CLPACKING)) + +ZT = 0._8 + +IF (CLINFINITY == '1') THEN + ZT (1) = IEEE_VALUE (0._8, IEEE_POSITIVE_INF) +ENDIF + +! This should fail if CLINFINITY is 1 (inf passed in) +CALL codes_set_real8_array (IGRIBH, "values", ZT) + +END diff --git a/examples/F90/grib_infinity_grid_second_order.sh b/examples/F90/grib_infinity_grid_second_order.sh new file mode 100755 index 000000000..611636ecd --- /dev/null +++ b/examples/F90/grib_infinity_grid_second_order.sh @@ -0,0 +1,37 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# 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. +# + +# ----------------------------------------------------------------- +# This is the test for the JIRA issue ECC-1927 +# grid_second_order hangs when encoding fields with infinite values +# ----------------------------------------------------------------- + +. ./include.ctest.sh + +for encoding in grid_simple grid_second_order; do + for infinity in 0 1; do + + if [ $infinity -eq 1 ]; then + set +e + fi + + ${examples_dir}/eccodes_f_grib_infinity_grid_second_order $encoding $infinity + c=$? + + if [ $infinity -eq 1 ]; then + set -e + if [ $c -eq 0 ]; then + echo "Encoding infinite numbers should have failed" + exit 1 + fi + fi + + done +done diff --git a/examples/extra/f_clone.f90 b/examples/extra/f_clone.f90 index 7eedd1dfe..f9552d0c1 100755 --- a/examples/extra/f_clone.f90 +++ b/examples/extra/f_clone.f90 @@ -6,10 +6,9 @@ ! 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. ! -! Description: how to create a new GRIB message by cloning +! Description: how to create a new GRIB message by cloning ! an existing message. ! -! ! Author: Cristian D. Codorean ! ! diff --git a/fortran/eccodes_f90_tail.f90 b/fortran/eccodes_f90_tail.f90 index 4e7a951e9..14dad7118 100644 --- a/fortran/eccodes_f90_tail.f90 +++ b/fortran/eccodes_f90_tail.f90 @@ -2786,6 +2786,12 @@ call grib_set_debug(dmode) end subroutine codes_set_debug + !> Set data quality check value (0, 1 or 2) + subroutine codes_set_data_quality_checks(val) + integer(kind=kindOfInt), intent(in) :: val + call grib_set_data_quality_checks(val) + end subroutine codes_set_data_quality_checks + !> Set the definition path diff --git a/fortran/grib_api_externals.h b/fortran/grib_api_externals.h index fd3d6c10a..496143c1b 100644 --- a/fortran/grib_api_externals.h +++ b/fortran/grib_api_externals.h @@ -79,7 +79,7 @@ integer, external :: grib_f_set_int, grib_f_set_int_array, & integer, external :: grib_f_get_message_size, grib_f_copy_message, grib_f_count_in_file integer, external :: grib_f_write, grib_f_multi_write, grib_f_multi_append integer, external :: grib_f_clone, grib_f_copy_namespace -external :: grib_f_check , grib_f_set_debug +external :: grib_f_check , grib_f_set_debug, grib_f_set_data_quality_checks integer, external :: grib_f_util_sections_copy integer, external :: grib_f_set_definitions_path, grib_f_set_samples_path integer, external :: grib_f_julian_to_datetime, grib_f_datetime_to_julian, grib_f_copy_key diff --git a/fortran/grib_f90_tail.f90 b/fortran/grib_f90_tail.f90 index ffd5b598c..385c93b9e 100644 --- a/fortran/grib_f90_tail.f90 +++ b/fortran/grib_f90_tail.f90 @@ -3211,6 +3211,12 @@ call grib_f_set_debug(dmode) end subroutine grib_set_debug + !> Set data quality check value (0, 1 or 2) + subroutine grib_set_data_quality_checks(val) + integer(kind=kindOfInt), intent(in) :: val + call grib_f_set_data_quality_checks(val) + end subroutine grib_set_data_quality_checks + !> Set the definition path !> diff --git a/fortran/grib_fortran.cc b/fortran/grib_fortran.cc index fd0a0e726..7ea9b6319 100644 --- a/fortran/grib_fortran.cc +++ b/fortran/grib_fortran.cc @@ -1486,8 +1486,8 @@ int any_f_scan_file_(int* fid, int* n) /* this needs a callback to a destructor*/ /* grib_oarray_delete_content(c, info_messages); */ - grib_oarray_delete(c, info_messages); - info_messages=grib_oarray_new(c, 1000, 1000); + grib_oarray_delete(info_messages); + info_messages=grib_oarray_new(1000, 1000); if (f) { while (err!=GRIB_END_OF_FILE) { @@ -1496,7 +1496,7 @@ int any_f_scan_file_(int* fid, int* n) msg->offset = offset; msg->size = olen; - if (err == 0 && data) grib_oarray_push(c, info_messages, msg); + if (err == 0 && data) grib_oarray_push(info_messages, msg); grib_context_free(c, data); } if (err == GRIB_END_OF_FILE) err = 0; @@ -1558,8 +1558,8 @@ int any_f_load_all_from_file_(int* fid, int* n) /* this needs a callback to a destructor*/ /* grib_oarray_delete_content(c, binary_messages); */ - grib_oarray_delete(c, binary_messages); - binary_messages = grib_oarray_new(c, 1000, 1000); + grib_oarray_delete(binary_messages); + binary_messages = grib_oarray_new(1000, 1000); if (f) { while (err != GRIB_END_OF_FILE) { @@ -1568,7 +1568,7 @@ int any_f_load_all_from_file_(int* fid, int* n) msg->data = data; msg->size = olen; - if (err == 0 && data) grib_oarray_push(c, binary_messages, msg); + if (err == 0 && data) grib_oarray_push(binary_messages, msg); } if (err == GRIB_END_OF_FILE) err = 0; } @@ -1604,7 +1604,7 @@ int any_f_new_from_loaded_(int* msgid, int* gid) int codes_f_clear_loaded_from_file_(void) { /* grib_oarray_delete_content(c,binary_messages); */ - grib_oarray_delete(grib_context_get_default(), binary_messages); + grib_oarray_delete(binary_messages); return GRIB_SUCCESS; } @@ -2875,6 +2875,13 @@ void grib_f_set_debug_(int* dmode) grib_context* c = grib_context_get_default(); grib_context_set_debug(c, *dmode); } +/*****************************************************************************/ +void grib_f_set_data_quality_checks_(int* val) +{ + Assert(val); + grib_context* c = grib_context_get_default(); + grib_context_set_data_quality_checks(c, *val); +} /*****************************************************************************/ int grib_f_set_definitions_path_(char* path, int len) diff --git a/fortran/grib_fortran_prototypes.h b/fortran/grib_fortran_prototypes.h index 499ed6237..8fb2f240f 100644 --- a/fortran/grib_fortran_prototypes.h +++ b/fortran/grib_fortran_prototypes.h @@ -310,6 +310,7 @@ int codes_f_bufr_keys_iterator_new_(int* gid,int* iterid); int grib_f_read_file_(int* fid, void* buffer, size_t* nbytes); int codes_f_bufr_keys_iterator_delete_(int* iterid); void grib_f_set_debug_(int* mode); +void grib_f_set_data_quality_checks_(int* val); int grib_f_set_definitions_path_(char* path, int len); int grib_f_read_any_from_file_(int* fid, void* buffer, size_t* nbytes); int any_f_new_from_file_(int* fid, int* gid); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2f6a232fb..aa38b6ad3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,6 +8,12 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. # + +include_directories( + "${CMAKE_CURRENT_SOURCE_DIR}/accessor" + "${CMAKE_CURRENT_SOURCE_DIR}/geo_iterator" + ) + list( APPEND eccodes_src_files accessor/grib_accessor.cc accessor/grib_accessors_list.cc @@ -331,20 +337,20 @@ list( APPEND eccodes_src_files grib_nearest_class_mercator.cc grib_nearest_class_polar_stereographic.cc grib_nearest_class_space_view.cc - grib_iterator_class_polar_stereographic.cc - grib_iterator_class_lambert_azimuthal_equal_area.cc - grib_iterator_class_lambert_conformal.cc - grib_iterator_class_mercator.cc - grib_iterator.cc + geo_iterator/grib_iterator_class_polar_stereographic.cc + geo_iterator/grib_iterator_class_lambert_azimuthal_equal_area.cc + geo_iterator/grib_iterator_class_lambert_conformal.cc + geo_iterator/grib_iterator_class_mercator.cc + geo_iterator/grib_iterator.cc grib_iterator_class.cc - grib_iterator_class_gaussian.cc - grib_iterator_class_gaussian_reduced.cc - grib_iterator_class_latlon_reduced.cc - grib_iterator_class_gen.cc - grib_iterator_class_latlon.cc - grib_iterator_class_regular.cc - grib_iterator_class_space_view.cc - grib_iterator_class_healpix.cc + geo_iterator/grib_iterator_class_gaussian.cc + geo_iterator/grib_iterator_class_gaussian_reduced.cc + geo_iterator/grib_iterator_class_latlon_reduced.cc + geo_iterator/grib_iterator_class_gen.cc + geo_iterator/grib_iterator_class_latlon.cc + geo_iterator/grib_iterator_class_regular.cc + geo_iterator/grib_iterator_class_space_view.cc + geo_iterator/grib_iterator_class_healpix.cc grib_expression.cc codes_util.cc grib_util.cc @@ -357,7 +363,6 @@ list( APPEND eccodes_src_files eccodes_prototypes.h grib_dumper_class.h grib_dumper_factory.h - grib_emoslib.h grib_iterator_class.h grib_iterator_factory.h grib_nearest_class.h diff --git a/src/accessor/grib_accessor.cc b/src/accessor/grib_accessor.cc index 23c52c888..f722e333c 100644 --- a/src/accessor/grib_accessor.cc +++ b/src/accessor/grib_accessor.cc @@ -30,14 +30,13 @@ GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b) int grib_accessor::compare_accessors(grib_accessor* a2, int compare_flags) { - int ret = 0; - long type1 = 0; - long type2 = 0; - int type_mismatch = 0; - grib_accessor_class* c1 = NULL; - grib_accessor* a1 = this; + int ret = 0; + long type1 = 0; + long type2 = 0; + int type_mismatch = 0; + grib_accessor* a1 = this; - if ((compare_flags & GRIB_COMPARE_NAMES) && grib_inline_strcmp(a1->name, a2->name)) + if ((compare_flags & GRIB_COMPARE_NAMES) && grib_inline_strcmp(a1->name_, a2->name_)) return GRIB_NAME_MISMATCH; if (compare_flags & GRIB_COMPARE_TYPES) { @@ -48,8 +47,7 @@ int grib_accessor::compare_accessors(grib_accessor* a2, int compare_flags) } // ret = GRIB_UNABLE_TO_COMPARE_ACCESSORS; - c1 = a1->cclass; - ret = c1->compare(a1, a2); + ret = compare(a2); if (ret == GRIB_VALUE_MISMATCH && type_mismatch) ret = GRIB_TYPE_AND_VALUE_MISMATCH; @@ -59,13 +57,13 @@ int grib_accessor::compare_accessors(grib_accessor* a2, int compare_flags) int grib_accessor::add_attribute(grib_accessor* attr, int nest_if_clash) { - int id = 0; - int idx = 0; + int id = 0; + int idx = 0; grib_accessor* pSame = NULL; grib_accessor* pAloc = this; if (this->has_attributes()) { - pSame = this->get_attribute_index(attr->name, &id); + pSame = this->get_attribute_index(attr->name_, &id); } if (pSame) { @@ -75,27 +73,27 @@ int grib_accessor::add_attribute(grib_accessor* attr, int nest_if_clash) } for (id = 0; id < MAX_ACCESSOR_ATTRIBUTES; id++) { - if (pAloc->attributes[id] == NULL) { + if (pAloc->attributes_[id] == NULL) { // attr->parent=a->parent; - pAloc->attributes[id] = attr; - attr->parent_as_attribute = pAloc; - if (pAloc->same) - attr->same = pAloc->same->get_attribute_index(attr->name, &idx); + pAloc->attributes_[id] = attr; + attr->parent_as_attribute_ = pAloc; + if (pAloc->same_) + attr->same_ = pAloc->same_->get_attribute_index(attr->name_, &idx); - grib_context_log(this->context, GRIB_LOG_DEBUG, "added attribute %s->%s", this->name, attr->name); + grib_context_log(this->context_, GRIB_LOG_DEBUG, "added attribute %s->%s", this->name_, attr->name_); return GRIB_SUCCESS; } } return GRIB_TOO_MANY_ATTRIBUTES; } -grib_accessor* grib_accessor::get_attribute_index(const char* name, int* index) +grib_accessor* grib_accessor::get_attribute_index(const char* name_, int* index) { int i = 0; - while (i < MAX_ACCESSOR_ATTRIBUTES && this->attributes[i]) { - if (!grib_inline_strcmp(this->attributes[i]->name, name)) { + while (i < MAX_ACCESSOR_ATTRIBUTES && this->attributes_[i]) { + if (!grib_inline_strcmp(this->attributes_[i]->name_, name_)) { *index = i; - return this->attributes[i]; + return this->attributes_[i]; } i++; } @@ -104,29 +102,29 @@ grib_accessor* grib_accessor::get_attribute_index(const char* name, int* index) int grib_accessor::has_attributes() { - return this->attributes[0] ? 1 : 0; + return this->attributes_[0] ? 1 : 0; } -grib_accessor* grib_accessor::get_attribute(const char* name) +grib_accessor* grib_accessor::get_attribute(const char* name_) { int index = 0; const char* p = 0; char* basename = NULL; const char* attribute_name = NULL; grib_accessor* acc = NULL; - p = name; + p = name_; while (*(p + 1) != '\0' && (*p != '-' || *(p + 1) != '>')) p++; if (*(p + 1) == '\0') { - return this->get_attribute_index(name, &index); + return this->get_attribute_index(name_, &index); } else { - size_t size = p - name; + size_t size = p - name_; attribute_name = p + 2; - basename = (char*)grib_context_malloc_clear(this->context, size + 1); - basename = (char*)memcpy(basename, name, size); + basename = (char*)grib_context_malloc_clear(this->context_, size + 1); + basename = (char*)memcpy(basename, name_, size); acc = this->get_attribute_index(basename, &index); - grib_context_free(this->context, basename); + grib_context_free(this->context_, basename); if (acc) return acc->get_attribute(attribute_name); else diff --git a/src/accessor/grib_accessor.h b/src/accessor/grib_accessor.h index 7fe8aad19..e42b5e712 100644 --- a/src/accessor/grib_accessor.h +++ b/src/accessor/grib_accessor.h @@ -16,132 +16,94 @@ class grib_accessor { public: - grib_accessor() : - name(nullptr), name_space(nullptr), context(nullptr), h(nullptr), creator(nullptr), - length(0), offset(0), parent(nullptr), next_(nullptr), previous_(nullptr), cclass(nullptr), - flags(0), sub_section(nullptr), dirty(0), same(nullptr), loop(0), vvalue(nullptr), - set(nullptr), parent_as_attribute(nullptr) {} + grib_accessor() : + context_(nullptr), name_(nullptr), class_name_(nullptr), name_space_(nullptr), h_(nullptr), + creator_(nullptr), length_(0), offset_(0), parent_(nullptr), next_(nullptr), previous_(nullptr), + flags_(0), sub_section_(nullptr), dirty_(0), same_(nullptr), loop_(0), vvalue_(nullptr), set_(nullptr), parent_as_attribute_(nullptr) {} + + grib_accessor(const char* name) : + context_(nullptr), name_(name), class_name_(nullptr), name_space_(nullptr), h_(nullptr), + creator_(nullptr), length_(0), offset_(0), parent_(nullptr), next_(nullptr), previous_(nullptr), + flags_(0), sub_section_(nullptr), dirty_(0), same_(nullptr), loop_(0), vvalue_(nullptr), set_(nullptr), parent_as_attribute_(nullptr) {} virtual ~grib_accessor() {} virtual void init_accessor(const long, grib_arguments*) = 0; - virtual void dump(grib_dumper* f) = 0; - virtual int pack_missing() = 0; - //virtual int grib_pack_zero(grib_accessor* a) = 0; - virtual int is_missing_internal() = 0; - virtual int pack_double(const double* v, size_t* len) = 0; - virtual int pack_float(const float* v, size_t* len) = 0; - virtual int pack_expression(grib_expression* e) = 0; - virtual int pack_string(const char* v, size_t* len) = 0; - virtual int pack_string_array(const char** v, size_t* len) = 0; - virtual int pack_long(const long* v, size_t* len) = 0; - virtual int pack_bytes(const unsigned char* v, size_t* len) = 0; - virtual int unpack_bytes(unsigned char* v, size_t* len) = 0; - virtual int unpack_double_subarray(double* v, size_t start, size_t len) = 0; - virtual int unpack_double(double* v, size_t* len) = 0; - virtual int unpack_float(float* v, size_t* len) = 0; - virtual int unpack_double_element(size_t i, double* v) = 0; - virtual int unpack_float_element(size_t i, float* v) = 0; + virtual void dump(grib_dumper* f) = 0; + virtual int pack_missing() = 0; + // virtual int grib_pack_zero(grib_accessor* a) = 0; + virtual int is_missing_internal() = 0; + virtual int pack_double(const double* v, size_t* len) = 0; + virtual int pack_float(const float* v, size_t* len) = 0; + virtual int pack_expression(grib_expression* e) = 0; + virtual int pack_string(const char* v, size_t* len) = 0; + virtual int pack_string_array(const char** v, size_t* len) = 0; + virtual int pack_long(const long* v, size_t* len) = 0; + virtual int pack_bytes(const unsigned char* v, size_t* len) = 0; + virtual int unpack_bytes(unsigned char* v, size_t* len) = 0; + virtual int unpack_double_subarray(double* v, size_t start, size_t len) = 0; + virtual int unpack_double(double* v, size_t* len) = 0; + virtual int unpack_float(float* v, size_t* len) = 0; + virtual int unpack_double_element(size_t i, double* v) = 0; + virtual int unpack_float_element(size_t i, float* v) = 0; virtual int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) = 0; - virtual int unpack_float_element_set(const size_t* index_array, size_t len, float* val_array) = 0; - virtual int unpack_string(char* v, size_t* len) = 0; - virtual int unpack_string_array(char** v, size_t* len) = 0; - virtual int unpack_long(long* v, size_t* len) = 0; - virtual long get_native_type() = 0; - virtual long get_next_position_offset() = 0; - virtual long string_length() = 0; - virtual long byte_offset() = 0; - virtual long byte_count() = 0; - virtual int value_count(long* count) = 0; - virtual int notify_change(grib_accessor* changed) = 0; - virtual grib_accessor* clone(grib_section* s, int* err) = 0; - virtual void update_size(size_t len) = 0; - virtual int nearest_smaller_value(double val, double* nearest) = 0; - virtual size_t preferred_size(int from_handle) = 0; - virtual grib_accessor* next_accessor() = 0; - virtual void resize(size_t new_size) = 0; - virtual void destroy(grib_context* ct) = 0; - + virtual int unpack_float_element_set(const size_t* index_array, size_t len, float* val_array) = 0; + virtual int unpack_string(char* v, size_t* len) = 0; + virtual int unpack_string_array(char** v, size_t* len) = 0; + virtual int unpack_long(long* v, size_t* len) = 0; + virtual long get_native_type() = 0; + virtual long get_next_position_offset() = 0; + virtual size_t string_length() = 0; + virtual long byte_offset() = 0; + virtual long byte_count() = 0; + virtual int value_count(long* count) = 0; + virtual int notify_change(grib_accessor* changed) = 0; + virtual grib_accessor* clone(grib_section* s, int* err) = 0; + virtual void update_size(size_t len) = 0; + virtual int nearest_smaller_value(double val, double* nearest) = 0; + virtual size_t preferred_size(int from_handle) = 0; + virtual grib_accessor* next_accessor() = 0; + virtual void resize(size_t new_size) = 0; + virtual void destroy(grib_context* ct) = 0; virtual int compare_accessors(grib_accessor* a2, int compare_flags); + virtual int compare(grib_accessor*) = 0; virtual int add_attribute(grib_accessor* attr, int nest_if_clash); virtual grib_accessor* get_attribute_index(const char* name, int* index); virtual int has_attributes(); virtual grib_accessor* get_attribute(const char* name); + virtual void init(const long, grib_arguments*) = 0; + virtual void post_init() = 0; + virtual grib_section* sub_section() = 0; + virtual grib_accessor* create_empty_accessor() = 0; + virtual int is_missing() = 0; + virtual long next_offset() = 0; + virtual grib_accessor* next(grib_accessor*, int) = 0; + virtual int clear() = 0; + virtual grib_accessor* make_clone(grib_section*, int*) = 0; - - const char* name; /** < name of the accessor */ - const char* name_space; /** < namespace to which the accessor belongs */ - grib_context* context; - grib_handle* h; - grib_action* creator; /** < action that created the accessor */ - long length; /** < byte length of the accessor */ - long offset; /** < offset of the data in the buffer */ - grib_section* parent; /** < section to which the accessor is attached */ - grib_accessor* next_; /** < next accessor in list */ - grib_accessor* previous_; /** < next accessor in list */ - grib_accessor_class* cclass; /** < behaviour of the accessor */ - unsigned long flags; /** < Various flags */ - grib_section* sub_section; - - const char* all_names[MAX_ACCESSOR_NAMES]= {0,}; /** < name of the accessor */ - const char* all_name_spaces[MAX_ACCESSOR_NAMES] = {0,}; /** < namespace to which the accessor belongs */ - int dirty; - - grib_accessor* same; /** < accessors with the same name */ - long loop; /** < used in lists */ - grib_virtual_value* vvalue; /** < virtual value used when transient flag on **/ - const char* set; - grib_accessor* attributes[MAX_ACCESSOR_ATTRIBUTES] = {0,}; /** < attributes are accessors */ - grib_accessor* parent_as_attribute; -}; - - -class grib_accessor_class -{ public: - const char* name; + // TODO(maee): make private + grib_context* context_ = nullptr; + const char* name_ = nullptr; // name of the accessor + const char* class_name_ = nullptr; // name of the class (Artifact from C version of ecCodes) + const char* name_space_ = nullptr; // namespace to which the accessor belongs + grib_handle* h_ = nullptr; + grib_action* creator_ = nullptr; // action that created the accessor + long length_ = 0; // byte length of the accessor + long offset_ = 0; // offset of the data in the buffer + grib_section* parent_ = nullptr; // section to which the accessor is attached + grib_accessor* next_ = nullptr; // next accessor in list + grib_accessor* previous_ = nullptr; // next accessor in list + unsigned long flags_ = 0; // Various flags + grib_section* sub_section_ = nullptr; - grib_accessor_class(const char* name) : name(name){} - virtual ~grib_accessor_class(){} + const char* all_names_[MAX_ACCESSOR_NAMES] = {0,}; // name of the accessor + const char* all_name_spaces_[MAX_ACCESSOR_NAMES] = {0,}; // namespace to which the accessor belongs + int dirty_ = 0; - virtual grib_accessor* create_empty_accessor() = 0; - virtual grib_section* sub_section(grib_accessor* a) = 0; - virtual int get_native_type(grib_accessor*) = 0; - virtual int pack_missing(grib_accessor*) = 0; - virtual int is_missing(grib_accessor*) = 0; - virtual int pack_bytes(grib_accessor*, const unsigned char*, size_t* len) = 0; - virtual int pack_double(grib_accessor*, const double* val, size_t* len) = 0; - virtual int pack_float(grib_accessor*, const float* val, size_t* len) = 0; - virtual int pack_long(grib_accessor*, const long* val, size_t* len) = 0; - virtual int pack_string(grib_accessor*, const char*, size_t* len) = 0; - virtual int pack_string_array(grib_accessor*, const char**, size_t* len) = 0; - virtual int pack_expression(grib_accessor*, grib_expression*) = 0; - virtual int unpack_bytes(grib_accessor*, unsigned char*, size_t* len) = 0; - virtual int unpack_double(grib_accessor*, double* val, size_t* len) = 0; - virtual int unpack_float(grib_accessor*, float* val, size_t* len) = 0; - virtual int unpack_long(grib_accessor*, long* val, size_t* len) = 0; - virtual int unpack_string(grib_accessor*, char*, size_t* len) = 0; - virtual int unpack_string_array(grib_accessor*, char**, size_t* len) = 0; - virtual size_t string_length(grib_accessor*) = 0; - virtual long byte_count(grib_accessor*) = 0; - virtual long byte_offset(grib_accessor*) = 0; - virtual long next_offset(grib_accessor*) = 0; - virtual int value_count(grib_accessor*, long*) = 0; - virtual void destroy(grib_context*, grib_accessor*) = 0; - virtual void dump(grib_accessor*, grib_dumper*) = 0; - virtual void init(grib_accessor*, const long, grib_arguments*) = 0; - virtual void post_init(grib_accessor*) = 0; - virtual int notify_change(grib_accessor*, grib_accessor*) = 0; - virtual void update_size(grib_accessor*, size_t) = 0; - virtual size_t preferred_size(grib_accessor*, int) = 0; - virtual void resize(grib_accessor*,size_t) = 0; - virtual int nearest_smaller_value (grib_accessor*, double, double*) = 0; - virtual grib_accessor* next(grib_accessor*, int) = 0; - virtual int compare(grib_accessor*, grib_accessor*) = 0; - virtual int unpack_double_element(grib_accessor*, size_t i, double* val) = 0; - virtual int unpack_float_element(grib_accessor*, size_t i, float* val) = 0; - virtual int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) = 0; - virtual int unpack_float_element_set(grib_accessor*, const size_t* index_array, size_t len, float* val_array) = 0; - virtual int unpack_double_subarray(grib_accessor*, double* val, size_t start, size_t len) = 0; - virtual int clear(grib_accessor*) = 0; - virtual grib_accessor* make_clone(grib_accessor*, grib_section*, int*) = 0; + grib_accessor* same_ = nullptr; // accessors with the same name + long loop_ = 0; // used in lists + grib_virtual_value* vvalue_ = nullptr; // virtual value used when transient flag on + const char* set_ = nullptr; + grib_accessor* attributes_[MAX_ACCESSOR_ATTRIBUTES] = {0,}; // attributes are accessors + grib_accessor* parent_as_attribute_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_abstract_long_vector.cc b/src/accessor/grib_accessor_class_abstract_long_vector.cc index 0f4514aa1..bfbd856b6 100644 --- a/src/accessor/grib_accessor_class_abstract_long_vector.cc +++ b/src/accessor/grib_accessor_class_abstract_long_vector.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,5 +10,5 @@ #include "grib_accessor_class_abstract_long_vector.h" -grib_accessor_class_abstract_long_vector_t _grib_accessor_class_abstract_long_vector{"abstract_long_vector"}; -grib_accessor_class* grib_accessor_class_abstract_long_vector = &_grib_accessor_class_abstract_long_vector; +grib_accessor_abstract_long_vector_t _grib_accessor_abstract_long_vector{}; +grib_accessor* grib_accessor_abstract_long_vector = &_grib_accessor_abstract_long_vector; diff --git a/src/accessor/grib_accessor_class_abstract_long_vector.h b/src/accessor/grib_accessor_class_abstract_long_vector.h index a4d1ae4c0..e667b5292 100644 --- a/src/accessor/grib_accessor_class_abstract_long_vector.h +++ b/src/accessor/grib_accessor_class_abstract_long_vector.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,15 +15,13 @@ class grib_accessor_abstract_long_vector_t : public grib_accessor_gen_t { public: - /* Members defined in abstract_long_vector */ - long* v; - long pack_index; - int number_of_elements; -}; + grib_accessor_abstract_long_vector_t() : + grib_accessor_gen_t() { class_name_ = "abstract_long_vector"; } + // grib_accessor* create_empty_accessor() override { return new grib_accessor_abstract_long_vector_t{}; } -class grib_accessor_class_abstract_long_vector_t : public grib_accessor_class_gen_t -{ public: - grib_accessor_class_abstract_long_vector_t(const char* name) : grib_accessor_class_gen_t(name) {} - //grib_accessor* create_empty_accessor() override { return new grib_accessor_abstract_long_vector_t{}; } + // TODO(maee): make private + long* v_ = nullptr; + long pack_index_ = 0; + int number_of_elements_ = 0; }; diff --git a/src/accessor/grib_accessor_class_abstract_vector.cc b/src/accessor/grib_accessor_class_abstract_vector.cc index 2ee141e8f..bca309dd0 100644 --- a/src/accessor/grib_accessor_class_abstract_vector.cc +++ b/src/accessor/grib_accessor_class_abstract_vector.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,5 +10,5 @@ #include "grib_accessor_class_abstract_vector.h" -grib_accessor_class_abstract_vector_t _grib_accessor_class_abstract_vector{"abstract_vector"}; -grib_accessor_class* grib_accessor_class_abstract_vector = &_grib_accessor_class_abstract_vector; +grib_accessor_abstract_vector_t _grib_accessor_abstract_vector{}; +grib_accessor* grib_accessor_abstract_vector = &_grib_accessor_abstract_vector; diff --git a/src/accessor/grib_accessor_class_abstract_vector.h b/src/accessor/grib_accessor_class_abstract_vector.h index b58291db8..9f070981e 100644 --- a/src/accessor/grib_accessor_class_abstract_vector.h +++ b/src/accessor/grib_accessor_class_abstract_vector.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,14 +15,12 @@ class grib_accessor_abstract_vector_t : public grib_accessor_double_t { public: - /* Members defined in abstract_vector */ - double* v; - int number_of_elements; -}; - -class grib_accessor_class_abstract_vector_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_abstract_vector_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_abstract_vector_t() : + grib_accessor_double_t() { class_name_ = "abstract_vector"; } // grib_accessor* create_empty_accessor() override { return new grib_accessor_abstract_vector_t{}; } + +public: + // TODO(maee): make private + double* v_ = nullptr; + int number_of_elements_ = 0; }; diff --git a/src/accessor/grib_accessor_class_ascii.cc b/src/accessor/grib_accessor_class_ascii.cc index b3e9f6a8a..e6d9a3436 100644 --- a/src/accessor/grib_accessor_class_ascii.cc +++ b/src/accessor/grib_accessor_class_ascii.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,101 +10,99 @@ #include "grib_accessor_class_ascii.h" -grib_accessor_class_ascii_t _grib_accessor_class_ascii{ "ascii" }; -grib_accessor_class* grib_accessor_class_ascii = &_grib_accessor_class_ascii; +grib_accessor_ascii_t _grib_accessor_ascii{}; +grib_accessor* grib_accessor_ascii = &_grib_accessor_ascii; - -void grib_accessor_class_ascii_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_ascii_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - a->length = len; - Assert(a->length >= 0); + grib_accessor_gen_t::init(len, arg); + length_ = len; + Assert(length_ >= 0); } -int grib_accessor_class_ascii_t::value_count(grib_accessor* a, long* count) +int grib_accessor_ascii_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_ascii_t::string_length(grib_accessor* a) +size_t grib_accessor_ascii_t::string_length() { - return a->length; + return length_; } -void grib_accessor_class_ascii_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_ascii_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } -int grib_accessor_class_ascii_t::get_native_type(grib_accessor* a) +long grib_accessor_ascii_t::get_native_type() { return GRIB_TYPE_STRING; } -int grib_accessor_class_ascii_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_ascii_t::unpack_string(char* val, size_t* len) { - grib_handle* hand = grib_handle_of_accessor(a); - const size_t alen = a->length; + grib_handle* hand = grib_handle_of_accessor(this); + const size_t alen = length_; if (*len < (alen + 1)) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, alen + 1, *len); + class_name_, name_, alen + 1, *len); *len = alen + 1; return GRIB_BUFFER_TOO_SMALL; } size_t i = 0; for (i = 0; i < alen; i++) - val[i] = hand->buffer->data[a->offset + i]; + val[i] = hand->buffer->data[offset_ + i]; val[i] = 0; *len = i; return GRIB_SUCCESS; } -int grib_accessor_class_ascii_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_ascii_t::pack_string(const char* val, size_t* len) { - grib_handle* hand = grib_handle_of_accessor(a); - const size_t alen = a->length; + grib_handle* hand = grib_handle_of_accessor(this); + const size_t alen = length_; if (len[0] > (alen + 1)) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "pack_string: Wrong size (%zu) for %s, it contains %ld values", - len[0], a->name, a->length + 1); + len[0], name_, length_ + 1); len[0] = 0; return GRIB_BUFFER_TOO_SMALL; } for (size_t i = 0; i < alen; i++) { if (i < len[0]) - hand->buffer->data[a->offset + i] = val[i]; + hand->buffer->data[offset_ + i] = val[i]; else - hand->buffer->data[a->offset + i] = 0; + hand->buffer->data[offset_ + i] = 0; } return GRIB_SUCCESS; } -int grib_accessor_class_ascii_t::pack_long(grib_accessor* a, const long* v, size_t* len) +int grib_accessor_ascii_t::pack_long(const long* v, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack %s as long (It's a string)", a->name); + grib_context_log(this->context_, GRIB_LOG_ERROR, "Should not pack %s as long (It's a string)", name_); return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_ascii_t::pack_double(grib_accessor* a, const double* v, size_t* len) +int grib_accessor_ascii_t::pack_double(const double* v, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack %s as double (It's a string)", a->name); + grib_context_log(this->context_, GRIB_LOG_ERROR, "Should not pack %s as double (It's a string)", name_); return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_ascii_t::unpack_long(grib_accessor* a, long* v, size_t* len) +int grib_accessor_ascii_t::unpack_long(long* v, size_t* len) { char val[1024] = {0,}; size_t l = sizeof(val); size_t i = 0; char* last = NULL; - int err = a->unpack_string(val, &l); + int err = unpack_string(val, &l); if (err) return err; @@ -122,48 +119,48 @@ int grib_accessor_class_ascii_t::unpack_long(grib_accessor* a, long* v, size_t* *v = strtol(val, &last, 10); - grib_context_log(a->context, GRIB_LOG_DEBUG, " Casting string %s to long", a->name); + grib_context_log(this->context_, GRIB_LOG_DEBUG, " Casting string %s to long", name_); return GRIB_SUCCESS; } -int grib_accessor_class_ascii_t::unpack_double(grib_accessor* a, double* v, size_t* len) +int grib_accessor_ascii_t::unpack_double(double* v, size_t* len) { char val[1024]; size_t l = sizeof(val); char* last = NULL; - int err = a->unpack_string(val, &l); + int err = unpack_string(val, &l); if (err) return err; *v = strtod(val, &last); if (*last == 0) { - grib_context_log(a->context, GRIB_LOG_DEBUG, " Casting string %s to long", a->name); + grib_context_log(this->context_, GRIB_LOG_DEBUG, " Casting string %s to long", name_); return GRIB_SUCCESS; } - grib_context_log(a->context, GRIB_LOG_WARNING, "Cannot unpack %s as double. Hint: Try unpacking as string", a->name); + grib_context_log(this->context_, GRIB_LOG_WARNING, "Cannot unpack %s as double. Hint: Try unpacking as string", name_); return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_ascii_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_ascii_t::compare(grib_accessor* b) { int retval = 0; char* aval = 0; char* bval = 0; int err = 0; - size_t alen = a->length + 1; - size_t blen = b->length + 1; + size_t alen = length_ + 1; + size_t blen = b->length_ + 1; if (alen != blen) return GRIB_COUNT_MISMATCH; - aval = (char*)grib_context_malloc(a->context, alen * sizeof(char)); - bval = (char*)grib_context_malloc(b->context, blen * sizeof(char)); + aval = (char*)grib_context_malloc(context_, alen * sizeof(char)); + bval = (char*)grib_context_malloc(b->context_, blen * sizeof(char)); - err = a->unpack_string(aval, &alen); + err = unpack_string(aval, &alen); if (err) return err; err = b->unpack_string(bval, &blen); if (err) return err; @@ -172,8 +169,8 @@ int grib_accessor_class_ascii_t::compare(grib_accessor* a, grib_accessor* b) if (!STR_EQUAL(aval, bval)) retval = GRIB_STRING_VALUE_MISMATCH; - grib_context_free(a->context, aval); - grib_context_free(b->context, bval); + grib_context_free(context_, aval); + grib_context_free(b->context_, bval); return retval; } diff --git a/src/accessor/grib_accessor_class_ascii.h b/src/accessor/grib_accessor_class_ascii.h index 8bef5eaac..1e06aa9da 100644 --- a/src/accessor/grib_accessor_class_ascii.h +++ b/src/accessor/grib_accessor_class_ascii.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,24 +15,19 @@ class grib_accessor_ascii_t : public grib_accessor_gen_t { public: - /* Members defined in ascii */ -}; - -class grib_accessor_class_ascii_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_ascii_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_ascii_t() : + grib_accessor_gen_t() { class_name_ = "ascii"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_ascii_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int compare(grib_accessor*, grib_accessor*) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + int compare(grib_accessor*) override; }; diff --git a/src/accessor/grib_accessor_class_bit.cc b/src/accessor/grib_accessor_class_bit.cc index c1efac202..0bd9ffbf6 100644 --- a/src/accessor/grib_accessor_class_bit.cc +++ b/src/accessor/grib_accessor_class_bit.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,37 +10,34 @@ #include "grib_accessor_class_bit.h" -grib_accessor_class_bit_t _grib_accessor_class_bit{ "bit" }; -grib_accessor_class* grib_accessor_class_bit = &_grib_accessor_class_bit; +grib_accessor_bit_t _grib_accessor_bit{}; +grib_accessor* grib_accessor_bit = &_grib_accessor_bit; - -void grib_accessor_class_bit_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_bit_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_long_t::init(a, len, arg); - grib_accessor_bit_t* self = (grib_accessor_bit_t*)a; - a->length = 0; - self->owner = grib_arguments_get_name(grib_handle_of_accessor(a), arg, 0); - self->bit_index = grib_arguments_get_long(grib_handle_of_accessor(a), arg, 1); + grib_accessor_long_t::init(len, arg); + length_ = 0; + owner_ = grib_arguments_get_name(grib_handle_of_accessor(this), arg, 0); + bit_index_ = grib_arguments_get_long(grib_handle_of_accessor(this), arg, 1); } -int grib_accessor_class_bit_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_bit_t::unpack_long(long* val, size_t* len) { - grib_accessor_bit_t* self = (grib_accessor_bit_t*)a; - int ret = 0; - long data = 0; + int ret = 0; + long data = 0; if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_bit_t: unpack_long: Wrong size for %s, it contains %d values ", a->name, 1); + grib_context_log(context_, GRIB_LOG_ERROR, "grib_accessor_bit_t: unpack_long: Wrong size for %s, it contains %d values ", name_, 1); *len = 1; return GRIB_ARRAY_TOO_SMALL; } - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->owner, &data)) != GRIB_SUCCESS) { + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), owner_, &data)) != GRIB_SUCCESS) { *len = 0; return ret; } - if (data & (1 << self->bit_index)) + if (data & (1 << bit_index_)) *val = 1; else *val = 0; @@ -50,32 +46,30 @@ int grib_accessor_class_bit_t::unpack_long(grib_accessor* a, long* val, size_t* return GRIB_SUCCESS; } -int grib_accessor_class_bit_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_bit_t::pack_long(const long* val, size_t* len) { - grib_accessor_bit_t* self = (grib_accessor_bit_t*)a; - if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_bit_t: pack_long: At least one value to pack for %s", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "grib_accessor_bit_t: pack_long: At least one value to pack for %s", name_); *len = 1; return GRIB_ARRAY_TOO_SMALL; } - grib_accessor* owner = grib_find_accessor(grib_handle_of_accessor(a), self->owner); + grib_accessor* owner = grib_find_accessor(grib_handle_of_accessor(this), owner_); if (!owner) { - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_bit_t: Cannot get the owner %s for computing the bit value of %s", - self->owner, a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "grib_accessor_bit_t: Cannot get the owner %s for computing the bit value of %s", + owner_, name_); *len = 0; return GRIB_NOT_FOUND; } - unsigned char* mdata = grib_handle_of_accessor(a)->buffer->data; + unsigned char* mdata = grib_handle_of_accessor(this)->buffer->data; mdata += owner->byte_offset(); /* Note: In the definitions, flagbit numbers go from 7 to 0 (the bit_index), while WMO convention is from 1 to 8 */ - if (a->context->debug) { + if (context_->debug) { /* Print bit positions from 1 (MSB) */ - fprintf(stderr, "ECCODES DEBUG Setting bit %d in %s to %d\n", 8 - self->bit_index, owner->name, (*val > 0)); + fprintf(stderr, "ECCODES DEBUG Setting bit %d in %s to %d\n", 8 - bit_index_, owner->name_, (*val > 0)); } - grib_set_bit(mdata, 7 - self->bit_index, *val > 0); + grib_set_bit(mdata, 7 - bit_index_, *val > 0); *len = 1; return GRIB_SUCCESS; diff --git a/src/accessor/grib_accessor_class_bit.h b/src/accessor/grib_accessor_class_bit.h index 188d5e370..58e6f8719 100644 --- a/src/accessor/grib_accessor_class_bit.h +++ b/src/accessor/grib_accessor_class_bit.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,14 @@ class grib_accessor_bit_t : public grib_accessor_long_t { public: - /* Members defined in bit */ - const char* owner; - int bit_index; -}; - -class grib_accessor_class_bit_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_bit_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_bit_t() : + grib_accessor_long_t() { class_name_ = "bit"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bit_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* owner_ = nullptr; + int bit_index_ = 0; }; diff --git a/src/accessor/grib_accessor_class_bitmap.cc b/src/accessor/grib_accessor_class_bitmap.cc index 05d9db3bf..206a9f918 100644 --- a/src/accessor/grib_accessor_class_bitmap.cc +++ b/src/accessor/grib_accessor_class_bitmap.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,18 +10,17 @@ #include "grib_accessor_class_bitmap.h" -grib_accessor_class_bitmap_t _grib_accessor_class_bitmap{ "bitmap" }; -grib_accessor_class* grib_accessor_class_bitmap = &_grib_accessor_class_bitmap; +grib_accessor_bitmap_t _grib_accessor_bitmap{}; +grib_accessor* grib_accessor_bitmap = &_grib_accessor_bitmap; -static void compute_size(grib_accessor* a) +void grib_accessor_bitmap_t::compute_size() { - long slen = 0; - long off = 0; - grib_handle* hand = grib_handle_of_accessor(a); + long slen = 0; + long off = 0; + grib_handle* hand = grib_handle_of_accessor(this); - grib_accessor_bitmap_t* self = (grib_accessor_bitmap_t*)a; - grib_get_long_internal(hand, self->offsetbsec, &off); - grib_get_long_internal(hand, self->sLength, &slen); + grib_get_long_internal(hand, offsetbsec_, &off); + grib_get_long_internal(hand, sLength_, &slen); if (slen == 0) { grib_accessor* seclen; @@ -30,68 +28,67 @@ static void compute_size(grib_accessor* a) /* Assume reparsing */ Assert(hand->loader != 0); if (hand->loader != 0) { - seclen = grib_find_accessor(hand, self->sLength); + seclen = grib_find_accessor(hand, sLength_); Assert(seclen); - grib_get_block_length(seclen->parent, &size); + grib_get_block_length(seclen->parent_, &size); slen = size; } } - // printf("compute_size off=%ld slen=%ld a->offset=%ld\n", (long)off,(long)slen,(long)a->offset); + // printf("compute_size off=%ld slen=%ld a->offset_=%ld\n", (long)off,(long)slen,(long)offset_ ); - a->length = off + (slen - a->offset); + length_ = off + (slen - offset_); - if (a->length < 0) { + if (length_ < 0) { /* Assume reparsing */ /*Assert(hand->loader != 0);*/ - a->length = 0; + length_ = 0; } - Assert(a->length >= 0); + Assert(length_ >= 0); } -void grib_accessor_class_bitmap_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_bitmap_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_bytes_t::init(a, len, arg); - grib_accessor_bitmap_t* self = (grib_accessor_bitmap_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_bytes_t::init(len, arg); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - self->tableReference = grib_arguments_get_name(hand, arg, n++); - self->missing_value = grib_arguments_get_name(hand, arg, n++); - self->offsetbsec = grib_arguments_get_name(hand, arg, n++); - self->sLength = grib_arguments_get_name(hand, arg, n++); + tableReference_ = grib_arguments_get_name(hand, arg, n++); + missing_value_ = grib_arguments_get_name(hand, arg, n++); + offsetbsec_ = grib_arguments_get_name(hand, arg, n++); + sLength_ = grib_arguments_get_name(hand, arg, n++); - compute_size(a); + compute_size(); } -long grib_accessor_class_bitmap_t::next_offset(grib_accessor* a) +long grib_accessor_bitmap_t::next_offset() { - return a->byte_offset() + a->byte_count(); + return byte_offset() + byte_count(); } -void grib_accessor_class_bitmap_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_bitmap_t::dump(grib_dumper* dumper) { long len = 0; char label[1024]; - a->value_count(&len); + value_count(&len); snprintf(label, sizeof(label), "Bitmap of %ld values", len); - grib_dump_bytes(dumper, a, label); + grib_dump_bytes(dumper, this, label); } -int grib_accessor_class_bitmap_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_bitmap_t::unpack_long(long* val, size_t* len) { - long pos = a->offset * 8; - long tlen = 0; - const grib_handle* hand = grib_handle_of_accessor(a); + long pos = offset_ * 8; + long tlen = 0; + const grib_handle* hand = grib_handle_of_accessor(this); - int err = a->value_count(&tlen); + int err = value_count(&tlen); if (err) return err; if (*len < tlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %ld values", a->name, tlen); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s, it contains %ld values", name_, tlen); *len = tlen; return GRIB_ARRAY_TOO_SMALL; } @@ -107,7 +104,7 @@ template static int unpack(grib_accessor* a, T* val, size_t* len) { static_assert(std::is_floating_point::value, "Requires floating points numbers"); - long pos = a->offset * 8; + long pos = a->offset_ * 8; long tlen; grib_handle* hand = grib_handle_of_accessor(a); @@ -116,7 +113,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return err; if (*len < tlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %ld values", a->name, tlen); + grib_context_log(a->context_, GRIB_LOG_ERROR, "Wrong size for %s, it contains %ld values", a->name_, tlen); *len = tlen; return GRIB_ARRAY_TOO_SMALL; } @@ -128,62 +125,61 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return GRIB_SUCCESS; } -int grib_accessor_class_bitmap_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_bitmap_t::unpack_double(double* val, size_t* len) { - return unpack(a, val, len); + return unpack(this, val, len); } -int grib_accessor_class_bitmap_t::unpack_float(grib_accessor* a, float* val, size_t* len) +int grib_accessor_bitmap_t::unpack_float(float* val, size_t* len) { - return unpack(a, val, len); + return unpack(this, val, len); } -int grib_accessor_class_bitmap_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_bitmap_t::unpack_double_element(size_t idx, double* val) { - long pos = a->offset * 8; + long pos = offset_ * 8; pos += idx; - *val = (double)grib_decode_unsigned_long(grib_handle_of_accessor(a)->buffer->data, &pos, 1); + *val = (double)grib_decode_unsigned_long(grib_handle_of_accessor(this)->buffer->data, &pos, 1); return GRIB_SUCCESS; } -int grib_accessor_class_bitmap_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_bitmap_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { for (size_t i = 0; i < len; ++i) { - unpack_double_element(a, index_array[i], val_array + i); + unpack_double_element(index_array[i], val_array + i); } return GRIB_SUCCESS; } -void grib_accessor_class_bitmap_t::update_size(grib_accessor* a, size_t s) +void grib_accessor_bitmap_t::update_size(size_t s) { - a->length = s; + length_ = s; } -size_t grib_accessor_class_bitmap_t::string_length(grib_accessor* a) +size_t grib_accessor_bitmap_t::string_length() { - return a->length; + return length_; } -int grib_accessor_class_bitmap_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_bitmap_t::unpack_string(char* val, size_t* len) { - grib_handle* hand = grib_handle_of_accessor(a); - const size_t l = a->length; + grib_handle* hand = grib_handle_of_accessor(this); + const size_t l = length_; if (*len < l) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, l, *len); + class_name_, name_, l, *len); *len = l; return GRIB_BUFFER_TOO_SMALL; } - for (long i = 0; i < a->length; i++) { - val[i] = hand->buffer->data[a->offset + i]; + for (long i = 0; i < length_; i++) { + val[i] = hand->buffer->data[offset_ + i]; } - *len = a->length; + *len = length_; return GRIB_SUCCESS; } diff --git a/src/accessor/grib_accessor_class_bitmap.h b/src/accessor/grib_accessor_class_bitmap.h index b0e480bf2..73f4ba336 100644 --- a/src/accessor/grib_accessor_class_bitmap.h +++ b/src/accessor/grib_accessor_class_bitmap.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,27 +15,28 @@ class grib_accessor_bitmap_t : public grib_accessor_bytes_t { public: - /* Members defined in bitmap */ - const char* tableReference; - const char* missing_value; - const char* offsetbsec; - const char* sLength; -}; + grib_accessor_bitmap_t() : + grib_accessor_bytes_t() { class_name_ = "bitmap"; } + // grib_accessor* create_empty_accessor() override { return new grib_accessor_bitmap_t{}; } + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + long next_offset() override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; -class grib_accessor_class_bitmap_t : public grib_accessor_class_bytes_t -{ -public: - grib_accessor_class_bitmap_t(const char* name) : grib_accessor_class_bytes_t(name) {} - //grib_accessor* create_empty_accessor() override { return new grib_accessor_bitmap_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - long next_offset(grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; +protected: + const char* missing_value_ = nullptr; + +private: + const char* tableReference_ = nullptr; + const char* offsetbsec_ = nullptr; + const char* sLength_ = nullptr; + + void compute_size(); }; diff --git a/src/accessor/grib_accessor_class_bits.cc b/src/accessor/grib_accessor_class_bits.cc index 3e7826bfe..d34e5f401 100644 --- a/src/accessor/grib_accessor_class_bits.cc +++ b/src/accessor/grib_accessor_class_bits.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -10,56 +9,56 @@ */ #include "grib_accessor_class_bits.h" - -grib_accessor_class_bits_t _grib_accessor_class_bits{ "bits" }; -grib_accessor_class* grib_accessor_class_bits = &_grib_accessor_class_bits; +#include "ecc_numeric_limits.h" -void grib_accessor_class_bits_t::init(grib_accessor* a, const long l, grib_arguments* c) +grib_accessor_bits_t _grib_accessor_bits{}; +grib_accessor* grib_accessor_bits = &_grib_accessor_bits; + +void grib_accessor_bits_t::init(const long l, grib_arguments* c) { - grib_accessor_class_gen_t::init(a, l, c); - grib_accessor_bits_t* self = (grib_accessor_bits_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - grib_expression* e = NULL; - int n = 0; + grib_accessor_gen_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + grib_expression* e = NULL; + int n = 0; + referenceValue_ = 0; - self->argument = grib_arguments_get_name(hand, c, n++); - self->start = grib_arguments_get_long(hand, c, n++); - self->len = grib_arguments_get_long(hand, c, n++); - e = grib_arguments_get_expression(hand, c, n++); + argument_ = grib_arguments_get_name(hand, c, n++); + start_ = grib_arguments_get_long(hand, c, n++); + len_ = grib_arguments_get_long(hand, c, n++); + e = grib_arguments_get_expression(hand, c, n++); if (e) { - grib_expression_evaluate_double(hand, e, &(self->referenceValue)); - self->referenceValuePresent = 1; + grib_expression_evaluate_double(hand, e, &(referenceValue_)); + referenceValuePresent_ = 1; } else { - self->referenceValuePresent = 0; + referenceValuePresent_ = 0; } - self->scale = 1; - if (self->referenceValuePresent) { - self->scale = grib_arguments_get_double(hand, c, n++); + scale_ = 1; + if (referenceValuePresent_) { + scale_ = grib_arguments_get_double(hand, c, n++); } - Assert(self->len <= sizeof(long) * 8); + Assert(len_ <= sizeof(long) * 8); - a->length = 0; + length_ = 0; } -int grib_accessor_class_bits_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_bits_t::unpack_long(long* val, size_t* len) { - grib_accessor_bits_t* self = (grib_accessor_bits_t*)a; - grib_accessor* x = NULL; - unsigned char* p = NULL; - grib_handle* h = grib_handle_of_accessor(a); + grib_accessor* x = NULL; + unsigned char* p = NULL; + grib_handle* h = grib_handle_of_accessor(this); long start, length; int ret = 0; if (*len < 1) return GRIB_WRONG_ARRAY_SIZE; - start = self->start; - length = self->len; + start = start_; + length = len_; - x = grib_find_accessor(grib_handle_of_accessor(a), self->argument); + x = grib_find_accessor(grib_handle_of_accessor(this), argument_); if (!x) return GRIB_NOT_FOUND; @@ -71,106 +70,103 @@ int grib_accessor_class_bits_t::unpack_long(grib_accessor* a, long* val, size_t* return ret; } -int grib_accessor_class_bits_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_bits_t::unpack_double(double* val, size_t* len) { - grib_accessor_bits_t* self = (grib_accessor_bits_t*)a; - grib_accessor* x = NULL; - unsigned char* p = NULL; - grib_handle* h = grib_handle_of_accessor(a); + grib_accessor* x = NULL; + unsigned char* p = NULL; + grib_handle* h = grib_handle_of_accessor(this); long start, length; int ret = 0; if (*len < 1) return GRIB_WRONG_ARRAY_SIZE; - start = self->start; - length = self->len; + start = start_; + length = len_; - x = grib_find_accessor(grib_handle_of_accessor(a), self->argument); + x = grib_find_accessor(grib_handle_of_accessor(this), argument_); if (!x) return GRIB_NOT_FOUND; p = h->buffer->data + x->byte_offset(); *val = grib_decode_unsigned_long(p, &start, length); - *val = ((long)*val + self->referenceValue) / self->scale; + *val = ((long)*val + referenceValue_) / scale_; *len = 1; return ret; } -int grib_accessor_class_bits_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_bits_t::pack_double(const double* val, size_t* len) { - grib_accessor_bits_t* self = (grib_accessor_bits_t*)a; - grib_accessor* x = NULL; - grib_handle* h = grib_handle_of_accessor(a); - unsigned char* p = NULL; + grib_accessor* x = NULL; + grib_handle* h = grib_handle_of_accessor(this); + unsigned char* p = NULL; long start, length, lval; if (*len != 1) return GRIB_WRONG_ARRAY_SIZE; - start = self->start; - length = self->len; + start = start_; + length = len_; - x = grib_find_accessor(grib_handle_of_accessor(a), self->argument); + x = grib_find_accessor(grib_handle_of_accessor(this), argument_); if (!x) return GRIB_NOT_FOUND; p = h->buffer->data + x->byte_offset(); - lval = round(*val * self->scale) - self->referenceValue; + lval = round(*val * scale_) - referenceValue_; return grib_encode_unsigned_longb(p, lval, &start, length); } -int grib_accessor_class_bits_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_bits_t::pack_long(const long* val, size_t* len) { - grib_accessor_bits_t* self = (grib_accessor_bits_t*)a; - grib_accessor* x = NULL; - grib_handle* h = grib_handle_of_accessor(a); - unsigned char* p = NULL; + grib_accessor* x = NULL; + grib_handle* h = grib_handle_of_accessor(this); + unsigned char* p = NULL; long start, length, maxval; if (*len != 1) return GRIB_WRONG_ARRAY_SIZE; - if (get_native_type(a) == GRIB_TYPE_DOUBLE) { + if (get_native_type() == GRIB_TYPE_DOUBLE) { /* ECC-402 */ const double dVal = (double)(*val); - return pack_double(a, &dVal, len); + return pack_double(&dVal, len); } - start = self->start; - length = self->len; + start = start_; + length = len_; - x = grib_find_accessor(grib_handle_of_accessor(a), self->argument); + x = grib_find_accessor(grib_handle_of_accessor(this), argument_); if (!x) return GRIB_NOT_FOUND; /* Check the input value */ if (*val < 0) { - grib_context_log(h->context, GRIB_LOG_ERROR, "key=%s: value cannot be negative", a->name); + grib_context_log(h->context, GRIB_LOG_ERROR, "key=%s: value cannot be negative", name_); return GRIB_ENCODING_ERROR; } #ifdef DEBUG { - const long numbits = (x->length) * 8; + const long numbits = (x->length_) * 8; if (start + length > numbits) { grib_context_log(h->context, GRIB_LOG_ERROR, - "grib_accessor_class_bits::pack_long: key=%s (x=%s): " + "grib_accessor_bits::pack_long: key=%s (x=%s): " "Invalid start/length. x->length=%ld, start=%ld, length=%ld", - a->name, x->name, numbits, start, length); + name_, x->name_, numbits, start, length); return GRIB_ENCODING_ERROR; } } #endif - maxval = (1 << length) - 1; + maxval = NumericLimits::max(length); if (*val > maxval) { grib_context_log(h->context, GRIB_LOG_ERROR, "key=%s: Trying to encode value of %ld but the maximum allowable value is %ld (number of bits=%ld)", - a->name, *val, maxval, length); + name_, *val, maxval, length); return GRIB_ENCODING_ERROR; } @@ -178,64 +174,63 @@ int grib_accessor_class_bits_t::pack_long(grib_accessor* a, const long* val, siz return grib_encode_unsigned_longb(p, *val, &start, length); } -int grib_accessor_class_bits_t::get_native_type(grib_accessor* a) +long grib_accessor_bits_t::get_native_type() { - int type = GRIB_TYPE_BYTES; - grib_accessor_bits_t* self = (grib_accessor_bits_t*)a; + int type = GRIB_TYPE_BYTES; - if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) + if (flags_ & GRIB_ACCESSOR_FLAG_STRING_TYPE) type = GRIB_TYPE_STRING; - if (a->flags & GRIB_ACCESSOR_FLAG_LONG_TYPE) + if (flags_ & GRIB_ACCESSOR_FLAG_LONG_TYPE) type = GRIB_TYPE_LONG; - if (self->referenceValuePresent) + if (referenceValuePresent_) type = GRIB_TYPE_DOUBLE; return type; } -int grib_accessor_class_bits_t::unpack_string(grib_accessor* a, char* v, size_t* len) +int grib_accessor_bits_t::unpack_string(char* v, size_t* len) { int ret = 0; double dval = 0; long lval = 0; size_t llen = 1; - switch (get_native_type(a)) { + switch (get_native_type()) { case GRIB_TYPE_LONG: - ret = unpack_long(a, &lval, &llen); + ret = unpack_long(&lval, &llen); snprintf(v, 64, "%ld", lval); *len = strlen(v); break; case GRIB_TYPE_DOUBLE: - ret = unpack_double(a, &dval, &llen); + ret = unpack_double(&dval, &llen); snprintf(v, 64, "%g", dval); *len = strlen(v); break; default: - ret = grib_accessor_class_gen_t::unpack_string(a, v, len); + ret = grib_accessor_gen_t::unpack_string(v, len); } return ret; } -long grib_accessor_class_bits_t::byte_count(grib_accessor* a) +long grib_accessor_bits_t::byte_count() { - grib_context_log(a->context, GRIB_LOG_DEBUG, "byte_count of %s = %ld", a->name, a->length); - return a->length; + grib_context_log(context_, GRIB_LOG_DEBUG, "byte_count of %s = %ld", name_, length_); + return length_; } -int grib_accessor_class_bits_t::unpack_bytes(grib_accessor* a, unsigned char* buffer, size_t* len) +int grib_accessor_bits_t::unpack_bytes(unsigned char* buffer, size_t* len) { - if (*len < a->length) { - *len = a->length; + if (*len < length_) { + *len = length_; return GRIB_ARRAY_TOO_SMALL; } - *len = a->length; + *len = length_; - memcpy(buffer, grib_handle_of_accessor(a)->buffer->data + a->offset, *len); + memcpy(buffer, grib_handle_of_accessor(this)->buffer->data + offset_, *len); return GRIB_SUCCESS; } diff --git a/src/accessor/grib_accessor_class_bits.h b/src/accessor/grib_accessor_class_bits.h index 19ec26b35..cd3a56680 100644 --- a/src/accessor/grib_accessor_class_bits.h +++ b/src/accessor/grib_accessor_class_bits.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,27 +15,24 @@ class grib_accessor_bits_t : public grib_accessor_gen_t { public: - /* Members defined in bits */ - const char* argument; - long start; - long len; - double referenceValue; - double referenceValuePresent; - double scale; -}; - -class grib_accessor_class_bits_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_bits_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_bits_t() : + grib_accessor_gen_t() { class_name_ = "bits"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bits_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_bytes(grib_accessor*, unsigned char*, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - long byte_count(grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int unpack_bytes(unsigned char*, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + long byte_count() override; + void init(const long, grib_arguments*) override; + +private: + const char* argument_ = nullptr; + long start_ = 0; + long len_ = 0; + double referenceValue_ = 0.; + double referenceValuePresent_ = 0.; + double scale_ = 0.; }; diff --git a/src/accessor/grib_accessor_class_bits_per_value.cc b/src/accessor/grib_accessor_class_bits_per_value.cc index dbdef54cb..0023bbcc0 100644 --- a/src/accessor/grib_accessor_class_bits_per_value.cc +++ b/src/accessor/grib_accessor_class_bits_per_value.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,63 +10,57 @@ #include "grib_accessor_class_bits_per_value.h" -grib_accessor_class_bits_per_value_t _grib_accessor_class_bits_per_value{ "bits_per_value" }; -grib_accessor_class* grib_accessor_class_bits_per_value = &_grib_accessor_class_bits_per_value; +grib_accessor_bits_per_value_t _grib_accessor_bits_per_value{}; +grib_accessor* grib_accessor_bits_per_value = &_grib_accessor_bits_per_value; - -void grib_accessor_class_bits_per_value_t::init(grib_accessor* a, const long l, grib_arguments* args) +void grib_accessor_bits_per_value_t::init(const long l, grib_arguments* args) { - grib_accessor_class_long_t::init(a, l, args); - int n = 0; - grib_accessor_bits_per_value_t* self = (grib_accessor_bits_per_value_t*)a; - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->bits_per_value = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + grib_accessor_long_t::init(l, args); + int n = 0; + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + bits_per_value_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -int grib_accessor_class_bits_per_value_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_bits_per_value_t::unpack_long(long* val, size_t* len) { - grib_accessor_bits_per_value_t* self = (grib_accessor_bits_per_value_t*)a; + int ret = 0; + grib_handle* h = grib_handle_of_accessor(this); - int ret = 0; - grib_handle* h = grib_handle_of_accessor(a); - - if ((ret = grib_get_long_internal(h, self->bits_per_value, val)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, bits_per_value_, val)) != GRIB_SUCCESS) return ret; *len = 1; return ret; } -int grib_accessor_class_bits_per_value_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_bits_per_value_t::pack_long(const long* val, size_t* len) { - grib_accessor_bits_per_value_t* self = (grib_accessor_bits_per_value_t*)a; - double* values = NULL; size_t size = 0; int ret = 0; - grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + grib_context* c = context_; + grib_handle* h = grib_handle_of_accessor(this); - if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) return ret; values = (double*)grib_context_malloc(c, size * sizeof(double)); if (!values) return GRIB_OUT_OF_MEMORY; - if ((ret = grib_get_double_array_internal(h, self->values, values, &size)) != GRIB_SUCCESS) { + if ((ret = grib_get_double_array_internal(h, values_, values, &size)) != GRIB_SUCCESS) { grib_context_free(c, values); return ret; } - if ((ret = grib_set_long_internal(h, self->bits_per_value, *val)) != GRIB_SUCCESS) { + if ((ret = grib_set_long_internal(h, bits_per_value_, *val)) != GRIB_SUCCESS) { grib_context_free(c, values); return ret; } - if ((ret = grib_set_double_array_internal(h, self->values, values, size)) != GRIB_SUCCESS) { + if ((ret = grib_set_double_array_internal(h, values_, values, size)) != GRIB_SUCCESS) { grib_context_free(c, values); return ret; } diff --git a/src/accessor/grib_accessor_class_bits_per_value.h b/src/accessor/grib_accessor_class_bits_per_value.h index 741ecd0e5..847c5e5ad 100644 --- a/src/accessor/grib_accessor_class_bits_per_value.h +++ b/src/accessor/grib_accessor_class_bits_per_value.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,14 @@ class grib_accessor_bits_per_value_t : public grib_accessor_long_t { public: - /* Members defined in bits_per_value */ - const char* values; - const char* bits_per_value; -}; - -class grib_accessor_class_bits_per_value_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_bits_per_value_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_bits_per_value_t() : + grib_accessor_long_t() { class_name_ = "bits_per_value"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bits_per_value_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; + const char* bits_per_value_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_blob.cc b/src/accessor/grib_accessor_class_blob.cc index 4629de93a..cf7d86ae8 100644 --- a/src/accessor/grib_accessor_class_blob.cc +++ b/src/accessor/grib_accessor_class_blob.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,37 +10,36 @@ #include "grib_accessor_class_blob.h" -grib_accessor_class_blob_t _grib_accessor_class_blob{ "blob" }; -grib_accessor_class* grib_accessor_class_blob = &_grib_accessor_class_blob; +grib_accessor_blob_t _grib_accessor_blob{}; +grib_accessor* grib_accessor_blob = &_grib_accessor_blob; - -void grib_accessor_class_blob_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_blob_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_get_long_internal(grib_handle_of_accessor(a), - grib_arguments_get_name(a->parent->h, arg, 0), &a->length); - Assert(a->length >= 0); + grib_accessor_gen_t::init(len, arg); + grib_get_long_internal(grib_handle_of_accessor(this), + grib_arguments_get_name(parent_->h, arg, 0), &length_); + Assert(length_ >= 0); } -int grib_accessor_class_blob_t::get_native_type(grib_accessor* a) +long grib_accessor_blob_t::get_native_type() { return GRIB_TYPE_BYTES; } -int grib_accessor_class_blob_t::unpack_bytes(grib_accessor* a, unsigned char* buffer, size_t* len) +int grib_accessor_blob_t::unpack_bytes(unsigned char* buffer, size_t* len) { - if (*len < (size_t)a->length) { - *len = a->length; + if (*len < (size_t)length_) { + *len = length_; return GRIB_ARRAY_TOO_SMALL; } - *len = a->length; + *len = length_; - memcpy(buffer, grib_handle_of_accessor(a)->buffer->data + a->offset, *len); + memcpy(buffer, grib_handle_of_accessor(this)->buffer->data + offset_, *len); return GRIB_SUCCESS; } -void grib_accessor_class_blob_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_blob_t::dump(grib_dumper* dumper) { - grib_dump_bytes(dumper, a, NULL); + grib_dump_bytes(dumper, this, NULL); } diff --git a/src/accessor/grib_accessor_class_blob.h b/src/accessor/grib_accessor_class_blob.h index 10dad4b7b..c976b58bc 100644 --- a/src/accessor/grib_accessor_class_blob.h +++ b/src/accessor/grib_accessor_class_blob.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,11 @@ class grib_accessor_blob_t : public grib_accessor_gen_t { public: - /* Members defined in blob */ -}; - -class grib_accessor_class_blob_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_blob_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_blob_t() : + grib_accessor_gen_t() { class_name_ = "blob"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_blob_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_bytes(grib_accessor*, unsigned char*, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_bytes(unsigned char*, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_budgdate.cc b/src/accessor/grib_accessor_class_budgdate.cc index 3efb0b79e..3b44f62a4 100644 --- a/src/accessor/grib_accessor_class_budgdate.cc +++ b/src/accessor/grib_accessor_class_budgdate.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,35 +10,32 @@ #include "grib_accessor_class_budgdate.h" -grib_accessor_class_budgdate_t _grib_accessor_class_budgdate{ "budgdate" }; -grib_accessor_class* grib_accessor_class_budgdate = &_grib_accessor_class_budgdate; +grib_accessor_budgdate_t _grib_accessor_budgdate{}; +grib_accessor* grib_accessor_budgdate = &_grib_accessor_budgdate; - -void grib_accessor_class_budgdate_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_budgdate_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_budgdate_t* self = (grib_accessor_budgdate_t*)a; - int n = 0; + grib_accessor_long_t::init(l, c); + int n = 0; - self->year = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->month = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->day = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + year_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + month_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + day_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); } -int grib_accessor_class_budgdate_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_budgdate_t::unpack_long(long* val, size_t* len) { - int ret = 0; - grib_accessor_budgdate_t* self = (grib_accessor_budgdate_t*)a; + int ret = 0; long year = 0; long month = 0; long day = 0; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->day, &day)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), day_, &day)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->month, &month)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), month_, &month)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->year, &year)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), year_, &year)) != GRIB_SUCCESS) return ret; if (*len < 1) @@ -51,11 +47,10 @@ int grib_accessor_class_budgdate_t::unpack_long(grib_accessor* a, long* val, siz } /* TODO: Check for a valid date */ -int grib_accessor_class_budgdate_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_budgdate_t::pack_long(const long* val, size_t* len) { - int ret = 0; - long v = val[0]; - grib_accessor_budgdate_t* self = (grib_accessor_budgdate_t*)a; + int ret = 0; + long v = val[0]; long year = 0; long month = 0; @@ -74,11 +69,11 @@ int grib_accessor_class_budgdate_t::pack_long(grib_accessor* a, const long* val, Assert(year < 255); - if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->day, day)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), day_, day)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->month, month)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), month_, month)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->year, year)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), year_, year)) != GRIB_SUCCESS) return ret; return ret; diff --git a/src/accessor/grib_accessor_class_budgdate.h b/src/accessor/grib_accessor_class_budgdate.h index ee18250e2..ee218a34b 100644 --- a/src/accessor/grib_accessor_class_budgdate.h +++ b/src/accessor/grib_accessor_class_budgdate.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,18 +15,15 @@ class grib_accessor_budgdate_t : public grib_accessor_long_t { public: - /* Members defined in budgdate */ - const char* year; - const char* month; - const char* day; -}; - -class grib_accessor_class_budgdate_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_budgdate_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_budgdate_t() : + grib_accessor_long_t() { class_name_ = "budgdate"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_budgdate_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* year_ = nullptr; + const char* month_ = nullptr; + const char* day_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_bufr_data_array.cc b/src/accessor/grib_accessor_class_bufr_data_array.cc index b0b0dc50a..80bae77e7 100644 --- a/src/accessor/grib_accessor_class_bufr_data_array.cc +++ b/src/accessor/grib_accessor_class_bufr_data_array.cc @@ -10,16 +10,22 @@ #include "grib_scaling.h" #include "grib_accessor_class_bufr_data_array.h" +#include "grib_accessor_class_expanded_descriptors.h" +#include "grib_accessor_class_bufr_data_element.h" +#include "grib_accessor_class_variable.h" +#include "ecc_numeric_limits.h" -grib_accessor_class_bufr_data_array_t _grib_accessor_class_bufr_data_array{"bufr_data_array"}; -grib_accessor_class* grib_accessor_class_bufr_data_array = &_grib_accessor_class_bufr_data_array; +grib_accessor_bufr_data_array_t _grib_accessor_bufr_data_array{}; +grib_accessor* grib_accessor_bufr_data_array = &_grib_accessor_bufr_data_array; +typedef int (*codec_element_proc)(grib_context*, grib_accessor_bufr_data_array_t*, int, grib_buffer*, unsigned char*, long*, int, bufr_descriptor*, long, grib_darray*, grib_sarray*); +typedef int (*codec_replication_proc)(grib_context*, grib_accessor_bufr_data_array_t*, int, grib_buffer*, unsigned char*, long*, int, long, grib_darray*, long*); #define MAX_NESTED_REPLICATIONS 8 -#define PROCESS_DECODE 0 +#define PROCESS_DECODE 0 #define PROCESS_NEW_DATA 1 -#define PROCESS_ENCODE 2 +#define PROCESS_ENCODE 2 #define OVERRIDDEN_REFERENCE_VALUES_KEY "inputOverriddenReferenceValues" @@ -27,58 +33,52 @@ grib_accessor_class* grib_accessor_class_bufr_data_array = &_grib_accessor_class /* variable 'err' is assumed to be pointer to int */ /* If BUFRDC mode is enabled, then we tolerate problems like wrong data section length */ #define CHECK_END_DATA_RETURN(ctx, bd, b, size, retval) \ - { \ + { \ *err = check_end_data(ctx, bd, b, size); \ - if (*err != 0 && ctx->bufrdc_mode == 0) \ - return retval; \ + if (*err != 0 && ctx->bufrdc_mode == 0) \ + return retval; \ } -static int process_elements(grib_accessor* a, int flag, long onlySubset, long startSubset, long endSubset); -typedef int (*codec_element_proc)(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, grib_buffer* b, unsigned char* data, long* pos, int i, bufr_descriptor* descriptor, long elementIndex, grib_darray* dval, grib_sarray* sval); -typedef int (*codec_replication_proc)(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, grib_buffer* buff, unsigned char* data, long* pos, int i, long elementIndex, grib_darray* dval, long* numberOfRepetitions); -static int create_keys(const grib_accessor* a, long onlySubset, long startSubset, long endSubset); -static void restart_bitmap(grib_accessor_bufr_data_array_t* self) +void grib_accessor_bufr_data_array_t::restart_bitmap() { - self->bitmapCurrent = -1; - self->bitmapCurrentElementsDescriptorsIndex = self->bitmapStartElementsDescriptorsIndex - 1; + bitmapCurrent_ = -1; + bitmapCurrentElementsDescriptorsIndex_ = bitmapStartElementsDescriptorsIndex_ - 1; } -static void cancel_bitmap(grib_accessor_bufr_data_array_t* self) +void grib_accessor_bufr_data_array_t::cancel_bitmap() { - self->bitmapCurrent = -1; - self->bitmapStart = -1; + bitmapCurrent_ = -1; + bitmapStart_ = -1; } -static int is_bitmap_start_defined(grib_accessor_bufr_data_array_t* self) +int grib_accessor_bufr_data_array_t::is_bitmap_start_defined() { - return self->bitmapStart == -1 ? 0 : 1; + return bitmapStart_ == -1 ? 0 : 1; } -static size_t get_length(grib_accessor* a) +size_t grib_accessor_bufr_data_array_t::get_length() { - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - size_t len = 0; + size_t len = 0; + const grib_handle* h = grib_handle_of_accessor(this); - const grib_handle* h = grib_handle_of_accessor(a); - - grib_get_size(h, self->bufrDataEncodedName, &len); + grib_get_size(h, bufrDataEncodedName_, &len); return len; } /* Operator 203YYY: Store the TableB code and changed reference value in linked list */ -static void tableB_override_store_ref_val(grib_context* c, grib_accessor_bufr_data_array_t* self, int code, long new_ref_val) +void grib_accessor_bufr_data_array_t::tableB_override_store_ref_val(grib_context* c, int code, long new_ref_val) { bufr_tableb_override* tb = (bufr_tableb_override*)grib_context_malloc_clear(c, sizeof(bufr_tableb_override)); tb->code = code; tb->new_ref_val = new_ref_val; - if (!self->tableb_override) { - self->tableb_override = tb; + if (!tableb_override_) { + tableb_override_ = tb; } else { /*Add to end of linked list*/ - bufr_tableb_override* q = self->tableb_override; + bufr_tableb_override* q = tableb_override_; while (q->next) q = q->next; q->next = tb; @@ -86,9 +86,9 @@ static void tableB_override_store_ref_val(grib_context* c, grib_accessor_bufr_da } /* Operator 203YYY: Retrieve changed reference value from linked list */ -static int tableB_override_get_ref_val(grib_accessor_bufr_data_array_t* self, int code, long* out_ref_val) +int grib_accessor_bufr_data_array_t::tableB_override_get_ref_val(int code, long* out_ref_val) { - bufr_tableb_override* p = self->tableb_override; + bufr_tableb_override* p = tableb_override_; while (p) { if (p->code == code) { *out_ref_val = p->new_ref_val; @@ -100,25 +100,25 @@ static int tableB_override_get_ref_val(grib_accessor_bufr_data_array_t* self, in } /* Operator 203YYY: Clear and free linked list */ -static void tableB_override_clear(grib_context* c, grib_accessor_bufr_data_array_t* self) +void grib_accessor_bufr_data_array_t::tableB_override_clear(grib_context* c) { - bufr_tableb_override* tb = self->tableb_override; + bufr_tableb_override* tb = tableb_override_; while (tb) { bufr_tableb_override* n = tb->next; grib_context_free(c, tb); tb = n; } - self->tableb_override = NULL; + tableb_override_ = NULL; } /* Operator 203YYY: Copy contents of linked list to the transient array key */ -static int tableB_override_set_key(grib_handle* h, grib_accessor_bufr_data_array_t* self) +int grib_accessor_bufr_data_array_t::tableB_override_set_key(grib_handle* h) { int err = GRIB_SUCCESS; size_t size = 0; long* refVals = NULL; - grib_iarray* refValArray = grib_iarray_new(h->context, 10, 10); - bufr_tableb_override* p = self->tableb_override; + grib_iarray* refValArray = grib_iarray_new(10, 10); + bufr_tableb_override* p = tableb_override_; while (p) { grib_iarray_push(refValArray, p->new_ref_val); p = p->next; @@ -135,8 +135,8 @@ static int tableB_override_set_key(grib_handle* h, grib_accessor_bufr_data_array /* Check numBits is sufficient for entries in the overridden reference values list*/ static int check_overridden_reference_values(const grib_context* c, long* refValList, size_t refValListSize, int numBits) { - const long maxval = (1 << (numBits - 1)) - 1; - const long minval = -(1 << (numBits - 1)); + const long maxval = NumericLimits::max(numBits); + const long minval = NumericLimits::min(numBits); size_t i = 0; for (i = 0; i < refValListSize; ++i) { grib_context_log(c, GRIB_LOG_DEBUG, "check_overridden_reference_values: refValList[%ld]=%ld", i, refValList[i]); @@ -151,7 +151,7 @@ static int check_overridden_reference_values(const grib_context* c, long* refVal // void tableB_override_dump(grib_accessor_bufr_data_array_t *self) // { -// bufr_tableb_override* p = self->tableb_override; +// bufr_tableb_override* p = self->tableb_override_ ; // int i = 1; // while (p) { // printf("ECCODES DEBUG: Table B Override: [%d] code=%d, rv=%ld\n", i, p->code, p->new_ref_val); @@ -163,45 +163,69 @@ static int check_overridden_reference_values(const grib_context* c, long* refVal #define DYN_ARRAY_SIZE_INIT 1000 /* Initial size for grib_iarray_new and grib_darray_new */ #define DYN_ARRAY_SIZE_INCR 1000 /* Increment size for grib_iarray_new and grib_darray_new */ -void grib_accessor_class_bufr_data_array_t::init(grib_accessor* a, const long v, grib_arguments* params) +void grib_accessor_bufr_data_array_t::init(const long v, grib_arguments* params) { - grib_accessor_class_gen_t::init(a, v, params); - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - int n = 0; - const char* dataKeysName = NULL; - grib_accessor* dataKeysAcc = NULL; + grib_accessor_gen_t::init(v, params); + int n = 0; + const char* dataKeysName = NULL; + grib_accessor* dataKeysAcc = NULL; - self->bufrDataEncodedName = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - self->numberOfSubsetsName = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - self->expandedDescriptorsName = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - self->flagsName = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - self->elementsDescriptorsIndexName = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - self->compressedDataName = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - dataKeysName = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); + unitsName_ = NULL; + canBeMissing_ = NULL; + numberOfSubsets_ = 0; + compressedData_ = 0; + bitmapStartElementsDescriptorsIndex_ = 0; + bitmapCurrentElementsDescriptorsIndex_ = 0; + bitmapSize_ = 0; + bitmapStart_ = 0; + bitmapCurrent_ = 0; + dataAccessors_ = NULL; + nInputBitmap_ = 0; + iInputBitmap_ = 0; + inputReplications_ = NULL; + nInputReplications_ = 0; + iInputReplications_ = 0; + inputExtendedReplications_ = NULL; + nInputExtendedReplications_ = 0; + iInputExtendedReplications_ = 0; + inputShortReplications_ = NULL; + nInputShortReplications_ = 0; + iInputShortReplications_ = 0; + iss_list_ = NULL; + tempStrings_ = NULL; - dataKeysAcc = grib_find_accessor(grib_handle_of_accessor(a), dataKeysName); - self->dataKeys = dataKeysAcc->parent; - self->do_decode = 1; - self->elementsDescriptorsIndex = 0; - self->numericValues = 0; - self->tempDoubleValues = 0; - self->stringValues = 0; - cancel_bitmap(self); - self->expanded = 0; - self->expandedAccessor = 0; - self->dataAccessorsTrie = 0; - self->change_ref_value_operand = 0; /* Operator 203YYY: 0, 255 or YYY */ - self->refValListSize = 0; /* Operator 203YYY: size of overridden reference values array */ - self->refValList = NULL; /* Operator 203YYY: overridden reference values array */ - self->refValIndex = 0; /* Operator 203YYY: index into overridden reference values array */ - self->tableb_override = NULL; /* Operator 203YYY: Table B lookup linked list */ - self->set_to_missing_if_out_of_range = 0; /* By default fail if out of range */ - a->length = 0; - self->bitsToEndData = get_length(a) * 8; - self->unpackMode = CODES_BUFR_UNPACK_STRUCTURE; - self->inputBitmap = NULL; - /* Assert(a->length>=0); */ + bufrDataEncodedName_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + numberOfSubsetsName_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + expandedDescriptorsName_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + flagsName_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + elementsDescriptorsIndexName_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + compressedDataName_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + dataKeysName = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + + dataKeysAcc = grib_find_accessor(grib_handle_of_accessor(this), dataKeysName); + dataKeys_ = dataKeysAcc->parent_; + do_decode_ = 1; + elementsDescriptorsIndex_ = 0; + numericValues_ = 0; + tempDoubleValues_ = 0; + stringValues_ = 0; + cancel_bitmap(); + expanded_ = 0; + expandedAccessor_ = 0; + dataAccessorsTrie_ = 0; + change_ref_value_operand_ = 0; /* Operator 203YYY: 0, 255 or YYY */ + refValListSize_ = 0; /* Operator 203YYY: size of overridden reference values array */ + refValList_ = NULL; /* Operator 203YYY: overridden reference values array */ + refValIndex_ = 0; /* Operator 203YYY: index into overridden reference values array */ + tableb_override_ = NULL; /* Operator 203YYY: Table B lookup linked list */ + set_to_missing_if_out_of_range_ = 0; /* By default fail if out of range */ + + length_ = 0; + bitsToEndData_ = get_length() * 8; + unpackMode_ = CODES_BUFR_UNPACK_STRUCTURE; + inputBitmap_ = NULL; + /* Assert(length_ >=0); */ } // void clean_string(char* s,int len) @@ -214,13 +238,13 @@ void grib_accessor_class_bufr_data_array_t::init(grib_accessor* a, const long v, // } // } -static int check_end_data(grib_context* c, bufr_descriptor* bd, grib_accessor_bufr_data_array_t* self, int size) +int check_end_data(grib_context* c, bufr_descriptor* bd, grib_accessor_bufr_data_array_t* self, int size) { - const int saved_bitsToEndData = self->bitsToEndData; + const int saved_bitsToEndData = self->bitsToEndData_; if (c->debug == 1) - grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data decoding: \tbitsToEndData=%d elementSize=%d", self->bitsToEndData, size); - self->bitsToEndData -= size; - if (self->bitsToEndData < 0) { + grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data decoding: \tbitsToEndData=%d elementSize=%d", self->bitsToEndData_, size); + self->bitsToEndData_ -= size; + if (self->bitsToEndData_ < 0) { grib_context_log(c, GRIB_LOG_ERROR, "BUFR data decoding: Number of bits left=%d but element size=%d", saved_bitsToEndData, size); if (bd) grib_context_log(c, GRIB_LOG_ERROR, "BUFR data decoding: code=%06ld key=%s", bd->code, bd->shortName); @@ -229,184 +253,177 @@ static int check_end_data(grib_context* c, bufr_descriptor* bd, grib_accessor_bu return 0; } -void self_clear(grib_context* c, grib_accessor_bufr_data_array_t* self) +void grib_accessor_bufr_data_array_t::self_clear() { - grib_context_free(c, self->canBeMissing); - grib_vdarray_delete_content(c, self->numericValues); - grib_vdarray_delete(c, self->numericValues); + grib_context_free(context_, canBeMissing_); + grib_vdarray_delete_content(numericValues_); + grib_vdarray_delete(numericValues_); - if (self->stringValues) { - /*printf("dbg self_clear: clear %p\n", (void*)(self->stringValues));*/ - grib_vsarray_delete_content(c, self->stringValues); - grib_vsarray_delete(c, self->stringValues); - self->stringValues = NULL; + if (stringValues_) { + /*printf("dbg self_clear: clear %p\n", (void*)(stringValues_ ));*/ + grib_vsarray_delete_content(stringValues_); + grib_vsarray_delete(stringValues_); + stringValues_ = NULL; } - grib_viarray_delete_content(c, self->elementsDescriptorsIndex); - grib_viarray_delete(c, self->elementsDescriptorsIndex); - if (self->inputReplications) - grib_context_free(c, self->inputReplications); - if (self->inputExtendedReplications) - grib_context_free(c, self->inputExtendedReplications); - if (self->inputShortReplications) - grib_context_free(c, self->inputShortReplications); - self->change_ref_value_operand = 0; - self->refValListSize = 0; - if (self->refValList) - grib_context_free(c, self->refValList); - self->refValIndex = 0; - tableB_override_clear(c, self); - self->set_to_missing_if_out_of_range = 0; - if (self->inputBitmap) grib_context_free(c, self->inputBitmap); + grib_viarray_delete_content(elementsDescriptorsIndex_); + grib_viarray_delete(elementsDescriptorsIndex_); + if (inputReplications_) + grib_context_free(context_, inputReplications_); + if (inputExtendedReplications_) + grib_context_free(context_, inputExtendedReplications_); + if (inputShortReplications_) + grib_context_free(context_, inputShortReplications_); + change_ref_value_operand_ = 0; + refValListSize_ = 0; + if (refValList_) + grib_context_free(context_, refValList_); + refValIndex_ = 0; + tableB_override_clear(context_); + set_to_missing_if_out_of_range_ = 0; + if (inputBitmap_) grib_context_free(context_, inputBitmap_); } -int grib_accessor_class_bufr_data_array_t::get_native_type(grib_accessor* a) +long grib_accessor_bufr_data_array_t::get_native_type() { return GRIB_TYPE_DOUBLE; } -long grib_accessor_class_bufr_data_array_t::byte_count(grib_accessor* a) +long grib_accessor_bufr_data_array_t::byte_count() { return 0; } -long grib_accessor_class_bufr_data_array_t::byte_offset(grib_accessor* a) +long grib_accessor_bufr_data_array_t::byte_offset() { - return a->offset; + return offset_; } -long grib_accessor_class_bufr_data_array_t::next_offset(grib_accessor* a) +long grib_accessor_bufr_data_array_t::next_offset() { - return a->offset; + return offset_; } -int grib_accessor_class_bufr_data_array_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_bufr_data_array_t::pack_long(const long* val, size_t* len) { - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - self->do_decode = 1; + do_decode_ = 1; return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_bufr_data_array_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_bufr_data_array_t::pack_double(const double* val, size_t* len) { - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - self->do_decode = 1; - return process_elements(a, PROCESS_ENCODE, 0, 0, 0); + do_decode_ = 1; + return process_elements(PROCESS_ENCODE, 0, 0, 0); } -grib_vsarray* accessor_bufr_data_array_get_stringValues(grib_accessor* a) +grib_vsarray* grib_accessor_bufr_data_array_t::accessor_bufr_data_array_get_stringValues() { - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - process_elements(a, PROCESS_DECODE, 0, 0, 0); - return self->stringValues; + process_elements(PROCESS_DECODE, 0, 0, 0); + return stringValues_; } -grib_accessors_list* accessor_bufr_data_array_get_dataAccessors(grib_accessor* a) +grib_accessors_list* grib_accessor_bufr_data_array_t::accessor_bufr_data_array_get_dataAccessors() { - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - return self->dataAccessors; + return dataAccessors_; } -grib_trie_with_rank* accessor_bufr_data_array_get_dataAccessorsTrie(grib_accessor* a) +grib_trie_with_rank* grib_accessor_bufr_data_array_t::accessor_bufr_data_array_get_dataAccessorsTrie() { - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - return self->dataAccessorsTrie; + return dataAccessorsTrie_; } -void accessor_bufr_data_array_set_unpackMode(grib_accessor* a, int unpackMode) +void grib_accessor_bufr_data_array_t::accessor_bufr_data_array_set_unpackMode(int unpackMode) { - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - self->unpackMode = unpackMode; + unpackMode_ = unpackMode; } -static int get_descriptors(grib_accessor* a) +int grib_accessor_bufr_data_array_t::get_descriptors() { - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - int ret = 0, i, numberOfDescriptors; - grib_handle* h = grib_handle_of_accessor(a); - grib_context* c = a->context; + int ret = 0, i, numberOfDescriptors; + grib_handle* h = grib_handle_of_accessor(this); + grib_context* c = context_; - if (!self->expandedAccessor) - self->expandedAccessor = grib_find_accessor(grib_handle_of_accessor(a), self->expandedDescriptorsName); - self->expanded = grib_accessor_class_expanded_descriptors_get_expanded(self->expandedAccessor, &ret); + if (!expandedAccessor_) + expandedAccessor_ = dynamic_cast(grib_find_accessor(grib_handle_of_accessor(this), expandedDescriptorsName_)); + expanded_ = expandedAccessor_->grib_accessor_expanded_descriptors_get_expanded(&ret); if (ret != GRIB_SUCCESS) return ret; - numberOfDescriptors = grib_bufr_descriptors_array_used_size(self->expanded); - if (self->canBeMissing ) grib_context_free(c, self->canBeMissing); - self->canBeMissing = (int*)grib_context_malloc_clear(c, numberOfDescriptors * sizeof(int)); + numberOfDescriptors = grib_bufr_descriptors_array_used_size(expanded_); + if (canBeMissing_) grib_context_free(c, canBeMissing_); + canBeMissing_ = (int*)grib_context_malloc_clear(c, numberOfDescriptors * sizeof(int)); for (i = 0; i < numberOfDescriptors; i++) - self->canBeMissing[i] = grib_bufr_descriptor_can_be_missing(self->expanded->v[i]); + canBeMissing_[i] = grib_bufr_descriptor_can_be_missing(expanded_->v[i]); - ret = grib_get_long(h, self->numberOfSubsetsName, &(self->numberOfSubsets)); + ret = grib_get_long(h, numberOfSubsetsName_, &(numberOfSubsets_)); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long(h, self->compressedDataName, &(self->compressedData)); + ret = grib_get_long(h, compressedDataName_, &(compressedData_)); return ret; } -static int decode_string_array(grib_context* c, unsigned char* data, long* pos, bufr_descriptor* bd, - grib_accessor_bufr_data_array_t* self) +int grib_accessor_bufr_data_array_t::decode_string_array(grib_context* c, unsigned char* data, long* pos, bufr_descriptor* bd) { int ret = 0; int* err = &ret; char* sval = 0; int j, modifiedWidth, width; - grib_sarray* sa = grib_sarray_new(c, self->numberOfSubsets, 10); + grib_sarray* sa = grib_sarray_new(numberOfSubsets_, 10); int bufr_multi_element_constant_arrays = c->bufr_multi_element_constant_arrays; modifiedWidth = bd->width; sval = (char*)grib_context_malloc_clear(c, modifiedWidth / 8 + 1); - CHECK_END_DATA_RETURN(c, bd, self, modifiedWidth, *err); + CHECK_END_DATA_RETURN(c, bd, this, modifiedWidth, *err); + if (*err) { - grib_sarray_push(c, sa, sval); - grib_vsarray_push(c, self->stringValues, sa); + grib_sarray_push(sa, sval); + grib_vsarray_push(stringValues_, sa); return ret; } grib_decode_string(data, pos, modifiedWidth / 8, sval); - CHECK_END_DATA_RETURN(c, bd, self, 6, *err); + CHECK_END_DATA_RETURN(c, bd, this, 6, *err); if (*err) { - grib_sarray_push(c, sa, sval); - grib_vsarray_push(c, self->stringValues, sa); + grib_sarray_push(sa, sval); + grib_vsarray_push(stringValues_, sa); return ret; } width = grib_decode_unsigned_long(data, pos, 6); if (width) { - CHECK_END_DATA_RETURN(c, bd, self, width * 8 * self->numberOfSubsets, *err); + CHECK_END_DATA_RETURN(c, bd, this, width * 8 * numberOfSubsets_, *err); if (*err) { - grib_sarray_push(c, sa, sval); - grib_vsarray_push(c, self->stringValues, sa); + grib_sarray_push(sa, sval); + grib_vsarray_push(stringValues_, sa); return ret; } grib_context_free(c, sval); - for (j = 0; j < self->numberOfSubsets; j++) { + for (j = 0; j < numberOfSubsets_; j++) { sval = (char*)grib_context_malloc_clear(c, width + 1); grib_decode_string(data, pos, width, sval); - grib_sarray_push(c, sa, sval); + grib_sarray_push(sa, sval); } } else { if (bufr_multi_element_constant_arrays) { - for (j = 0; j < self->numberOfSubsets; j++) { + for (j = 0; j < numberOfSubsets_; j++) { char* pStr = sval; if (j > 0) pStr = strdup(sval); - grib_sarray_push(c, sa, pStr); + grib_sarray_push(sa, pStr); } } else { - grib_sarray_push(c, sa, sval); + grib_sarray_push(sa, sval); } } - grib_vsarray_push(c, self->stringValues, sa); + grib_vsarray_push(stringValues_, sa); return ret; } -grib_darray* decode_double_array(grib_context* c, unsigned char* data, long* pos, - bufr_descriptor* bd, int canBeMissing, - grib_accessor_bufr_data_array_t* self, int* err) +grib_darray* grib_accessor_bufr_data_array_t::decode_double_array(grib_context* c, unsigned char* data, long* pos, + bufr_descriptor* bd, int canBeMissing, + int* err) { grib_darray* ret = NULL; int j; @@ -421,13 +438,13 @@ grib_darray* decode_double_array(grib_context* c, unsigned char* data, long* pos modifiedFactor = bd->factor; modifiedWidth = bd->width; - CHECK_END_DATA_RETURN(c, bd, self, modifiedWidth + 6, NULL); + CHECK_END_DATA_RETURN(c, bd, this, modifiedWidth + 6, NULL); if (*err) { dval = GRIB_MISSING_DOUBLE; lval = 0; grib_context_log(c, GRIB_LOG_DEBUG, " modifiedWidth=%d lval=%ld dval=%g", modifiedWidth, lval, dval); - ret = grib_darray_new(c, DYN_ARRAY_SIZE_INIT, DYN_ARRAY_SIZE_INCR); - grib_darray_push(c, ret, dval); + ret = grib_darray_new(DYN_ARRAY_SIZE_INIT, DYN_ARRAY_SIZE_INCR); + grib_darray_push(ret, dval); *err = 0; return ret; } @@ -435,19 +452,19 @@ grib_darray* decode_double_array(grib_context* c, unsigned char* data, long* pos localReference = (long)lval + modifiedReference; localWidth = grib_decode_unsigned_long(data, pos, 6); grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data decoding: \tlocalWidth=%d", localWidth); - ret = grib_darray_new(c, self->numberOfSubsets, 50); + ret = grib_darray_new(numberOfSubsets_, 50); if (localWidth) { - CHECK_END_DATA_RETURN(c, bd, self, localWidth * self->numberOfSubsets, NULL); + CHECK_END_DATA_RETURN(c, bd, this, localWidth * numberOfSubsets_, NULL); if (*err) { dval = GRIB_MISSING_DOUBLE; lval = 0; grib_context_log(c, GRIB_LOG_DEBUG, " modifiedWidth=%d lval=%ld dval=%g", modifiedWidth, lval, dval); - ret = grib_darray_new(c, DYN_ARRAY_SIZE_INIT, DYN_ARRAY_SIZE_INCR); - grib_darray_push(c, ret, dval); + ret = grib_darray_new(DYN_ARRAY_SIZE_INIT, DYN_ARRAY_SIZE_INCR); + grib_darray_push(ret, dval); *err = 0; return ret; } - for (j = 0; j < self->numberOfSubsets; j++) { + for (j = 0; j < numberOfSubsets_; j++) { lval = grib_decode_size_t(data, pos, localWidth); if (canBeMissing && grib_is_all_bits_one(lval, localWidth)) { dval = GRIB_MISSING_DOUBLE; @@ -455,7 +472,7 @@ grib_darray* decode_double_array(grib_context* c, unsigned char* data, long* pos else { dval = ((long)lval + localReference) * modifiedFactor; } - grib_darray_push(c, ret, dval); + grib_darray_push(ret, dval); } } else { @@ -474,33 +491,32 @@ grib_darray* decode_double_array(grib_context* c, unsigned char* data, long* pos if (bufr_multi_element_constant_arrays) { grib_context_log(c, GRIB_LOG_DEBUG, " modifiedWidth=%d lval=%ld dval=%g (const array multi values) %6.6ld", modifiedWidth, lval, dval, bd->code); - for (j = 0; j < self->numberOfSubsets; j++) { - grib_darray_push(c, ret, dval); + for (j = 0; j < numberOfSubsets_; j++) { + grib_darray_push(ret, dval); } } else { grib_context_log(c, GRIB_LOG_DEBUG, " modifiedWidth=%d lval=%ld dval=%g (const array single value) %6.6ld", modifiedWidth, lval, dval, bd->code); - grib_darray_push(c, ret, dval); + grib_darray_push(ret, dval); } } return ret; } -static int encode_string_array(grib_context* c, grib_buffer* buff, long* pos, bufr_descriptor* bd, - grib_accessor_bufr_data_array_t* self, grib_sarray* stringValues) +int grib_accessor_bufr_data_array_t::encode_string_array(grib_context* c, grib_buffer* buff, long* pos, bufr_descriptor* bd, grib_sarray* stringValues) { int err = 0, n, ival; int k, j, modifiedWidth, width; - if (self->iss_list == NULL) { - grib_context_log(c, GRIB_LOG_ERROR, "encode_string_array: self->iss_list==NULL"); + if (iss_list_ == NULL) { + grib_context_log(c, GRIB_LOG_ERROR, "encode_string_array: iss_list_ ==NULL"); return GRIB_INTERNAL_ERROR; } if (!stringValues) { return GRIB_INTERNAL_ERROR; } - n = grib_iarray_used_size(self->iss_list); + n = grib_iarray_used_size(iss_list_); if (n <= 0) return GRIB_NO_VALUES; @@ -510,7 +526,7 @@ static int encode_string_array(grib_context* c, grib_buffer* buff, long* pos, bu ival = 0; } else { - ival = self->iss_list->v[0]; + ival = iss_list_->v[0]; } if (n > grib_sarray_used_size(stringValues)) @@ -532,7 +548,7 @@ static int encode_string_array(grib_context* c, grib_buffer* buff, long* pos, bu if (width) { grib_buffer_set_ulength_bits(c, buff, buff->ulength_bits + width * n); for (j = 0; j < n; j++) { - k = self->iss_list->v[j]; + k = iss_list_->v[j]; err = grib_encode_string(buff->data, pos, width / 8, stringValues->v[k]); if (err) { grib_context_log(c, GRIB_LOG_ERROR, "encode_string_array: %s. Failed to encode '%s'", @@ -570,8 +586,8 @@ static int descriptor_get_min_max(bufr_descriptor* bd, long width, long referenc return GRIB_SUCCESS; } -static int encode_double_array(grib_context* c, grib_buffer* buff, long* pos, bufr_descriptor* bd, - grib_accessor_bufr_data_array_t* self, grib_darray* dvalues) +int grib_accessor_bufr_data_array_t::encode_double_array(grib_context* c, grib_buffer* buff, long* pos, bufr_descriptor* bd, + grib_darray* dvalues) { int err = 0; int j, i; @@ -582,16 +598,16 @@ static int encode_double_array(grib_context* c, grib_buffer* buff, long* pos, bu size_t ii, index_of_min, index_of_max; int nvals = 0; double min = 0, max = 0, maxAllowed, minAllowed; - double* v = NULL; - double* values = NULL; + double* v = NULL; + double* values = NULL; bool thereIsAMissing = false; - bool is_constant = true; + bool is_constant = true; double val0; /* ECC-379, ECC-830 */ - const int dont_fail_if_out_of_range = self->set_to_missing_if_out_of_range; + const int dont_fail_if_out_of_range = set_to_missing_if_out_of_range_; - if (self->iss_list == NULL) { - grib_context_log(c, GRIB_LOG_ERROR, "encode_double_array: self->iss_list==NULL"); + if (iss_list_ == NULL) { + grib_context_log(c, GRIB_LOG_ERROR, "encode_double_array: iss_list_ ==NULL"); return GRIB_INTERNAL_ERROR; } @@ -603,7 +619,7 @@ static int encode_double_array(grib_context* c, grib_buffer* buff, long* pos, bu err = descriptor_get_min_max(bd, modifiedWidth, modifiedReference, modifiedFactor, &minAllowed, &maxAllowed); if (err) return err; - nvals = grib_iarray_used_size(self->iss_list); + nvals = grib_iarray_used_size(iss_list_); if (nvals <= 0) return GRIB_NO_VALUES; @@ -643,16 +659,16 @@ static int encode_double_array(grib_context* c, grib_buffer* buff, long* pos, bu } grib_buffer_set_ulength_bits(c, buff, buff->ulength_bits + 6); grib_encode_unsigned_longb(buff->data, localWidth, pos, 6); - return err; + return GRIB_SUCCESS; } if (nvals > grib_darray_used_size(dvalues)) return GRIB_ARRAY_TOO_SMALL; values = (double*)grib_context_malloc_clear(c, sizeof(double) * nvals); - val0 = dvalues->v[self->iss_list->v[0]]; + val0 = dvalues->v[iss_list_->v[0]]; is_constant = true; for (i = 0; i < nvals; i++) { - values[i] = dvalues->v[self->iss_list->v[i]]; + values[i] = dvalues->v[iss_list_->v[i]]; if (val0 != values[i]) is_constant = false; } @@ -788,8 +804,8 @@ static int encode_double_array(grib_context* c, grib_buffer* buff, long* pos, bu return err; } -static int encode_double_value(grib_context* c, grib_buffer* buff, long* pos, bufr_descriptor* bd, - grib_accessor_bufr_data_array_t* self, double value) +int grib_accessor_bufr_data_array_t::encode_double_value(grib_context* c, grib_buffer* buff, long* pos, bufr_descriptor* bd, + double value) { size_t lval; double maxAllowed, minAllowed; @@ -797,7 +813,7 @@ static int encode_double_value(grib_context* c, grib_buffer* buff, long* pos, bu int modifiedWidth, modifiedReference; double modifiedFactor; /* ECC-379, ECC-830 */ - const int dont_fail_if_out_of_range = self->set_to_missing_if_out_of_range; + const int dont_fail_if_out_of_range = set_to_missing_if_out_of_range_; modifiedReference = bd->reference; modifiedFactor = bd->factor; @@ -832,11 +848,10 @@ static int encode_double_value(grib_context* c, grib_buffer* buff, long* pos, bu grib_encode_size_tb(buff->data, lval, pos, modifiedWidth); } - return err; + return GRIB_SUCCESS; } -static int encode_string_value(grib_context* c, grib_buffer* buff, long* pos, bufr_descriptor* bd, - grib_accessor_bufr_data_array_t* self, char* sval) +static int encode_string_value(grib_context* c, grib_buffer* buff, long* pos, bufr_descriptor* bd, char* sval) { int err = 0; int len; @@ -845,14 +860,14 @@ static int encode_string_value(grib_context* c, grib_buffer* buff, long* pos, bu grib_buffer_set_ulength_bits(c, buff, buff->ulength_bits + bd->width); err = grib_encode_string(buff->data, pos, len, sval); if (err) { - grib_context_log(c, GRIB_LOG_ERROR, "encode_string_value: %s. Failed to encode '%s'", bd->shortName, sval); + grib_context_log(c, GRIB_LOG_ERROR, "%s: %s. Failed to encode '%s'", __func__, bd->shortName, sval); } return err; } -static char* decode_string_value(grib_context* c, unsigned char* data, long* pos, bufr_descriptor* bd, - grib_accessor_bufr_data_array_t* self, int* err) +char* grib_accessor_bufr_data_array_t::decode_string_value(grib_context* c, unsigned char* data, long* pos, bufr_descriptor* bd, + int* err) { char* sval = 0; int len; @@ -861,7 +876,7 @@ static char* decode_string_value(grib_context* c, unsigned char* data, long* pos len = bd->width / 8; - CHECK_END_DATA_RETURN(c, bd, self, bd->width, NULL); + CHECK_END_DATA_RETURN(c, bd, this, bd->width, NULL); sval = (char*)grib_context_malloc_clear(c, len + 1); if (*err) { *err = 0; @@ -874,9 +889,9 @@ static char* decode_string_value(grib_context* c, unsigned char* data, long* pos return sval; } -static double decode_double_value(grib_context* c, unsigned char* data, long* pos, - bufr_descriptor* bd, int canBeMissing, - grib_accessor_bufr_data_array_t* self, int* err) +double grib_accessor_bufr_data_array_t::decode_double_value(grib_context* c, unsigned char* data, long* pos, + bufr_descriptor* bd, int canBeMissing, + int* err) { size_t lval; int modifiedWidth, modifiedReference; @@ -889,7 +904,7 @@ static double decode_double_value(grib_context* c, unsigned char* data, long* po modifiedFactor = bd->factor; modifiedWidth = bd->width; - CHECK_END_DATA_RETURN(c, bd, self, modifiedWidth, 0); + CHECK_END_DATA_RETURN(c, bd, this, modifiedWidth, 0); if (*err) { *err = 0; return GRIB_MISSING_DOUBLE; @@ -905,66 +920,66 @@ static double decode_double_value(grib_context* c, unsigned char* data, long* po return dval; } -static int decode_element(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, - grib_buffer* b, unsigned char* data, long* pos, int i, bufr_descriptor* descriptor, long elementIndex, - grib_darray* dval, grib_sarray* sval) + +int decode_element(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, + grib_buffer* b, unsigned char* data, long* pos, int i, bufr_descriptor* descriptor, long elementIndex, + grib_darray* dval, grib_sarray* sval) { - grib_accessor* a = (grib_accessor*)self; grib_darray* dar = 0; grib_sarray* sar = 0; int index = 0, ii, stringValuesLen; char* csval = 0; double cdval = 0, x; int err = 0; - bufr_descriptor* bd = descriptor == NULL ? self->expanded->v[i] : descriptor; + bufr_descriptor* bd = descriptor == NULL ? self->expanded_->v[i] : descriptor; /* Assert( b->data == data); */ - if (self->change_ref_value_operand > 0 && self->change_ref_value_operand != 255) { + if (self->change_ref_value_operand_ > 0 && self->change_ref_value_operand_ != 255) { /* Operator 203YYY: Change Reference Values: Definition phase */ - const int number_of_bits = self->change_ref_value_operand; + const int number_of_bits = self->change_ref_value_operand_; long new_ref_val = grib_decode_signed_longb(data, pos, number_of_bits); grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data decoding: -**- \tcode=203YYY width=%d pos=%ld -> %ld", - number_of_bits, (long)*pos, (long)(*pos - a->offset * 8)); + number_of_bits, (long)*pos, (long)(*pos - self->offset_ * 8)); grib_context_log(c, GRIB_LOG_DEBUG, "Operator 203YYY: Store for code %6.6ld => new ref val %ld", bd->code, new_ref_val); - tableB_override_store_ref_val(c, self, bd->code, new_ref_val); + self->tableB_override_store_ref_val(c, bd->code, new_ref_val); bd->nokey = 1; err = check_end_data(c, NULL, self, number_of_bits); /*advance bitsToEnd*/ return err; } grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data decoding: -%d- \tcode=%6.6ld width=%ld scale=%ld ref=%ld type=%d (pos=%ld -> %ld)", i, bd->code, bd->width, bd->scale, bd->reference, bd->type, - (long)*pos, (long)(*pos - a->offset * 8)); + (long)*pos, (long)(*pos - self->offset_ * 8)); if (bd->type == BUFR_DESCRIPTOR_TYPE_STRING) { /* string */ - if (self->compressedData) { - err = decode_string_array(c, data, pos, bd, self); - index = grib_vsarray_used_size(self->stringValues); - dar = grib_darray_new(c, self->numberOfSubsets, 10); - index = self->numberOfSubsets * (index - 1); - for (ii = 1; ii <= self->numberOfSubsets; ii++) { + if (self->compressedData_) { + err = self->decode_string_array(c, data, pos, bd); + index = grib_vsarray_used_size(self->stringValues_); + dar = grib_darray_new(self->numberOfSubsets_, 10); + index = self->numberOfSubsets_ * (index - 1); + for (ii = 1; ii <= self->numberOfSubsets_; ii++) { x = (index + ii) * 1000 + bd->width / 8; - grib_darray_push(c, dar, x); + grib_darray_push(dar, x); } - grib_vdarray_push(c, self->numericValues, dar); + grib_vdarray_push(self->numericValues_, dar); } else { - csval = decode_string_value(c, data, pos, bd, self, &err); + csval = self->decode_string_value(c, data, pos, bd, &err); grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data decoding: \t %s = %s", bd->shortName, csval); - sar = grib_sarray_push(c, sar, csval); - grib_vsarray_push(c, self->stringValues, sar); - stringValuesLen = grib_vsarray_used_size(self->stringValues); + sar = grib_sarray_push(sar, csval); + grib_vsarray_push(self->stringValues_, sar); + stringValuesLen = grib_vsarray_used_size(self->stringValues_); index = 0; for (ii = 0; ii < stringValuesLen; ii++) { - index += grib_sarray_used_size(self->stringValues->v[ii]); + index += grib_sarray_used_size(self->stringValues_->v[ii]); } cdval = index * 1000 + bd->width / 8; - grib_darray_push(c, dval, cdval); + grib_darray_push(dval, cdval); } } else { /* numeric or codetable or flagtable */ /* Operator 203YYY: Check if we have changed ref value for this element. If so modify bd->reference */ - if (self->change_ref_value_operand != 0 && tableB_override_get_ref_val(self, bd->code, &(bd->reference)) == GRIB_SUCCESS) { + if (self->change_ref_value_operand_ != 0 && self->tableB_override_get_ref_val(bd->code, &(bd->reference)) == GRIB_SUCCESS) { grib_context_log(c, GRIB_LOG_DEBUG, "Operator 203YYY: For code %6.6ld, changed ref val: %ld", bd->code, bd->reference); } @@ -972,36 +987,36 @@ static int decode_element(grib_context* c, grib_accessor_bufr_data_array_t* self grib_context_log(c, GRIB_LOG_ERROR, "Descriptor %6.6ld has bit width %ld!", bd->code, bd->width); return GRIB_DECODING_ERROR; } - if (self->compressedData) { - dar = decode_double_array(c, data, pos, bd, self->canBeMissing[i], self, &err); - grib_vdarray_push(c, self->numericValues, dar); + if (self->compressedData_) { + dar = self->decode_double_array(c, data, pos, bd, self->canBeMissing_[i], &err); + grib_vdarray_push(self->numericValues_, dar); } else { /* Uncompressed */ - cdval = decode_double_value(c, data, pos, bd, self->canBeMissing[i], self, &err); + cdval = self->decode_double_value(c, data, pos, bd, self->canBeMissing_[i], &err); grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data decoding: \t %s = %g", bd->shortName, cdval); - grib_darray_push(c, dval, cdval); + grib_darray_push(dval, cdval); } } return err; } -static int decode_replication(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, - grib_buffer* buff, unsigned char* data, long* pos, int i, long elementIndex, grib_darray* dval, long* numberOfRepetitions) + +int decode_replication(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, grib_buffer* buff, unsigned char* data, long* pos, int i, long elementIndex, grib_darray* dval, long* numberOfRepetitions) { int ret = 0; int* err; int localReference, width; bufr_descriptor** descriptors = 0; err = &ret; - descriptors = self->expanded->v; + descriptors = self->expanded_->v; /* Assert(buff->data == data); */ grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data decoding: -%d- \tcode=%6.6ld width=%ld ", - i, self->expanded->v[i]->code, self->expanded->v[i]->width); - if (self->compressedData) { + i, self->expanded_->v[i]->code, self->expanded_->v[i]->width); + if (self->compressedData_) { grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data decoding: \tdelayed replication localReference width=%ld", descriptors[i]->width); CHECK_END_DATA_RETURN(c, NULL, self, descriptors[i]->width + 6, *err); if (*err) { @@ -1033,57 +1048,58 @@ static int decode_replication(grib_context* c, grib_accessor_bufr_data_array_t* grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data decoding: \tdelayed replication value=%ld", *numberOfRepetitions); } } - if (self->compressedData) { - dval = grib_darray_new(c, 1, 100); + if (self->compressedData_) { + dval = grib_darray_new(1, 100); if (c->bufr_multi_element_constant_arrays) { long j; - for (j = 0; j < self->numberOfSubsets; j++) { - grib_darray_push(c, dval, (double)(*numberOfRepetitions)); + for (j = 0; j < self->numberOfSubsets_; j++) { + grib_darray_push(dval, (double)(*numberOfRepetitions)); } } else { - grib_darray_push(c, dval, (double)(*numberOfRepetitions)); + grib_darray_push(dval, (double)(*numberOfRepetitions)); } - grib_vdarray_push(c, self->numericValues, dval); + grib_vdarray_push(self->numericValues_, dval); } else { - grib_darray_push(c, dval, (double)(*numberOfRepetitions)); + grib_darray_push(dval, (double)(*numberOfRepetitions)); } return ret; } -static int encode_new_bitmap(grib_context* c, grib_buffer* buff, long* pos, int idx, grib_accessor_bufr_data_array_t* self) + +int grib_accessor_bufr_data_array_t::encode_new_bitmap(grib_context* c, grib_buffer* buff, long* pos, int idx) { grib_darray* doubleValues = NULL; int err = 0; double cdval = 0; - if (self->nInputBitmap > 0) { - if (self->nInputBitmap < self->iInputBitmap) + if (nInputBitmap_ > 0) { + if (nInputBitmap_ < iInputBitmap_) return GRIB_ARRAY_TOO_SMALL; - cdval = self->inputBitmap[self->iInputBitmap++]; + cdval = inputBitmap_[iInputBitmap_++]; } - if (self->compressedData) { - doubleValues = grib_darray_new(c, 1, 1); - grib_darray_push(c, doubleValues, cdval); - err = encode_double_array(c, buff, pos, self->expanded->v[idx], self, doubleValues); - grib_darray_delete(c, doubleValues); + if (compressedData_) { + doubleValues = grib_darray_new(1, 1); + grib_darray_push(doubleValues, cdval); + err = encode_double_array(c, buff, pos, expanded_->v[idx], doubleValues); + grib_darray_delete(doubleValues); } else { - err = encode_double_value(c, buff, pos, self->expanded->v[idx], self, cdval); + err = encode_double_value(c, buff, pos, expanded_->v[idx], cdval); } return err; } /* Operator 203YYY: Change Reference Values: Encoding definition phase */ -static int encode_overridden_reference_value(grib_context* c, grib_accessor_bufr_data_array_t* self, - grib_buffer* buff, long* pos, bufr_descriptor* bd) +int grib_accessor_bufr_data_array_t::encode_overridden_reference_value(grib_context* c, + grib_buffer* buff, long* pos, bufr_descriptor* bd) { int err = 0; long currRefVal = -1; - long numBits = self->change_ref_value_operand; + long numBits = change_ref_value_operand_; /* We must be encoding between 203YYY and 203255 */ - Assert(self->change_ref_value_operand > 0 && self->change_ref_value_operand != 255); - if (self->refValListSize == 0) { + Assert(change_ref_value_operand_ > 0 && change_ref_value_operand_ != 255); + if (refValListSize_ == 0) { grib_context_log(c, GRIB_LOG_ERROR, "encode_new_element: Overridden Reference Values array is empty! " "(Hint: set the key '%s')", @@ -1093,30 +1109,30 @@ static int encode_overridden_reference_value(grib_context* c, grib_accessor_bufr "number of descriptors between operator 203YYY and 203255"); return GRIB_ENCODING_ERROR; } - if (self->refValIndex >= self->refValListSize) { + if (refValIndex_ >= refValListSize_) { grib_context_log(c, GRIB_LOG_ERROR, "encode_new_element: Overridden Reference Values: index=%ld, size=%ld. " "\nThe number of overridden reference values must be equal to " "number of descriptors between operator 203YYY and 203255", - self->refValIndex, self->refValListSize); + refValIndex_, refValListSize_); return GRIB_ENCODING_ERROR; } - currRefVal = self->refValList[self->refValIndex]; - grib_context_log(c, GRIB_LOG_DEBUG, "encode_new_element: Operator 203YYY: writing ref val %ld (self->refValIndex=%ld)", - currRefVal, self->refValIndex); + currRefVal = refValList_[refValIndex_]; + grib_context_log(c, GRIB_LOG_DEBUG, "encode_new_element: Operator 203YYY: writing ref val %ld (refValIndex_ =%ld)", + currRefVal, refValIndex_); grib_buffer_set_ulength_bits(c, buff, buff->ulength_bits + numBits); err = grib_encode_signed_longb(buff->data, currRefVal, pos, numBits); if (err) { grib_context_log(c, GRIB_LOG_ERROR, "Encoding overridden reference value %ld for %s (code=%6.6ld)", currRefVal, bd->shortName, bd->code); } - self->refValIndex++; + refValIndex_++; return err; } -static int encode_new_element(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, - grib_buffer* buff, unsigned char* data, long* pos, int i, bufr_descriptor* descriptor, - long elementIndex, grib_darray* dval, grib_sarray* sval) +int encode_new_element(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, + grib_buffer* buff, unsigned char* data, long* pos, int i, bufr_descriptor* descriptor, + long elementIndex, grib_darray* dval, grib_sarray* sval) { int ii; char* csval = 0; @@ -1124,14 +1140,14 @@ static int encode_new_element(grib_context* c, grib_accessor_bufr_data_array_t* double cdval = GRIB_MISSING_DOUBLE; int err = 0; size_t slen; - bufr_descriptor* bd = descriptor == NULL ? self->expanded->v[i] : descriptor; + bufr_descriptor* bd = descriptor == NULL ? self->expanded_->v[i] : descriptor; grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data encoding: \tcode=%6.6ld width=%ld pos=%ld ulength=%ld ulength_bits=%ld", bd->code, bd->width, (long)*pos, buff->ulength, buff->ulength_bits); - if (self->change_ref_value_operand > 0 && self->change_ref_value_operand != 255) { + if (self->change_ref_value_operand_ > 0 && self->change_ref_value_operand_ != 255) { /* Operator 203YYY: Change Reference Values: Encoding definition phase */ - err = encode_overridden_reference_value(c, self, buff, pos, bd); + err = self->encode_overridden_reference_value(c, buff, pos, bd); return err; } @@ -1143,15 +1159,15 @@ static int encode_new_element(grib_context* c, grib_accessor_bufr_data_array_t* csval[ii] = missingChar; grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data encoding: \t %s = %s", bd->shortName, csval); - if (self->compressedData) { - grib_sarray* stringValues = grib_sarray_new(c, 1, 1); - grib_sarray_push(c, stringValues, csval); - err = encode_string_array(c, buff, pos, bd, self, stringValues); - grib_sarray_delete_content(c, stringValues); - grib_sarray_delete(c, stringValues); + if (self->compressedData_) { + grib_sarray* stringValues = grib_sarray_new(1, 1); + grib_sarray_push(stringValues, csval); + err = self->encode_string_array(c, buff, pos, bd, stringValues); + grib_sarray_delete_content(stringValues); + grib_sarray_delete(stringValues); } else { - err = encode_string_value(c, buff, pos, bd, self, csval); + err = encode_string_value(c, buff, pos, bd, csval); grib_context_free(c, csval); } } @@ -1160,60 +1176,61 @@ static int encode_new_element(grib_context* c, grib_accessor_bufr_data_array_t* grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data encoding: \t %s = %g", bd->shortName, cdval); if (bd->code == 31031) - return encode_new_bitmap(c, buff, pos, i, self); - if (self->compressedData) { - grib_darray* doubleValues = grib_darray_new(c, 1, 1); - grib_darray_push(c, doubleValues, cdval); - err = encode_double_array(c, buff, pos, bd, self, doubleValues); - grib_darray_delete(c, doubleValues); + return self->encode_new_bitmap(c, buff, pos, i); + if (self->compressedData_) { + grib_darray* doubleValues = grib_darray_new(1, 1); + grib_darray_push(doubleValues, cdval); + err = self->encode_double_array(c, buff, pos, bd, doubleValues); + grib_darray_delete(doubleValues); } else { - err = encode_double_value(c, buff, pos, bd, self, cdval); + err = self->encode_double_value(c, buff, pos, bd, cdval); } } return err; } -static int encode_new_replication(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, - grib_buffer* buff, unsigned char* data, long* pos, int i, long elementIndex, grib_darray* dval, long* numberOfRepetitions) + +int encode_new_replication(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, + grib_buffer* buff, unsigned char* data, long* pos, int i, long elementIndex, grib_darray* dval, long* numberOfRepetitions) { int err = 0; unsigned long repetitions = 1; - bufr_descriptor** descriptors = self->expanded->v; - DEBUG_ASSERT( buff->data == data ); + bufr_descriptor** descriptors = self->expanded_->v; + DEBUG_ASSERT(buff->data == data); switch (descriptors[i]->code) { case 31000: - if (self->nInputShortReplications >= 0) { - if (self->iInputShortReplications >= self->nInputShortReplications) { + if (self->nInputShortReplications_ >= 0) { + if (self->iInputShortReplications_ >= self->nInputShortReplications_) { grib_context_log(c, GRIB_LOG_ERROR, "Array inputShortDelayedDescriptorReplicationFactor: dimension mismatch (nInputShortReplications=%d)", - self->nInputShortReplications); + self->nInputShortReplications_); return GRIB_ARRAY_TOO_SMALL; } - repetitions = self->inputShortReplications[self->iInputShortReplications]; - self->iInputShortReplications++; + repetitions = self->inputShortReplications_[self->iInputShortReplications_]; + self->iInputShortReplications_++; } break; case 31001: - if (self->nInputReplications >= 0) { - if (self->iInputReplications >= self->nInputReplications) { + if (self->nInputReplications_ >= 0) { + if (self->iInputReplications_ >= self->nInputReplications_) { grib_context_log(c, GRIB_LOG_ERROR, "Array inputDelayedDescriptorReplicationFactor: dimension mismatch (nInputReplications=%d)", - self->nInputReplications); + self->nInputReplications_); return GRIB_ARRAY_TOO_SMALL; } - repetitions = self->inputReplications[self->iInputReplications]; - self->iInputReplications++; + repetitions = self->inputReplications_[self->iInputReplications_]; + self->iInputReplications_++; } break; case 31002: - if (self->nInputExtendedReplications >= 0) { - if (self->iInputExtendedReplications >= self->nInputExtendedReplications) { + if (self->nInputExtendedReplications_ >= 0) { + if (self->iInputExtendedReplications_ >= self->nInputExtendedReplications_) { grib_context_log(c, GRIB_LOG_ERROR, "Array inputExtendedDelayedDescriptorReplicationFactor: dimension mismatch (nInputExtendedReplications=%d)", - self->nInputExtendedReplications); + self->nInputExtendedReplications_); return GRIB_ARRAY_TOO_SMALL; } - repetitions = self->inputExtendedReplications[self->iInputExtendedReplications]; - self->iInputExtendedReplications++; + repetitions = self->inputExtendedReplications_[self->iInputExtendedReplications_]; + self->iInputExtendedReplications_++; } break; default: @@ -1229,7 +1246,7 @@ static int encode_new_replication(grib_context* c, grib_accessor_bufr_data_array *numberOfRepetitions = repetitions; - if (self->compressedData) { + if (self->compressedData_) { grib_buffer_set_ulength_bits(c, buff, buff->ulength_bits + 6); grib_encode_unsigned_longb(buff->data, 0, pos, 6); } @@ -1237,21 +1254,22 @@ static int encode_new_replication(grib_context* c, grib_accessor_bufr_data_array return err; } -static int encode_element(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, - grib_buffer* buff, unsigned char* data, long* pos, int i, bufr_descriptor* descriptor, - long elementIndex, grib_darray* dval, grib_sarray* sval) + +int encode_element(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, + grib_buffer* buff, unsigned char* data, long* pos, int i, bufr_descriptor* descriptor, + long elementIndex, grib_darray* dval, grib_sarray* sval) { int idx, j; int err = 0; - bufr_descriptor* bd = descriptor == NULL ? self->expanded->v[i] : descriptor; + bufr_descriptor* bd = descriptor == NULL ? self->expanded_->v[i] : descriptor; /* Assert( buff->data == data); */ grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data encoding: -%d- \tcode=%6.6ld width=%ld pos=%ld ulength=%ld ulength_bits=%ld", i, bd->code, bd->width, (long)*pos, buff->ulength, buff->ulength_bits); - if (self->change_ref_value_operand > 0 && self->change_ref_value_operand != 255) { + if (self->change_ref_value_operand_ > 0 && self->change_ref_value_operand_ != 255) { /* Operator 203YYY: Change Reference Values: Encoding definition phase */ - err = encode_overridden_reference_value(c, self, buff, pos, bd); + err = self->encode_overridden_reference_value(c, buff, pos, bd); return err; } @@ -1259,81 +1277,82 @@ static int encode_element(grib_context* c, grib_accessor_bufr_data_array_t* self /* string */ /* grib_context_log(c, GRIB_LOG_DEBUG,"BUFR data encoding: \t %s = %s", bd->shortName,csval); */ - if (self->compressedData) { - idx = ((int)self->numericValues->v[elementIndex]->v[0] / 1000 - 1) / self->numberOfSubsets; - err = encode_string_array(c, buff, pos, bd, self, self->stringValues->v[idx]); + if (self->compressedData_) { + idx = ((int)self->numericValues_->v[elementIndex]->v[0] / 1000 - 1) / self->numberOfSubsets_; + err = self->encode_string_array(c, buff, pos, bd, self->stringValues_->v[idx]); } else { - if (self->numericValues->v[subsetIndex] == NULL) { - grib_context_log(c, GRIB_LOG_ERROR, "Invalid subset index %d (number of subsets=%ld)", subsetIndex, self->numberOfSubsets); + if (self->numericValues_->v[subsetIndex] == NULL) { + grib_context_log(c, GRIB_LOG_ERROR, "Invalid subset index %d (number of subsets=%ld)", subsetIndex, self->numberOfSubsets_); return GRIB_INVALID_ARGUMENT; } - idx = (int)self->numericValues->v[subsetIndex]->v[elementIndex] / 1000 - 1; - if (idx < 0 || idx >= self->stringValues->n) { + idx = (int)self->numericValues_->v[subsetIndex]->v[elementIndex] / 1000 - 1; + if (idx < 0 || idx >= self->stringValues_->n) { grib_context_log(c, GRIB_LOG_ERROR, "encode_element '%s': Invalid index %d", bd->shortName, idx); return GRIB_INVALID_ARGUMENT; } - err = encode_string_value(c, buff, pos, bd, self, self->stringValues->v[idx]->v[0]); + err = encode_string_value(c, buff, pos, bd, self->stringValues_->v[idx]->v[0]); } } else { /* numeric or codetable or flagtable */ - if (self->compressedData) { - err = encode_double_array(c, buff, pos, bd, self, self->numericValues->v[elementIndex]); + if (self->compressedData_) { + err = self->encode_double_array(c, buff, pos, bd, self->numericValues_->v[elementIndex]); if (err) { - grib_darray* varr = self->numericValues->v[elementIndex]; + grib_darray* varr = self->numericValues_->v[elementIndex]; grib_context_log(c, GRIB_LOG_ERROR, "Encoding key '%s' ( code=%6.6ld width=%ld scale=%ld reference=%ld )", bd->shortName, bd->code, bd->width, bd->scale, bd->reference); if (varr) { for (j = 0; j < grib_darray_used_size(varr); j++) grib_context_log(c, GRIB_LOG_ERROR, "value[%d]\t= %g", j, varr->v[j]); - } else { + } + else { grib_context_log(c, GRIB_LOG_ERROR, "Empty array: Check the order of keys being set!"); } } } else { - if (self->numericValues->v[subsetIndex] == NULL) { - grib_context_log(c, GRIB_LOG_ERROR, "Invalid subset index %d (number of subsets=%ld)", subsetIndex, self->numberOfSubsets); + if (self->numericValues_->v[subsetIndex] == NULL) { + grib_context_log(c, GRIB_LOG_ERROR, "Invalid subset index %d (number of subsets=%ld)", subsetIndex, self->numberOfSubsets_); return GRIB_INVALID_ARGUMENT; } - err = encode_double_value(c, buff, pos, bd, self, self->numericValues->v[subsetIndex]->v[elementIndex]); + err = self->encode_double_value(c, buff, pos, bd, self->numericValues_->v[subsetIndex]->v[elementIndex]); if (err) { grib_context_log(c, GRIB_LOG_ERROR, "Cannot encode %s=%g (subset=%d)", /*subsetIndex starts from 0*/ - bd->shortName, self->numericValues->v[subsetIndex]->v[elementIndex], subsetIndex + 1); + bd->shortName, self->numericValues_->v[subsetIndex]->v[elementIndex], subsetIndex + 1); } } } return err; } -static int encode_replication(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, - grib_buffer* buff, unsigned char* data, long* pos, int i, long elementIndex, - grib_darray* dval, long* numberOfRepetitions) + +int encode_replication(grib_context* c, grib_accessor_bufr_data_array_t* self, int subsetIndex, + grib_buffer* buff, unsigned char* data, long* pos, int i, long elementIndex, + grib_darray* dval, long* numberOfRepetitions) { /* Assert( buff->data == data); */ - if (self->compressedData) { - DEBUG_ASSERT(grib_darray_used_size(self->numericValues->v[elementIndex]) == 1); - *numberOfRepetitions = self->numericValues->v[elementIndex]->v[0]; + if (self->compressedData_) { + DEBUG_ASSERT(grib_darray_used_size(self->numericValues_->v[elementIndex]) == 1); + *numberOfRepetitions = self->numericValues_->v[elementIndex]->v[0]; } else { - *numberOfRepetitions = self->numericValues->v[subsetIndex]->v[elementIndex]; + *numberOfRepetitions = self->numericValues_->v[subsetIndex]->v[elementIndex]; } return encode_element(c, self, subsetIndex, buff, data, pos, i, 0, elementIndex, dval, 0); } -static int build_bitmap(grib_accessor_bufr_data_array_t* self, unsigned char* data, long* pos, - int iel, grib_iarray* elementsDescriptorsIndex, int iBitmapOperator) + +int grib_accessor_bufr_data_array_t::build_bitmap(unsigned char* data, long* pos, + int iel, grib_iarray* elementsDescriptorsIndex, int iBitmapOperator) { int bitmapSize = 0, iDelayedReplication = 0; int i, localReference, width, bitmapEndElementsDescriptorsIndex; long ppos, n; - grib_accessor* a = (grib_accessor*)self; - const grib_context* c = a->context; - bufr_descriptor** descriptors = self->expanded->v; - const long* edi = elementsDescriptorsIndex->v; + bufr_descriptor** descriptors = expanded_->v; + const long* edi = elementsDescriptorsIndex->v; /* int iel=grib_iarray_used_size(elementsDescriptorsIndex)-1; */ int err = 0; @@ -1341,7 +1360,7 @@ static int build_bitmap(grib_accessor_bufr_data_array_t* self, unsigned char* da case 222000: case 223000: case 236000: - cancel_bitmap(self); + cancel_bitmap(); if (iel < 0) { return GRIB_ENCODING_ERROR; } @@ -1372,7 +1391,7 @@ static int build_bitmap(grib_accessor_bufr_data_array_t* self, unsigned char* da Assert(descriptors[iDelayedReplication]->code == 31001 || descriptors[iDelayedReplication]->code == 31002); i = iDelayedReplication; - if (self->compressedData) { + if (compressedData_) { ppos = *pos; if (err) return err; @@ -1381,7 +1400,7 @@ static int build_bitmap(grib_accessor_bufr_data_array_t* self, unsigned char* da *pos = ppos; if (width) { /* delayed replication number is not constant. NOT IMPLEMENTED */ - grib_context_log(c, GRIB_LOG_ERROR, "Delayed replication number is not constant"); + grib_context_log(context_, GRIB_LOG_ERROR, "Delayed replication number is not constant"); return GRIB_NOT_IMPLEMENTED; } else { @@ -1411,32 +1430,32 @@ static int build_bitmap(grib_accessor_bufr_data_array_t* self, unsigned char* da n--; iel--; } - self->bitmapStartElementsDescriptorsIndex = iel; - restart_bitmap(self); + bitmapStartElementsDescriptorsIndex_ = iel; + restart_bitmap(); break; default: - grib_context_log(c, GRIB_LOG_ERROR, "build_bitmap: unsupported operator %ld\n", + grib_context_log(context_, GRIB_LOG_ERROR, "build_bitmap: unsupported operator %ld\n", descriptors[iBitmapOperator]->code); return GRIB_INTERNAL_ERROR; } return GRIB_SUCCESS; } -static int consume_bitmap(grib_accessor_bufr_data_array_t* self, int iBitmapOperator) +int grib_accessor_bufr_data_array_t::consume_bitmap(int iBitmapOperator) { int bitmapSize = 0, iDelayedReplication; int i; - bufr_descriptor** descriptors = self->expanded->v; + bufr_descriptor** descriptors = expanded_->v; i = iBitmapOperator + 1; if (descriptors[i]->code == 101000) { iDelayedReplication = iBitmapOperator + 2; switch (descriptors[iDelayedReplication]->code) { case 31001: - bitmapSize = self->inputReplications[self->iInputReplications]; + bitmapSize = inputReplications_[iInputReplications_]; break; case 31002: - bitmapSize = self->inputExtendedReplications[self->iInputExtendedReplications]; + bitmapSize = inputExtendedReplications_[iInputExtendedReplications_]; break; default: Assert(0); @@ -1449,20 +1468,18 @@ static int consume_bitmap(grib_accessor_bufr_data_array_t* self, int iBitmapOper i++; } } - self->bitmapCurrent += bitmapSize; + bitmapCurrent_ += bitmapSize; return GRIB_SUCCESS; } -static int build_bitmap_new_data(grib_accessor_bufr_data_array_t* self, unsigned char* data, long* pos, - int iel, grib_iarray* elementsDescriptorsIndex, int iBitmapOperator) +int grib_accessor_bufr_data_array_t::build_bitmap_new_data(unsigned char* data, long* pos, + int iel, grib_iarray* elementsDescriptorsIndex, int iBitmapOperator) { int bitmapSize = 0, iDelayedReplication = 0; int i, bitmapEndElementsDescriptorsIndex; long n; - grib_accessor* a = (grib_accessor*)self; - const grib_context* c = a->context; - bufr_descriptor** descriptors = self->expanded->v; - const long* edi = elementsDescriptorsIndex->v; + bufr_descriptor** descriptors = expanded_->v; + const long* edi = elementsDescriptorsIndex->v; switch (descriptors[iBitmapOperator]->code) { case 222000: @@ -1497,18 +1514,18 @@ static int build_bitmap_new_data(grib_accessor_bufr_data_array_t* self, unsigned iDelayedReplication = iBitmapOperator + 2; switch (descriptors[iDelayedReplication]->code) { case 31001: - if (!self->inputReplications) { - grib_context_log(c, GRIB_LOG_ERROR, "build_bitmap_new_data: No inputReplications"); + if (!inputReplications_) { + grib_context_log(context_, GRIB_LOG_ERROR, "build_bitmap_new_data: No inputReplications"); return GRIB_ENCODING_ERROR; } - bitmapSize = self->inputReplications[self->iInputReplications]; + bitmapSize = inputReplications_[iInputReplications_]; break; case 31002: - if (!self->inputExtendedReplications) { - grib_context_log(c, GRIB_LOG_ERROR, "build_bitmap_new_data: No inputExtendedReplications"); + if (!inputExtendedReplications_) { + grib_context_log(context_, GRIB_LOG_ERROR, "build_bitmap_new_data: No inputExtendedReplications"); return GRIB_ENCODING_ERROR; } - bitmapSize = self->inputExtendedReplications[self->iInputExtendedReplications]; + bitmapSize = inputExtendedReplications_[iInputExtendedReplications_]; break; default: Assert(0); @@ -1528,11 +1545,11 @@ static int build_bitmap_new_data(grib_accessor_bufr_data_array_t* self, unsigned n--; iel--; } - self->bitmapStartElementsDescriptorsIndex = iel; - self->bitmapCurrentElementsDescriptorsIndex = iel - 1; + bitmapStartElementsDescriptorsIndex_ = iel; + bitmapCurrentElementsDescriptorsIndex_ = iel - 1; break; default: - grib_context_log(c, GRIB_LOG_ERROR, "build_bitmap_new_data: unsupported operator %ld\n", + grib_context_log(context_, GRIB_LOG_ERROR, "build_bitmap_new_data: unsupported operator %ld\n", descriptors[iBitmapOperator]->code); return GRIB_INTERNAL_ERROR; } @@ -1540,129 +1557,132 @@ static int build_bitmap_new_data(grib_accessor_bufr_data_array_t* self, unsigned } /* ECC-1304: Will return an index if successful. In case of an error, a negative number is returned e.g. GRIB_WRONG_BITMAP_SIZE */ -static int get_next_bitmap_descriptor_index_new_bitmap(grib_accessor_bufr_data_array_t* self, grib_iarray* elementsDescriptorsIndex, int compressedData) +int grib_accessor_bufr_data_array_t::get_next_bitmap_descriptor_index_new_bitmap(grib_iarray* elementsDescriptorsIndex, int compressedData) { int i; - bufr_descriptor** descriptors = self->expanded->v; + bufr_descriptor** descriptors = expanded_->v; - self->bitmapCurrent++; - self->bitmapCurrentElementsDescriptorsIndex++; - i = self->bitmapCurrent; + bitmapCurrent_++; + bitmapCurrentElementsDescriptorsIndex_++; + i = bitmapCurrent_; - if (self->compressedData) { - DEBUG_ASSERT(i < self->nInputBitmap); - if (i >= self->nInputBitmap) + if (compressedData_) { + DEBUG_ASSERT(i < nInputBitmap_); + if (i >= nInputBitmap_) return GRIB_WRONG_BITMAP_SIZE; - while (self->inputBitmap[i] == 1) { - self->bitmapCurrent++; - self->bitmapCurrentElementsDescriptorsIndex++; - while (descriptors[elementsDescriptorsIndex->v[self->bitmapCurrentElementsDescriptorsIndex]]->code > 100000) - self->bitmapCurrentElementsDescriptorsIndex++; + while (inputBitmap_[i] == 1) { + bitmapCurrent_++; + bitmapCurrentElementsDescriptorsIndex_++; + while (descriptors[elementsDescriptorsIndex->v[bitmapCurrentElementsDescriptorsIndex_]]->code > 100000) + bitmapCurrentElementsDescriptorsIndex_++; i++; } } else { - if (i >= self->nInputBitmap) + if (i >= nInputBitmap_) return GRIB_WRONG_BITMAP_SIZE; - while (self->inputBitmap[i] == 1) { - self->bitmapCurrent++; - self->bitmapCurrentElementsDescriptorsIndex++; - while (descriptors[elementsDescriptorsIndex->v[self->bitmapCurrentElementsDescriptorsIndex]]->code > 100000) - self->bitmapCurrentElementsDescriptorsIndex++; + while (inputBitmap_[i] == 1) { + bitmapCurrent_++; + bitmapCurrentElementsDescriptorsIndex_++; + while (descriptors[elementsDescriptorsIndex->v[bitmapCurrentElementsDescriptorsIndex_]]->code > 100000) + bitmapCurrentElementsDescriptorsIndex_++; i++; } } - while (descriptors[elementsDescriptorsIndex->v[self->bitmapCurrentElementsDescriptorsIndex]]->code > 100000) - self->bitmapCurrentElementsDescriptorsIndex++; - return elementsDescriptorsIndex->v[self->bitmapCurrentElementsDescriptorsIndex]; + while (descriptors[elementsDescriptorsIndex->v[bitmapCurrentElementsDescriptorsIndex_]]->code > 100000) + bitmapCurrentElementsDescriptorsIndex_++; + return elementsDescriptorsIndex->v[bitmapCurrentElementsDescriptorsIndex_]; } /* ECC-1304: Will return an index if successful. In case of an error, a negative number is returned e.g. GRIB_WRONG_BITMAP_SIZE */ -static int get_next_bitmap_descriptor_index(grib_accessor_bufr_data_array_t* self, grib_iarray* elementsDescriptorsIndex, grib_darray* numericValues) +int grib_accessor_bufr_data_array_t::get_next_bitmap_descriptor_index(grib_iarray* elementsDescriptorsIndex, grib_darray* numericValues) { int i; - bufr_descriptor** descriptors = self->expanded->v; + bufr_descriptor** descriptors = expanded_->v; - if (self->compressedData) { - if (self->numericValues->n == 0) - return get_next_bitmap_descriptor_index_new_bitmap(self, elementsDescriptorsIndex, 1); + if (compressedData_) { + if (numericValues_->n == 0) + return get_next_bitmap_descriptor_index_new_bitmap(elementsDescriptorsIndex, 1); - self->bitmapCurrent++; - self->bitmapCurrentElementsDescriptorsIndex++; - i = self->bitmapCurrent + self->bitmapStart; - DEBUG_ASSERT(i < self->numericValues->n); - while (self->numericValues->v[i]->v[0] == 1) { - self->bitmapCurrent++; - self->bitmapCurrentElementsDescriptorsIndex++; - while (descriptors[elementsDescriptorsIndex->v[self->bitmapCurrentElementsDescriptorsIndex]]->code > 100000) - self->bitmapCurrentElementsDescriptorsIndex++; + bitmapCurrent_++; + bitmapCurrentElementsDescriptorsIndex_++; + i = bitmapCurrent_ + bitmapStart_; + DEBUG_ASSERT(i < numericValues_->n); + while (numericValues_->v[i]->v[0] == 1) { + bitmapCurrent_++; + bitmapCurrentElementsDescriptorsIndex_++; + while (descriptors[elementsDescriptorsIndex->v[bitmapCurrentElementsDescriptorsIndex_]]->code > 100000) + bitmapCurrentElementsDescriptorsIndex_++; i++; } } else { if (numericValues->n == 0) - return get_next_bitmap_descriptor_index_new_bitmap(self, elementsDescriptorsIndex, 0); + return get_next_bitmap_descriptor_index_new_bitmap(elementsDescriptorsIndex, 0); - self->bitmapCurrent++; - self->bitmapCurrentElementsDescriptorsIndex++; - i = self->bitmapCurrent + self->bitmapStart; + bitmapCurrent_++; + bitmapCurrentElementsDescriptorsIndex_++; + i = bitmapCurrent_ + bitmapStart_; DEBUG_ASSERT(i < numericValues->n); while (numericValues->v[i] == 1) { - self->bitmapCurrent++; - self->bitmapCurrentElementsDescriptorsIndex++; - while (descriptors[elementsDescriptorsIndex->v[self->bitmapCurrentElementsDescriptorsIndex]]->code > 100000) - self->bitmapCurrentElementsDescriptorsIndex++; + bitmapCurrent_++; + bitmapCurrentElementsDescriptorsIndex_++; + while (descriptors[elementsDescriptorsIndex->v[bitmapCurrentElementsDescriptorsIndex_]]->code > 100000) + bitmapCurrentElementsDescriptorsIndex_++; i++; } } - while (descriptors[elementsDescriptorsIndex->v[self->bitmapCurrentElementsDescriptorsIndex]]->code > 100000) - self->bitmapCurrentElementsDescriptorsIndex++; - return elementsDescriptorsIndex->v[self->bitmapCurrentElementsDescriptorsIndex]; + while (descriptors[elementsDescriptorsIndex->v[bitmapCurrentElementsDescriptorsIndex_]]->code > 100000) + bitmapCurrentElementsDescriptorsIndex_++; + return elementsDescriptorsIndex->v[bitmapCurrentElementsDescriptorsIndex_]; } -static void push_zero_element(grib_accessor_bufr_data_array_t* self, grib_darray* dval) +void grib_accessor_bufr_data_array_t::push_zero_element(grib_darray* dval) { - grib_darray* d = 0; - grib_accessor* a = (grib_accessor*)self; - grib_context* c = a->context; - if (self->compressedData) { - d = grib_darray_new(c, 1, 100); - grib_darray_push(c, d, 0); - grib_vdarray_push(c, self->numericValues, d); + grib_darray* d = 0; + if (compressedData_) { + d = grib_darray_new(1, 100); + grib_darray_push(d, 0); + grib_vdarray_push(numericValues_, d); } else { - grib_darray_push(c, dval, 0); + grib_darray_push(dval, 0); } } -static grib_accessor* create_attribute_variable(const char* name, grib_section* section, int type, char* sval, double dval, long lval, unsigned long flags) +grib_accessor* grib_accessor_bufr_data_array_t::create_attribute_variable(const char* name, grib_section* section, int type, char* sval, double dval, long lval, unsigned long flags) { - grib_accessor* a = NULL; - grib_action creator = {0,}; + grib_action creator = { + 0, + }; size_t len; creator.op = (char*)"variable"; creator.name_space = (char*)""; creator.flags = GRIB_ACCESSOR_FLAG_READ_ONLY | flags; creator.set = 0; - creator.name = (char*)name; - a = grib_accessor_factory(section, &creator, 0, NULL); - a->parent = NULL; - a->h = section->h; - accessor_variable_set_type(a, type); + creator.name = (char*)name; + grib_accessor* a = grib_accessor_factory(section, &creator, 0, NULL); + a->parent_ = NULL; + a->h_ = section->h; + grib_accessor_variable_t* va = dynamic_cast(a); + va->accessor_variable_set_type(type); len = 1; switch (type) { case GRIB_TYPE_LONG: - a->pack_long(&lval, &len); break; + a->pack_long(&lval, &len); + break; case GRIB_TYPE_DOUBLE: - a->pack_double(&dval, &len); break; + a->pack_double(&dval, &len); + break; case GRIB_TYPE_STRING: if (!sval) return NULL; /* Performance: No need for len=strlen(sval). It's not used. */ /* See grib_accessor_class_variable.c, pack_string() */ len = 0; - a->pack_string(sval, &len); break; + a->pack_string(sval, &len); + break; } return a; @@ -1751,18 +1771,25 @@ static int adding_extra_key_attributes(grib_handle* h) return (!skip); } -static grib_accessor* create_accessor_from_descriptor(const grib_accessor* a, grib_accessor* attribute, grib_section* section, - long ide, long subset, int add_dump_flag, int add_coord_flag, - int count, int add_extra_attributes) +grib_accessor* grib_accessor_bufr_data_array_t::create_accessor_from_descriptor(grib_accessor* attribute, grib_section* section, + long ide, long subset, int add_dump_flag, int add_coord_flag, + int count, int add_extra_attributes) { - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - char code[10] = {0,}; + char code[10] = { + 0, + }; char* temp_str = NULL; int idx = 0; unsigned long flags = GRIB_ACCESSOR_FLAG_READ_ONLY; - grib_action operatorCreator = {0,}; - grib_accessor* elementAccessor = NULL; - grib_action creator = {0,}; + grib_action operatorCreator = { + 0, + }; + grib_accessor* accessor = NULL; + grib_accessor_bufr_data_element_t* elementAccessor = NULL; + grib_accessor_variable_t* variableAccessor = NULL; + grib_action creator = { + 0, + }; creator.op = (char*)"bufr_data_element"; creator.name_space = (char*)""; creator.set = 0; @@ -1774,7 +1801,7 @@ static grib_accessor* create_accessor_from_descriptor(const grib_accessor* a, gr operatorCreator.name = (char*)"operator"; if (attribute) { - DEBUG_ASSERT(attribute->parent == NULL); + DEBUG_ASSERT(attribute->parent_ == NULL); } if (add_dump_flag) { @@ -1782,176 +1809,181 @@ static grib_accessor* create_accessor_from_descriptor(const grib_accessor* a, gr operatorCreator.flags |= GRIB_ACCESSOR_FLAG_DUMP; } if (add_coord_flag) { - creator.flags |= GRIB_ACCESSOR_FLAG_BUFR_COORD; // ECC-1611 + creator.flags |= GRIB_ACCESSOR_FLAG_BUFR_COORD; // ECC-1611 } - idx = self->compressedData ? self->elementsDescriptorsIndex->v[0]->v[ide] : self->elementsDescriptorsIndex->v[subset]->v[ide]; + idx = compressedData_ ? elementsDescriptorsIndex_->v[0]->v[ide] : elementsDescriptorsIndex_->v[subset]->v[ide]; - switch (self->expanded->v[idx]->F) { + switch (expanded_->v[idx]->F) { case 0: case 1: - creator.name = grib_context_strdup(a->context, self->expanded->v[idx]->shortName); + creator.name = grib_context_strdup(context_, expanded_->v[idx]->shortName); /* ECC-325: store alloc'd string (due to strdup) for clean up later */ - grib_sarray_push(a->context, self->tempStrings, creator.name); - elementAccessor = grib_accessor_factory(section, &creator, 0, NULL); - if (self->canBeMissing[idx]) - elementAccessor->flags |= GRIB_ACCESSOR_FLAG_CAN_BE_MISSING; - if (self->expanded->v[idx]->code == 31000 || self->expanded->v[idx]->code == 31001 || self->expanded->v[idx]->code == 31002 || self->expanded->v[idx]->code == 31031) - elementAccessor->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - accessor_bufr_data_element_set_index(elementAccessor, ide); - accessor_bufr_data_element_set_descriptors(elementAccessor, self->expanded); - accessor_bufr_data_element_set_elementsDescriptorsIndex(elementAccessor, self->elementsDescriptorsIndex); - accessor_bufr_data_element_set_numericValues(elementAccessor, self->numericValues); - accessor_bufr_data_element_set_stringValues(elementAccessor, self->stringValues); - accessor_bufr_data_element_set_compressedData(elementAccessor, self->compressedData); - accessor_bufr_data_element_set_type(elementAccessor, self->expanded->v[idx]->type); - accessor_bufr_data_element_set_numberOfSubsets(elementAccessor, self->numberOfSubsets); - accessor_bufr_data_element_set_subsetNumber(elementAccessor, subset); + grib_sarray_push(tempStrings_, creator.name); + accessor = grib_accessor_factory(section, &creator, 0, NULL); + if (canBeMissing_[idx]) + accessor->flags_ |= GRIB_ACCESSOR_FLAG_CAN_BE_MISSING; + if (expanded_->v[idx]->code == 31000 || expanded_->v[idx]->code == 31001 || expanded_->v[idx]->code == 31002 || expanded_->v[idx]->code == 31031) + accessor->flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + elementAccessor = dynamic_cast(accessor); + elementAccessor->index(ide); + elementAccessor->descriptors(expanded_); + elementAccessor->elementsDescriptorsIndex(elementsDescriptorsIndex_); + elementAccessor->numericValues(numericValues_); + elementAccessor->stringValues(stringValues_); + elementAccessor->compressedData(compressedData_); + elementAccessor->type(expanded_->v[idx]->type); + elementAccessor->numberOfSubsets(numberOfSubsets_); + elementAccessor->subsetNumber(subset); - self->expanded->v[idx]->a = elementAccessor; + expanded_->v[idx]->a = accessor; if (attribute) { - /* attribute->parent=elementAccessor->parent; */ + /* attribute->parent=accessor->parent; */ /* for (i=0;iattributes[i]) attribute->attributes[i]->parent=elementAccessor->parent; + if (attribute->attributes[i]) attribute->attributes[i]->parent=accessor->parent; } */ - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); } attribute = create_attribute_variable("index", section, GRIB_TYPE_LONG, 0, 0, count, flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); - snprintf(code, sizeof(code), "%06ld", self->expanded->v[idx]->code); - temp_str = grib_context_strdup(a->context, code); + snprintf(code, sizeof(code), "%06ld", expanded_->v[idx]->code); + temp_str = grib_context_strdup(context_, code); attribute = create_attribute_variable("code", section, GRIB_TYPE_STRING, temp_str, 0, 0, flags); if (!attribute) return NULL; - grib_sarray_push(a->context, self->tempStrings, temp_str); /* ECC-325: store alloc'd string (due to strdup) for clean up later */ - elementAccessor->add_attribute(attribute, 0); + grib_sarray_push(tempStrings_, temp_str); /* ECC-325: store alloc'd string (due to strdup) for clean up later */ + accessor->add_attribute(attribute, 0); if (add_extra_attributes) { - attribute = create_attribute_variable("units", section, GRIB_TYPE_STRING, self->expanded->v[idx]->units, 0, 0, GRIB_ACCESSOR_FLAG_DUMP | flags); + attribute = create_attribute_variable("units", section, GRIB_TYPE_STRING, expanded_->v[idx]->units, 0, 0, GRIB_ACCESSOR_FLAG_DUMP | flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); - attribute = create_attribute_variable("scale", section, GRIB_TYPE_LONG, 0, 0, self->expanded->v[idx]->scale, flags); + attribute = create_attribute_variable("scale", section, GRIB_TYPE_LONG, 0, 0, expanded_->v[idx]->scale, flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); - attribute = create_attribute_variable("reference", section, GRIB_TYPE_DOUBLE, 0, self->expanded->v[idx]->reference, 0, flags); + attribute = create_attribute_variable("reference", section, GRIB_TYPE_DOUBLE, 0, expanded_->v[idx]->reference, 0, flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); - attribute = create_attribute_variable("width", section, GRIB_TYPE_LONG, 0, 0, self->expanded->v[idx]->width, flags); + attribute = create_attribute_variable("width", section, GRIB_TYPE_LONG, 0, 0, expanded_->v[idx]->width, flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); } break; case 2: - set_creator_name(&creator, self->expanded->v[idx]->code); - if (bufr_descriptor_is_marker(self->expanded->v[idx])) { - elementAccessor = grib_accessor_factory(section, &creator, 0, NULL); - if (self->canBeMissing[idx]) - elementAccessor->flags |= GRIB_ACCESSOR_FLAG_CAN_BE_MISSING; - accessor_bufr_data_element_set_index(elementAccessor, ide); - accessor_bufr_data_element_set_descriptors(elementAccessor, self->expanded); - accessor_bufr_data_element_set_elementsDescriptorsIndex(elementAccessor, self->elementsDescriptorsIndex); - accessor_bufr_data_element_set_numericValues(elementAccessor, self->numericValues); - accessor_bufr_data_element_set_stringValues(elementAccessor, self->stringValues); - accessor_bufr_data_element_set_compressedData(elementAccessor, self->compressedData); - accessor_bufr_data_element_set_type(elementAccessor, self->expanded->v[idx]->type); - accessor_bufr_data_element_set_numberOfSubsets(elementAccessor, self->numberOfSubsets); - accessor_bufr_data_element_set_subsetNumber(elementAccessor, subset); + set_creator_name(&creator, expanded_->v[idx]->code); + if (bufr_descriptor_is_marker(expanded_->v[idx])) { + accessor = grib_accessor_factory(section, &creator, 0, NULL); + if (canBeMissing_[idx]) + accessor->flags_ |= GRIB_ACCESSOR_FLAG_CAN_BE_MISSING; + elementAccessor = dynamic_cast(accessor); + elementAccessor->index(ide); + elementAccessor->descriptors(expanded_); + elementAccessor->elementsDescriptorsIndex(elementsDescriptorsIndex_); + elementAccessor->numericValues(numericValues_); + elementAccessor->stringValues(stringValues_); + elementAccessor->compressedData(compressedData_); + elementAccessor->type(expanded_->v[idx]->type); + elementAccessor->numberOfSubsets(numberOfSubsets_); + elementAccessor->subsetNumber(subset); attribute = create_attribute_variable("index", section, GRIB_TYPE_LONG, 0, 0, count, flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); } else { - elementAccessor = grib_accessor_factory(section, &operatorCreator, 0, NULL); - accessor_variable_set_type(elementAccessor, GRIB_TYPE_LONG); + accessor = grib_accessor_factory(section, &operatorCreator, 0, NULL); + variableAccessor = dynamic_cast(accessor); + variableAccessor->accessor_variable_set_type(GRIB_TYPE_LONG); attribute = create_attribute_variable("index", section, GRIB_TYPE_LONG, 0, 0, count, flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); - snprintf(code, sizeof(code), "%06ld", self->expanded->v[idx]->code); + snprintf(code, sizeof(code), "%06ld", expanded_->v[idx]->code); attribute = create_attribute_variable("code", section, GRIB_TYPE_STRING, code, 0, 0, flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); } - self->expanded->v[idx]->a = elementAccessor; + expanded_->v[idx]->a = accessor; break; case 9: - set_creator_name(&creator, self->expanded->v[idx]->code); - elementAccessor = grib_accessor_factory(section, &creator, 0, NULL); - accessor_bufr_data_element_set_index(elementAccessor, ide); - accessor_bufr_data_element_set_descriptors(elementAccessor, self->expanded); - accessor_bufr_data_element_set_elementsDescriptorsIndex(elementAccessor, self->elementsDescriptorsIndex); - accessor_bufr_data_element_set_numericValues(elementAccessor, self->numericValues); - accessor_bufr_data_element_set_stringValues(elementAccessor, self->stringValues); - accessor_bufr_data_element_set_compressedData(elementAccessor, self->compressedData); - accessor_bufr_data_element_set_type(elementAccessor, self->expanded->v[idx]->type); - accessor_bufr_data_element_set_numberOfSubsets(elementAccessor, self->numberOfSubsets); - accessor_bufr_data_element_set_subsetNumber(elementAccessor, subset); + set_creator_name(&creator, expanded_->v[idx]->code); + accessor = grib_accessor_factory(section, &creator, 0, NULL); + elementAccessor = dynamic_cast(accessor); + + elementAccessor->index(ide); + elementAccessor->descriptors(expanded_); + elementAccessor->elementsDescriptorsIndex(elementsDescriptorsIndex_); + elementAccessor->numericValues(numericValues_); + elementAccessor->stringValues(stringValues_); + elementAccessor->compressedData(compressedData_); + elementAccessor->type(expanded_->v[idx]->type); + elementAccessor->numberOfSubsets(numberOfSubsets_); + elementAccessor->subsetNumber(subset); attribute = create_attribute_variable("index", section, GRIB_TYPE_LONG, 0, 0, count, flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); - snprintf(code, sizeof(code), "%06ld", self->expanded->v[idx]->code); + snprintf(code, sizeof(code), "%06ld", expanded_->v[idx]->code); attribute = create_attribute_variable("code", section, GRIB_TYPE_STRING, code, 0, 0, flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); if (add_extra_attributes) { - attribute = create_attribute_variable("units", section, GRIB_TYPE_STRING, self->expanded->v[idx]->units, 0, 0, GRIB_ACCESSOR_FLAG_DUMP); + attribute = create_attribute_variable("units", section, GRIB_TYPE_STRING, expanded_->v[idx]->units, 0, 0, GRIB_ACCESSOR_FLAG_DUMP); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); - attribute = create_attribute_variable("scale", section, GRIB_TYPE_LONG, 0, 0, self->expanded->v[idx]->scale, flags); + attribute = create_attribute_variable("scale", section, GRIB_TYPE_LONG, 0, 0, expanded_->v[idx]->scale, flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); - attribute = create_attribute_variable("reference", section, GRIB_TYPE_DOUBLE, 0, self->expanded->v[idx]->reference, 0, flags); + attribute = create_attribute_variable("reference", section, GRIB_TYPE_DOUBLE, 0, expanded_->v[idx]->reference, 0, flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); - attribute = create_attribute_variable("width", section, GRIB_TYPE_LONG, 0, 0, self->expanded->v[idx]->width, flags); + attribute = create_attribute_variable("width", section, GRIB_TYPE_LONG, 0, 0, expanded_->v[idx]->width, flags); if (!attribute) return NULL; - elementAccessor->add_attribute(attribute, 0); + accessor->add_attribute(attribute, 0); } break; } - return elementAccessor; + return accessor; } /* Section 3.1.2.2 of WMO BUFR guide: classes 03 and 09 at present reserved for future use */ -#define IS_COORDINATE_DESCRIPTOR(a) (a == 8 || a == 1 || a == 2 || a == 4 || a == 5 || a == 6 || a == 7) +#define IS_COORDINATE_DESCRIPTOR(a) (a == 8 || a == 1 || a == 2 || a == 4 || a == 5 || a == 6 || a == 7) #define NUMBER_OF_QUALIFIERS_PER_CATEGORY 256 -#define NUMBER_OF_QUALIFIERS_CATEGORIES 7 -#define MAX_NUMBER_OF_BITMAPS 8 // See ECC-1699 +#define NUMBER_OF_QUALIFIERS_CATEGORIES 7 +#define MAX_NUMBER_OF_BITMAPS 8 // See ECC-1699 -static const int number_of_qualifiers = NUMBER_OF_QUALIFIERS_PER_CATEGORY * NUMBER_OF_QUALIFIERS_CATEGORIES; +static const int number_of_qualifiers = NUMBER_OF_QUALIFIERS_PER_CATEGORY * NUMBER_OF_QUALIFIERS_CATEGORIES; static const int significanceQualifierIndexArray[] = { -1, 0, 1, -1, 2, 3, 4, 5, 6 }; static GRIB_INLINE void reset_deeper_qualifiers( @@ -1967,14 +1999,8 @@ static GRIB_INLINE void reset_deeper_qualifiers( } } -typedef struct bitmap_s -{ - grib_accessors_list* cursor; - grib_accessors_list* referredElement; - grib_accessors_list* referredElementStart; -} bitmap_s; -static grib_accessor* get_element_from_bitmap(const grib_accessor* a, bitmap_s* bitmap) +static grib_accessor* get_element_from_bitmap(bitmap_s* bitmap) { int ret; long bitmapVal = 1; @@ -1983,7 +2009,8 @@ static grib_accessor* get_element_from_bitmap(const grib_accessor* a, bitmap_s* while (bitmapVal) { len = 1; if (bitmap->cursor && bitmap->cursor->accessor) { - ret = bitmap->cursor->accessor->unpack_long(&bitmapVal, &len); } + ret = bitmap->cursor->accessor->unpack_long(&bitmapVal, &len); + } else { return NULL; } @@ -2006,19 +2033,19 @@ static grib_accessor* get_element_from_bitmap(const grib_accessor* a, bitmap_s* static void grib_convert_to_attribute(grib_accessor* a) { - if (a->h == NULL && a->parent != NULL) { - a->h = grib_handle_of_accessor(a); - a->parent = NULL; + if (a->h_ == NULL && a->parent_ != NULL) { + a->h_ = grib_handle_of_accessor(a); + a->parent_ = NULL; } } /* subsetList can be NULL in which case subsetListSize will be 0 */ -static grib_iarray* set_subset_list( - grib_context* c, grib_accessor_bufr_data_array_t* self, - long onlySubset, long startSubset, long endSubset, const long* subsetList, size_t subsetListSize) +grib_iarray* grib_accessor_bufr_data_array_t::set_subset_list( + grib_context* c, + long onlySubset, long startSubset, long endSubset, const long* subsetList, size_t subsetListSize) { - grib_iarray* list = grib_iarray_new(c, self->numberOfSubsets, 10); - long s = 0; + grib_iarray* list = grib_iarray_new(numberOfSubsets_, 10); + long s = 0; #ifdef DEBUG if (subsetList == NULL) { @@ -2045,7 +2072,7 @@ static grib_iarray* set_subset_list( } if (grib_iarray_used_size(list) == 0) { - for (s = 0; s < self->numberOfSubsets; s++) + for (s = 0; s < numberOfSubsets_; s++) grib_iarray_push(list, s); } @@ -2064,7 +2091,8 @@ static int bitmap_ref_skip(grib_accessors_list* al, int* err) acode = al->accessor->get_attribute("code"); if (acode) - *err = acode->unpack_long(code, &l); else + *err = acode->unpack_long(code, &l); + else return 1; switch (code[0]) { @@ -2109,9 +2137,9 @@ static int is_bitmap_start_descriptor(grib_accessors_list* al, int* err) case 237000: /*case 243000:*/ { - //long index[1]; - //grib_accessor* anindex=grib_accessor_get_attribute(al->accessor,"index"); - //anindex->unpack_long(index,&l); + // long index[1]; + // grib_accessor* anindex=grib_accessor_get_attribute(al->accessor,"index"); + // anindex->unpack_long(index,&l); return 1; } } @@ -2138,7 +2166,7 @@ static void print_bitmap_debug_info(grib_context* c, bitmap_s* bitmap, grib_acce for (i = 1; i < bitmapSize; i++) { if (bitmap->referredElement) { - fprintf(stderr, "ECCODES DEBUG:\t bitmap_init: i=%d |%s|\n", i, bitmap->referredElement->accessor->name); + fprintf(stderr, "ECCODES DEBUG:\t bitmap_init: i=%d |%s|\n", i, bitmap->referredElement->accessor->name_); bitmap->referredElement = bitmap->referredElement->prev_; } } @@ -2200,25 +2228,24 @@ static grib_accessor* accessor_or_attribute_with_same_name(grib_accessor* a, con // static int get_key_rank(grib_trie* accessorsRank,grib_accessor* a) // { -// int* r=(int*)grib_trie_get(accessorsRank,a->name); +// int* r=(int*)grib_trie_get(accessorsRank,name_ ); // if (r) (*r)++; // else { -// r=(int*)grib_context_malloc(a->context,sizeof(int)); +// r=(int*)grib_context_malloc(context_ ,sizeof(int)); // *r=1; -// grib_trie_insert(accessorsRank,a->name,(void*)r); +// grib_trie_insert(accessorsRank,name_ ,(void*)r); // } // return *r; // } static int grib_data_accessors_trie_push(grib_trie_with_rank* accessorsTrie, grib_accessor* a) { - return grib_trie_with_rank_insert(accessorsTrie, a->name, a); + return grib_trie_with_rank_insert(accessorsTrie, a->name_, a); } -static int create_keys(const grib_accessor* a, long onlySubset, long startSubset, long endSubset) +int grib_accessor_bufr_data_array_t::create_keys(long onlySubset, long startSubset, long endSubset) { - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - int err = 0; + int err = 0; int rank; grib_accessor* elementAccessor = 0; grib_accessor* associatedFieldAccessor = 0; @@ -2234,26 +2261,42 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset int depth; int max_depth = -1; /* highest value of depth */ int idx; - grib_context* c = a->context; + grib_context* c = context_; int qualityPresent = 0; - bitmap_s bitmap = {0,}; + bitmap_s bitmap = { + 0, + }; int extraElement = 0; int add_extra_attributes = 1; grib_accessor* gaGroup = 0; - grib_action creatorGroup = {0,}; - grib_accessor* significanceQualifierGroup[NUMBER_OF_QUALIFIERS_PER_CATEGORY * NUMBER_OF_QUALIFIERS_CATEGORIES] = {0,}; - int significanceQualifierDepth[NUMBER_OF_QUALIFIERS_PER_CATEGORY * NUMBER_OF_QUALIFIERS_CATEGORIES] = {0,}; + grib_action creatorGroup = { + 0, + }; + grib_accessor* significanceQualifierGroup[NUMBER_OF_QUALIFIERS_PER_CATEGORY * NUMBER_OF_QUALIFIERS_CATEGORIES] = { + 0, + }; + int significanceQualifierDepth[NUMBER_OF_QUALIFIERS_PER_CATEGORY * NUMBER_OF_QUALIFIERS_CATEGORIES] = { + 0, + }; - grib_accessor* bitmapGroup[MAX_NUMBER_OF_BITMAPS] = {0,}; - int bitmapDepth[MAX_NUMBER_OF_BITMAPS] = {0,}; - int bitmapSize[MAX_NUMBER_OF_BITMAPS] = {0,}; - grib_accessors_list* bitmapStart[MAX_NUMBER_OF_BITMAPS] = {0,}; + grib_accessor* bitmapGroup[MAX_NUMBER_OF_BITMAPS] = { + 0, + }; + int bitmapDepth[MAX_NUMBER_OF_BITMAPS] = { + 0, + }; + int bitmapSize[MAX_NUMBER_OF_BITMAPS] = { + 0, + }; + grib_accessors_list* bitmapStart[MAX_NUMBER_OF_BITMAPS] = { + 0, + }; grib_accessors_list* lastAccessorInList = NULL; int bitmapIndex = -1; int incrementBitmapIndex = 1; grib_accessor* elementFromBitmap = NULL; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); /*int reuseBitmap=0;*/ int add_dump_flag = 1, add_coord_flag = 0, count = 0; /*int forceGroupClosure=0;*/ @@ -2264,40 +2307,40 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset creatorGroup.flags = GRIB_ACCESSOR_FLAG_DUMP; creatorGroup.set = 0; - if (self->dataAccessors) { - grib_accessors_list_delete(c, self->dataAccessors); + if (dataAccessors_) { + grib_accessors_list_delete(c, dataAccessors_); } - self->dataAccessors = grib_accessors_list_create(c); + dataAccessors_ = grib_accessors_list_create(c); - if (self->dataAccessorsTrie) { + if (dataAccessorsTrie_) { /* ECC-989: do not call grib_trie_with_rank_delete */ - grib_trie_with_rank_delete_container(self->dataAccessorsTrie); + grib_trie_with_rank_delete_container(dataAccessorsTrie_); } - self->dataAccessorsTrie = grib_trie_with_rank_new(c); + dataAccessorsTrie_ = grib_trie_with_rank_new(c); - if (self->tempStrings) { - grib_sarray_delete_content(c, self->tempStrings); - grib_sarray_delete(c, self->tempStrings); - self->tempStrings = NULL; + if (tempStrings_) { + grib_sarray_delete_content(tempStrings_); + grib_sarray_delete(tempStrings_); + tempStrings_ = NULL; } - self->tempStrings = self->numberOfSubsets? grib_sarray_new(c, self->numberOfSubsets, 500) : NULL; + tempStrings_ = numberOfSubsets_ ? grib_sarray_new(numberOfSubsets_, 500) : NULL; - end = self->compressedData ? 1 : self->numberOfSubsets; + end = compressedData_ ? 1 : numberOfSubsets_; // groupNumber = 1; - gaGroup = grib_accessor_factory(self->dataKeys, &creatorGroup, 0, NULL); - //gaGroup->bufr_group_number = groupNumber; - gaGroup->sub_section = grib_section_create(hand, gaGroup); - section = gaGroup->sub_section; + gaGroup = grib_accessor_factory(dataKeys_, &creatorGroup, 0, NULL); + // gaGroup->bufr_group_number = groupNumber; + gaGroup->sub_section_ = grib_section_create(hand, gaGroup); + section = gaGroup->sub_section_; /*rootSection=section;*/ - /*sectionUp=self->dataKeys;*/ - //accessor_constant_set_type(gaGroup, GRIB_TYPE_LONG); - //accessor_constant_set_dval(gaGroup, groupNumber); + /*sectionUp=self->dataKeys_;*/ + // accessor_constant_set_type(gaGroup, GRIB_TYPE_LONG); + // accessor_constant_set_dval(gaGroup, groupNumber); /* ECC-765: Don't empty out the section_4 keys otherwise there will be memory leaks. */ /* Setting first and last to zero effectively masks out those section 4 keys! */ - /* self->dataKeys->block->first=0; */ - /* self->dataKeys->block->last=0; */ - grib_push_accessor(gaGroup, self->dataKeys->block); /* Add group accessors to section 4 */ + /* self->dataKeys_->block->first=0; */ + /* dataKeys_->block->last=0; */ + grib_push_accessor(gaGroup, dataKeys_->block); /* Add group accessors to section 4 */ /*indexOfGroupNumber=0;*/ depth = 0; @@ -2307,7 +2350,7 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset for (iss = 0; iss < end; iss++) { qualityPresent = 0; /*forceGroupClosure=0;*/ - elementsInSubset = self->compressedData ? grib_iarray_used_size(self->elementsDescriptorsIndex->v[0]) : grib_iarray_used_size(self->elementsDescriptorsIndex->v[iss]); + elementsInSubset = compressedData_ ? grib_iarray_used_size(elementsDescriptorsIndex_->v[0]) : grib_iarray_used_size(elementsDescriptorsIndex_->v[iss]); /*if (associatedFieldAccessor) grib_accessor_delete(c, associatedFieldAccessor);*/ associatedFieldAccessor = NULL; if (associatedFieldSignificanceAccessor) { @@ -2315,23 +2358,23 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset associatedFieldSignificanceAccessor = NULL; } for (ide = 0; ide < elementsInSubset; ide++) { - idx = self->compressedData ? self->elementsDescriptorsIndex->v[0]->v[ide] : self->elementsDescriptorsIndex->v[iss]->v[ide]; + idx = compressedData_ ? elementsDescriptorsIndex_->v[0]->v[ide] : elementsDescriptorsIndex_->v[iss]->v[ide]; - descriptor = self->expanded->v[idx]; + descriptor = expanded_->v[idx]; if (descriptor->nokey == 1) { continue; /* Descriptor does not have an associated key e.g. inside op 203YYY */ } elementFromBitmap = NULL; - add_coord_flag = 0; + add_coord_flag = 0; if (descriptor->F == 0 && IS_COORDINATE_DESCRIPTOR(descriptor->X) && - self->unpackMode == CODES_BUFR_UNPACK_STRUCTURE) { + unpackMode_ == CODES_BUFR_UNPACK_STRUCTURE) { const int sidx = descriptor->Y + significanceQualifierIndexArray[descriptor->X] * NUMBER_OF_QUALIFIERS_PER_CATEGORY; DEBUG_ASSERT(sidx > 0); // groupNumber++; add_coord_flag = 1; if (significanceQualifierGroup[sidx]) { - groupSection = significanceQualifierGroup[sidx]->parent; + groupSection = significanceQualifierGroup[sidx]->parent_; depth = significanceQualifierDepth[sidx]; if (depth < max_depth) { /* If depth >= max_depth, then no entry will be deeper so no need for call */ @@ -2350,15 +2393,15 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset /* } */ } - gaGroup = grib_accessor_factory(groupSection, &creatorGroup, 0, NULL); - gaGroup->sub_section = grib_section_create(hand, gaGroup); - //gaGroup->bufr_group_number = groupNumber; + gaGroup = grib_accessor_factory(groupSection, &creatorGroup, 0, NULL); + gaGroup->sub_section_ = grib_section_create(hand, gaGroup); + // gaGroup->bufr_group_number = groupNumber; - //accessor_constant_set_type(gaGroup, GRIB_TYPE_LONG); - //accessor_constant_set_dval(gaGroup, groupNumber); + // accessor_constant_set_type(gaGroup, GRIB_TYPE_LONG); + // accessor_constant_set_dval(gaGroup, groupNumber); grib_push_accessor(gaGroup, groupSection->block); - section = gaGroup->sub_section; + section = gaGroup->sub_section_; /*sectionUp=gaGroup->parent;*/ significanceQualifierGroup[sidx] = gaGroup; @@ -2374,18 +2417,18 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset // groupNumber++; incrementBitmapIndex = 0; if (bitmapIndex >= MAX_NUMBER_OF_BITMAPS) { - //grib_context_log(c, GRIB_LOG_ERROR, "Bitmap error: bitmap index=%d, max num bitmaps=%d\n", bitmapIndex, MAX_NUMBER_OF_BITMAPS); - //err = GRIB_DECODING_ERROR; - //return err; + // grib_context_log(c, GRIB_LOG_ERROR, "Bitmap error: bitmap index=%d, max num bitmaps=%d\n", bitmapIndex, MAX_NUMBER_OF_BITMAPS); + // err = GRIB_DECODING_ERROR; + // return err; bitmapIndex--; } - bitmapStart[bitmapIndex] = self->dataAccessors->last(); + bitmapStart[bitmapIndex] = dataAccessors_->last(); bitmapSize[bitmapIndex] = 1; - if (self->expanded->v[idx - 1]->code == 31002 || self->expanded->v[idx - 1]->code == 31001) + if (expanded_->v[idx - 1]->code == 31002 || expanded_->v[idx - 1]->code == 31001) extraElement += 1; if (bitmapGroup[bitmapIndex]) { - groupSection = bitmapGroup[bitmapIndex]->parent; + groupSection = bitmapGroup[bitmapIndex]->parent_; depth = bitmapDepth[bitmapIndex]; reset_deeper_qualifiers(significanceQualifierGroup, significanceQualifierDepth, number_of_qualifiers, depth); @@ -2396,14 +2439,14 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset groupSection = section; depth++; } - gaGroup = grib_accessor_factory(groupSection, &creatorGroup, 0, NULL); - gaGroup->sub_section = grib_section_create(hand, gaGroup); + gaGroup = grib_accessor_factory(groupSection, &creatorGroup, 0, NULL); + gaGroup->sub_section_ = grib_section_create(hand, gaGroup); // gaGroup->bufr_group_number = groupNumber; - //accessor_constant_set_type(gaGroup, GRIB_TYPE_LONG); - //accessor_constant_set_dval(gaGroup, groupNumber); + // accessor_constant_set_type(gaGroup, GRIB_TYPE_LONG); + // accessor_constant_set_dval(gaGroup, groupNumber); grib_push_accessor(gaGroup, groupSection->block); - section = gaGroup->sub_section; + section = gaGroup->sub_section_; /*sectionUp=gaGroup->parent;*/ bitmapGroup[bitmapIndex] = gaGroup; bitmapDepth[bitmapIndex] = depth; @@ -2438,9 +2481,9 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset else if ((descriptor->X == 33 || bufr_descriptor_is_marker(descriptor)) && qualityPresent) { if (!bitmap.referredElement) bitmap_init(c, &bitmap, bitmapStart[bitmapIndex], bitmapSize[bitmapIndex], lastAccessorInList); - elementFromBitmap = get_element_from_bitmap(a, &bitmap); + elementFromBitmap = get_element_from_bitmap(&bitmap); add_dump_flag = 1; - /* } else if ( descriptor->Y==1 && IS_COORDINATE_DESCRIPTOR(self->expanded->v[idx-1]->X)==0) { */ + /* } else if ( descriptor->Y==1 && IS_COORDINATE_DESCRIPTOR(self->expanded_ ->v[idx-1]->X)==0) { */ /* forceGroupClosure=1; */ /* reset_qualifiers(significanceQualifierGroup); */ } @@ -2448,51 +2491,54 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset add_dump_flag = 1; /* ECC-690: percentConfidence WITHOUT a bitmap! e.g. NOAA GOES16 BUFR */ } - if (ide == 0 && !self->compressedData) { - grib_accessor* asn = NULL; + if (ide == 0 && !compressedData_) { + long subsetNumber = iss + 1; size_t len = 1; - grib_action creatorsn = {0,}; + grib_action creatorsn = { + 0, + }; creatorsn.op = (char*)"variable"; creatorsn.name_space = (char*)""; creatorsn.flags = GRIB_ACCESSOR_FLAG_READ_ONLY | GRIB_ACCESSOR_FLAG_DUMP; creatorsn.set = 0; - creatorsn.name = (char*)"subsetNumber"; - asn = grib_accessor_factory(section, &creatorsn, 0, NULL); - accessor_variable_set_type(asn, GRIB_TYPE_LONG); + creatorsn.name = (char*)"subsetNumber"; + grib_accessor* a = grib_accessor_factory(section, &creatorsn, 0, NULL); + grib_accessor_variable_t* asn = dynamic_cast(a); + asn->accessor_variable_set_type(GRIB_TYPE_LONG); asn->pack_long(&subsetNumber, &len); grib_push_accessor(asn, section->block); - rank = grib_data_accessors_trie_push(self->dataAccessorsTrie, asn); - self->dataAccessors->push(asn, rank); + rank = grib_data_accessors_trie_push(dataAccessorsTrie_, asn); + dataAccessors_->push(asn, rank); } count++; - elementAccessor = create_accessor_from_descriptor(a, associatedFieldAccessor, section, ide, iss, + elementAccessor = create_accessor_from_descriptor(associatedFieldAccessor, section, ide, iss, add_dump_flag, add_coord_flag, count, add_extra_attributes); if (!elementAccessor) { err = GRIB_DECODING_ERROR; return err; } - if (elementAccessor->name == NULL) { + if (elementAccessor->name_ == NULL) { return GRIB_DECODING_ERROR; } /*if (associatedFieldAccessor) grib_accessor_delete(c, associatedFieldAccessor);*/ associatedFieldAccessor = NULL; - if (elementFromBitmap && self->unpackMode == CODES_BUFR_UNPACK_STRUCTURE) { + if (elementFromBitmap && unpackMode_ == CODES_BUFR_UNPACK_STRUCTURE) { if (descriptor->code != 33007 && descriptor->code != 223255) { - char* aname = grib_context_strdup(c, elementFromBitmap->name); + char* aname = grib_context_strdup(c, elementFromBitmap->name_); grib_accessor* newAccessor = elementAccessor->clone(section, &err); - newAccessor->parent = groupSection; - newAccessor->name = aname; - grib_sarray_push(a->context, self->tempStrings, aname); + newAccessor->parent_ = groupSection; + newAccessor->name_ = aname; + grib_sarray_push(tempStrings_, aname); grib_push_accessor(newAccessor, groupSection->block); - rank = grib_data_accessors_trie_push(self->dataAccessorsTrie, newAccessor); - self->dataAccessors->push(newAccessor, rank); + rank = grib_data_accessors_trie_push(dataAccessorsTrie_, newAccessor); + dataAccessors_->push(newAccessor, rank); } - //err = grib_accessor_add_attribute(accessor_or_attribute_with_same_name(elementFromBitmap, elementAccessor->name), elementAccessor, 1); - err = accessor_or_attribute_with_same_name(elementFromBitmap, elementAccessor->name)->add_attribute( elementAccessor, 1); + // err = grib_accessor_add_attribute(accessor_or_attribute_with_same_name(elementFromBitmap, elementAccessor->name), elementAccessor, 1); + err = accessor_or_attribute_with_same_name(elementFromBitmap, elementAccessor->name_)->add_attribute(elementAccessor, 1); } else if (elementAccessor) { int add_key = 1; @@ -2504,7 +2550,7 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset if (associatedFieldSignificanceAccessor) { grib_accessor* newAccessor = associatedFieldSignificanceAccessor->clone(section, &err); if (err) { - grib_context_log(a->context, GRIB_LOG_ERROR,"Unable to clone accessor '%s'\n", associatedFieldSignificanceAccessor->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to clone accessor '%s'\n", associatedFieldSignificanceAccessor->name_); return err; } associatedFieldAccessor->add_attribute(newAccessor, 1); @@ -2529,9 +2575,9 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset } if (add_key) { grib_push_accessor(elementAccessor, section->block); - rank = grib_data_accessors_trie_push(self->dataAccessorsTrie, elementAccessor); - self->dataAccessors->push(elementAccessor, rank); - lastAccessorInList = self->dataAccessors->last(); + rank = grib_data_accessors_trie_push(dataAccessorsTrie_, elementAccessor); + dataAccessors_->push(elementAccessor, rank); + lastAccessorInList = dataAccessors_->last(); } } } @@ -2541,67 +2587,67 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset return err; } -static void set_input_replications(grib_handle* h, grib_accessor_bufr_data_array_t* self) +void grib_accessor_bufr_data_array_t::set_input_replications(grib_handle* h) { size_t nInputReplications; size_t nInputExtendedReplications; size_t nInputShortReplications; - self->nInputReplications = -1; - self->nInputExtendedReplications = -1; - self->nInputShortReplications = -1; - self->iInputReplications = 0; - self->iInputExtendedReplications = 0; - self->iInputShortReplications = 0; + nInputReplications_ = -1; + nInputExtendedReplications_ = -1; + nInputShortReplications_ = -1; + iInputReplications_ = 0; + iInputExtendedReplications_ = 0; + iInputShortReplications_ = 0; if (grib_get_size(h, "inputDelayedDescriptorReplicationFactor", &nInputReplications) == 0 && nInputReplications != 0) { - if (self->inputReplications) - grib_context_free(h->context, self->inputReplications); - self->inputReplications = (long*)grib_context_malloc_clear(h->context, sizeof(long) * nInputReplications); - grib_get_long_array(h, "inputDelayedDescriptorReplicationFactor", self->inputReplications, &nInputReplications); + if (inputReplications_) + grib_context_free(h->context, inputReplications_); + inputReplications_ = (long*)grib_context_malloc_clear(h->context, sizeof(long) * nInputReplications); + grib_get_long_array(h, "inputDelayedDescriptorReplicationFactor", inputReplications_, &nInputReplications); /* default-> no input replications*/ - if (self->inputReplications[0] < 0) - self->nInputReplications = -1; + if (inputReplications_[0] < 0) + nInputReplications_ = -1; else - self->nInputReplications = nInputReplications; + nInputReplications_ = nInputReplications; } if (grib_get_size(h, "inputExtendedDelayedDescriptorReplicationFactor", &nInputExtendedReplications) == 0 && nInputExtendedReplications != 0) { - if (self->inputExtendedReplications) - grib_context_free(h->context, self->inputExtendedReplications); - self->inputExtendedReplications = (long*)grib_context_malloc_clear(h->context, sizeof(long) * nInputExtendedReplications); - grib_get_long_array(h, "inputExtendedDelayedDescriptorReplicationFactor", self->inputExtendedReplications, &nInputExtendedReplications); + if (inputExtendedReplications_) + grib_context_free(h->context, inputExtendedReplications_); + inputExtendedReplications_ = (long*)grib_context_malloc_clear(h->context, sizeof(long) * nInputExtendedReplications); + grib_get_long_array(h, "inputExtendedDelayedDescriptorReplicationFactor", inputExtendedReplications_, &nInputExtendedReplications); /* default-> no input replications*/ - if (self->inputExtendedReplications[0] < 0) - self->nInputExtendedReplications = -1; + if (inputExtendedReplications_[0] < 0) + nInputExtendedReplications_ = -1; else - self->nInputExtendedReplications = nInputExtendedReplications; + nInputExtendedReplications_ = nInputExtendedReplications; } if (grib_get_size(h, "inputShortDelayedDescriptorReplicationFactor", &nInputShortReplications) == 0 && nInputShortReplications != 0) { - if (self->inputShortReplications) - grib_context_free(h->context, self->inputShortReplications); - self->inputShortReplications = (long*)grib_context_malloc_clear(h->context, sizeof(long) * nInputShortReplications); - grib_get_long_array(h, "inputShortDelayedDescriptorReplicationFactor", self->inputShortReplications, &nInputShortReplications); + if (inputShortReplications_) + grib_context_free(h->context, inputShortReplications_); + inputShortReplications_ = (long*)grib_context_malloc_clear(h->context, sizeof(long) * nInputShortReplications); + grib_get_long_array(h, "inputShortDelayedDescriptorReplicationFactor", inputShortReplications_, &nInputShortReplications); /* default-> no input replications*/ - if (self->inputShortReplications[0] < 0) - self->nInputShortReplications = -1; + if (inputShortReplications_[0] < 0) + nInputShortReplications_ = -1; else - self->nInputShortReplications = nInputShortReplications; + nInputShortReplications_ = nInputShortReplications; } } -static void set_input_bitmap(grib_handle* h, grib_accessor_bufr_data_array_t* self) +void grib_accessor_bufr_data_array_t::set_input_bitmap(grib_handle* h) { size_t nInputBitmap; - self->nInputBitmap = -1; - self->iInputBitmap = 0; + nInputBitmap_ = -1; + iInputBitmap_ = 0; if (grib_get_size(h, "inputDataPresentIndicator", &nInputBitmap) == 0 && nInputBitmap != 0) { - if (self->inputBitmap) - grib_context_free(h->context, self->inputBitmap); - self->inputBitmap = (double*)grib_context_malloc_clear(h->context, sizeof(double) * nInputBitmap); - grib_get_double_array(h, "inputDataPresentIndicator", self->inputBitmap, &nInputBitmap); + if (inputBitmap_) + grib_context_free(h->context, inputBitmap_); + inputBitmap_ = (double*)grib_context_malloc_clear(h->context, sizeof(double) * nInputBitmap); + grib_get_double_array(h, "inputDataPresentIndicator", inputBitmap_, &nInputBitmap); /* default-> no input bitmap*/ - if (self->inputBitmap[0] < 0) - self->nInputBitmap = -1; + if (inputBitmap_[0] < 0) + nInputBitmap_ = -1; else - self->nInputBitmap = nInputBitmap; + nInputBitmap_ = nInputBitmap; } } @@ -2617,15 +2663,25 @@ static int set_to_missing_if_out_of_range(grib_handle* h) return h->context->bufr_set_to_missing_if_out_of_range; } -static int process_elements(grib_accessor* a, int flag, long onlySubset, long startSubset, long endSubset) +int grib_accessor_bufr_data_array_t::process_elements(int flag, long onlySubset, long startSubset, long endSubset) { int err = 0; long inr, innr, ir, ip; - long n[MAX_NESTED_REPLICATIONS] = {0,}; - long nn[MAX_NESTED_REPLICATIONS] = {0,}; - long numberOfElementsToRepeat[MAX_NESTED_REPLICATIONS] = {0,}; - long numberOfRepetitions[MAX_NESTED_REPLICATIONS] = {0,}; - long startRepetition[MAX_NESTED_REPLICATIONS] = {0,}; + long n[MAX_NESTED_REPLICATIONS] = { + 0, + }; + long nn[MAX_NESTED_REPLICATIONS] = { + 0, + }; + long numberOfElementsToRepeat[MAX_NESTED_REPLICATIONS] = { + 0, + }; + long numberOfRepetitions[MAX_NESTED_REPLICATIONS] = { + 0, + }; + long startRepetition[MAX_NESTED_REPLICATIONS] = { + 0, + }; long numberOfNestedRepetitions = 0; unsigned char* data = 0; size_t subsetListSize = 0; @@ -2646,24 +2702,23 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st grib_accessor* dataAccessor = NULL; bufr_descriptor* bd = 0; - grib_darray* dval = NULL; - grib_sarray* sval = NULL; - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; + grib_darray* dval = NULL; + grib_sarray* sval = NULL; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); grib_context* c = h->context; - totalSize = self->bitsToEndData; + totalSize = bitsToEndData_; switch (flag) { case PROCESS_DECODE: - if (!self->do_decode) + if (!do_decode_) return 0; - self->do_decode = 0; - buffer = h->buffer; - decoding = 1; - do_clean = 1; - dataAccessor = grib_find_accessor(grib_handle_of_accessor(a), self->bufrDataEncodedName); + do_decode_ = 0; + buffer = h->buffer; + decoding = 1; + do_clean = 1; + dataAccessor = grib_find_accessor(grib_handle_of_accessor(this), bufrDataEncodedName_); DEBUG_ASSERT(dataAccessor); dataOffset = accessor_raw_get_offset(dataAccessor); pos = dataOffset * 8; @@ -2671,38 +2726,38 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st codec_replication = &decode_replication; break; case PROCESS_NEW_DATA: - buffer = grib_create_growable_buffer(c); - decoding = 0; - do_clean = 1; - self->do_decode = 1; - self->set_to_missing_if_out_of_range = set_to_missing_if_out_of_range(h); - pos = 0; - codec_element = &encode_new_element; - codec_replication = &encode_new_replication; + buffer = grib_create_growable_buffer(c); + decoding = 0; + do_clean = 1; + do_decode_ = 1; + set_to_missing_if_out_of_range_ = set_to_missing_if_out_of_range(h); + pos = 0; + codec_element = &encode_new_element; + codec_replication = &encode_new_replication; - set_input_replications(h, self); - set_input_bitmap(h, self); + set_input_replications(h); + set_input_bitmap(h); break; case PROCESS_ENCODE: - buffer = grib_create_growable_buffer(c); - decoding = 0; - do_clean = 0; - self->do_decode = 0; - self->set_to_missing_if_out_of_range = set_to_missing_if_out_of_range(h); - pos = 0; - codec_element = &encode_element; - grib_get_long(grib_handle_of_accessor(a), "extractSubset", &onlySubset); - grib_get_long(grib_handle_of_accessor(a), "extractSubsetIntervalStart", &startSubset); - grib_get_long(grib_handle_of_accessor(a), "extractSubsetIntervalEnd", &endSubset); - err = grib_get_size(grib_handle_of_accessor(a), "extractSubsetList", &subsetListSize); + buffer = grib_create_growable_buffer(c); + decoding = 0; + do_clean = 0; + do_decode_ = 0; + set_to_missing_if_out_of_range_ = set_to_missing_if_out_of_range(h); + pos = 0; + codec_element = &encode_element; + grib_get_long(grib_handle_of_accessor(this), "extractSubset", &onlySubset); + grib_get_long(grib_handle_of_accessor(this), "extractSubsetIntervalStart", &startSubset); + grib_get_long(grib_handle_of_accessor(this), "extractSubsetIntervalEnd", &endSubset); + err = grib_get_size(grib_handle_of_accessor(this), "extractSubsetList", &subsetListSize); if (err) return err; if (subsetList) grib_context_free(c, subsetList); if (subsetListSize) { subsetList = (long*)grib_context_malloc_clear(c, subsetListSize * sizeof(long)); - err = grib_get_long_array(grib_handle_of_accessor(a), "extractSubsetList", subsetList, &subsetListSize); + err = grib_get_long_array(grib_handle_of_accessor(this), "extractSubsetList", subsetList, &subsetListSize); if (err) return err; } codec_replication = &encode_replication; @@ -2712,88 +2767,89 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st } data = buffer->data; - err = get_descriptors(a); + err = get_descriptors(); if (err) return err; - descriptors = self->expanded->v; + descriptors = expanded_->v; if (!descriptors) { grib_context_log(c, GRIB_LOG_ERROR, "No descriptors found!"); return GRIB_INTERNAL_ERROR; } - if (do_clean == 1 && self->numericValues) { - grib_vdarray_delete_content(c, self->numericValues); - grib_vdarray_delete(c, self->numericValues); - /*printf("dbg process_elements: clear %p\n", (void*)(self->stringValues));*/ - grib_vsarray_delete_content(c, self->stringValues); - grib_vsarray_delete(c, self->stringValues); - self->stringValues = NULL; + if (do_clean == 1 && numericValues_) { + grib_vdarray_delete_content(numericValues_); + grib_vdarray_delete(numericValues_); + /*printf("dbg process_elements: clear %p\n", (void*)(stringValues_ ));*/ + grib_vsarray_delete_content(stringValues_); + grib_vsarray_delete(stringValues_); + stringValues_ = NULL; } if (flag != PROCESS_ENCODE) { - self->numericValues = grib_vdarray_new(c, 1000, 1000); - self->stringValues = grib_vsarray_new(c, 10, 10); + numericValues_ = grib_vdarray_new(1000, 1000); + stringValues_ = grib_vsarray_new(10, 10); - if (self->elementsDescriptorsIndex) { - grib_viarray_delete_content(c, self->elementsDescriptorsIndex); - grib_viarray_delete(c, self->elementsDescriptorsIndex); + if (elementsDescriptorsIndex_) { + grib_viarray_delete_content(elementsDescriptorsIndex_); + grib_viarray_delete(elementsDescriptorsIndex_); } - self->elementsDescriptorsIndex = grib_viarray_new(c, 100, 100); + elementsDescriptorsIndex_ = grib_viarray_new(100, 100); } if (flag == PROCESS_NEW_DATA) { - self->tempDoubleValues = grib_vdarray_new(c, 1000, 1000); + tempDoubleValues_ = grib_vdarray_new(1000, 1000); } if (flag != PROCESS_DECODE) { /* Operator 203YYY: key OVERRIDDEN_REFERENCE_VALUES_KEY */ - err = grib_get_size(h, OVERRIDDEN_REFERENCE_VALUES_KEY, &self->refValListSize); + err = grib_get_size(h, OVERRIDDEN_REFERENCE_VALUES_KEY, &refValListSize_); if (err) return err; - if (self->refValList) - grib_context_free(c, self->refValList); - if (self->refValListSize > 0) { - self->refValList = (long*)grib_context_malloc_clear(c, self->refValListSize * sizeof(long)); - err = grib_get_long_array(grib_handle_of_accessor(a), OVERRIDDEN_REFERENCE_VALUES_KEY, self->refValList, &self->refValListSize); + if (refValList_) + grib_context_free(c, refValList_); + if (refValListSize_ > 0) { + refValList_ = (long*)grib_context_malloc_clear(c, refValListSize_ * sizeof(long)); + err = grib_get_long_array(grib_handle_of_accessor(this), OVERRIDDEN_REFERENCE_VALUES_KEY, refValList_, &refValListSize_); if (err) return err; } } - numberOfDescriptors = grib_bufr_descriptors_array_used_size(self->expanded); + numberOfDescriptors = grib_bufr_descriptors_array_used_size(expanded_); - if (self->iss_list) { - grib_iarray_delete(self->iss_list); - self->iss_list = 0; + if (iss_list_) { + grib_iarray_delete(iss_list_); + iss_list_ = 0; } - end = self->compressedData == 1 ? 1 : self->numberOfSubsets; + end = compressedData_ == 1 ? 1 : numberOfSubsets_; if (flag != PROCESS_DECODE) { - self->iss_list = set_subset_list(c, self, onlySubset, startSubset, endSubset, subsetList, subsetListSize); - end = self->compressedData == 1 ? 1 : grib_iarray_used_size(self->iss_list); + iss_list_ = set_subset_list(c, onlySubset, startSubset, endSubset, subsetList, subsetListSize); + end = compressedData_ == 1 ? 1 : grib_iarray_used_size(iss_list_); } /* Go through all subsets */ for (iiss = 0; iiss < end; iiss++) { icount = 1; - if (self->compressedData == 0 && self->iss_list) { - iss = self->iss_list->v[iiss]; + if (compressedData_ == 0 && iss_list_) { + iss = iss_list_->v[iiss]; } else { iss = iiss; } grib_context_log(c, GRIB_LOG_DEBUG, "BUFR data processing: subsetNumber=%ld", iss + 1); - self->refValIndex = 0; + refValIndex_ = 0; if (flag != PROCESS_ENCODE) { - elementsDescriptorsIndex = grib_iarray_new(c, DYN_ARRAY_SIZE_INIT, DYN_ARRAY_SIZE_INCR); - if (!self->compressedData) { - dval = grib_darray_new(c, DYN_ARRAY_SIZE_INIT, DYN_ARRAY_SIZE_INCR); + elementsDescriptorsIndex = grib_iarray_new(DYN_ARRAY_SIZE_INIT, DYN_ARRAY_SIZE_INCR); + if (!compressedData_) { + dval = grib_darray_new(DYN_ARRAY_SIZE_INIT, DYN_ARRAY_SIZE_INCR); } } else { - if (self->elementsDescriptorsIndex == NULL) { + if (elementsDescriptorsIndex_ == NULL) { + grib_buffer_delete(c, buffer); return GRIB_ENCODING_ERROR; /* See ECC-359 */ } - elementsDescriptorsIndex = self->elementsDescriptorsIndex->v[iss]; - dval = self->numericValues->v[iss]; + elementsDescriptorsIndex = elementsDescriptorsIndex_->v[iss]; + dval = numericValues_->v[iss]; } elementIndex = 0; @@ -2805,18 +2861,18 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st switch (descriptors[i]->F) { case 0: /* Table B element */ - op203_definition_phase = (self->change_ref_value_operand > 0 && self->change_ref_value_operand != 255); + op203_definition_phase = (change_ref_value_operand_ > 0 && change_ref_value_operand_ != 255); if (flag != PROCESS_ENCODE) { if (!op203_definition_phase) grib_iarray_push(elementsDescriptorsIndex, i); } - if (descriptors[i]->code == 31031 && !is_bitmap_start_defined(self)) { - /* self->bitmapStart=grib_iarray_used_size(elementsDescriptorsIndex)-1; */ - self->bitmapStart = elementIndex; + if (descriptors[i]->code == 31031 && !is_bitmap_start_defined()) { + /* bitmapStart_ =grib_iarray_used_size(elementsDescriptorsIndex)-1; */ + bitmapStart_ = elementIndex; } - err = codec_element(c, self, iss, buffer, data, &pos, i, 0, elementIndex, dval, sval); + err = codec_element(c, this, iss, buffer, data, &pos, i, 0, elementIndex, dval, sval); if (err) return err; if (!op203_definition_phase) elementIndex++; @@ -2830,8 +2886,8 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st n[inr] = numberOfElementsToRepeat[inr]; i++; - data = buffer->data; /* ECC-517 */ - err = codec_replication(c, self, iss, buffer, data, &pos, i, elementIndex, dval, &(numberOfRepetitions[inr])); + data = buffer->data; /* ECC-517 */ + err = codec_replication(c, this, iss, buffer, data, &pos, i, elementIndex, dval, &(numberOfRepetitions[inr])); if (err) return err; startRepetition[inr] = i; @@ -2865,42 +2921,42 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st /* Operator */ switch (descriptors[i]->X) { case 3: /* Change reference values */ - if (self->compressedData == 1 && flag != PROCESS_DECODE) { + if (compressedData_ == 1 && flag != PROCESS_DECODE) { grib_context_log(c, GRIB_LOG_ERROR, "process_elements: operator %d not supported for encoding compressed data", descriptors[i]->X); return GRIB_INTERNAL_ERROR; } if (descriptors[i]->Y == 255) { grib_context_log(c, GRIB_LOG_DEBUG, "Operator 203YYY: Y=255, definition of new reference values is concluded"); - self->change_ref_value_operand = 255; + change_ref_value_operand_ = 255; /*if (c->debug) tableB_override_dump(self);*/ if (iss == 0 && flag == PROCESS_DECODE) { /*Write out the contents of the TableB overridden reference values to the transient array key*/ - err = tableB_override_set_key(h, self); + err = tableB_override_set_key(h); if (err) return err; } if (flag != PROCESS_DECODE) { /* Encoding operator 203YYY */ - if (self->refValIndex != self->refValListSize) { + if (refValIndex_ != refValListSize_) { grib_context_log(c, GRIB_LOG_ERROR, "process_elements: The number of overridden reference values (%ld) different from" " number of descriptors between operator 203YYY and 203255 (%ld)", - self->refValListSize, self->refValIndex); + refValListSize_, refValIndex_); return GRIB_ENCODING_ERROR; } } } else if (descriptors[i]->Y == 0) { grib_context_log(c, GRIB_LOG_DEBUG, "Operator 203YYY: Y=0, clearing override of table B"); - tableB_override_clear(c, self); - self->change_ref_value_operand = 0; + tableB_override_clear(c); + change_ref_value_operand_ = 0; } else { const int numBits = descriptors[i]->Y; grib_context_log(c, GRIB_LOG_DEBUG, "Operator 203YYY: Definition phase: Num bits=%d", numBits); - self->change_ref_value_operand = numBits; - tableB_override_clear(c, self); + change_ref_value_operand_ = numBits; + tableB_override_clear(c); if (flag != PROCESS_DECODE) { - err = check_overridden_reference_values(c, self->refValList, self->refValListSize, numBits); + err = check_overridden_reference_values(c, refValList_, refValListSize_, numBits); if (err) return err; } } @@ -2910,7 +2966,7 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st case 5: /* Signify character */ descriptors[i]->width = descriptors[i]->Y * 8; descriptors[i]->type = BUFR_DESCRIPTOR_TYPE_STRING; - err = codec_element(c, self, iss, buffer, data, &pos, i, 0, elementIndex, dval, sval); + err = codec_element(c, this, iss, buffer, data, &pos, i, 0, elementIndex, dval, sval); if (err) return err; if (flag != PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex, i); @@ -2920,16 +2976,16 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st if (descriptors[i]->Y == 0) { if (flag == PROCESS_DECODE) { grib_iarray_push(elementsDescriptorsIndex, i); - push_zero_element(self, dval); + push_zero_element(dval); } else if (flag == PROCESS_ENCODE) { if (descriptors[i + 1] && descriptors[i + 1]->code != 236000 && descriptors[i + 1]->code != 237000) - restart_bitmap(self); + restart_bitmap(); } else if (flag == PROCESS_NEW_DATA) { grib_iarray_push(elementsDescriptorsIndex, i); if (descriptors[i + 1] && descriptors[i + 1]->code != 236000 && descriptors[i + 1]->code != 237000) - consume_bitmap(self, i); + consume_bitmap(i); } elementIndex++; } @@ -2949,20 +3005,20 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st if (flag != PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex, i); if (decoding) - push_zero_element(self, dval); + push_zero_element(dval); elementIndex++; break; - case 24: /* First-order statistical values marker operator */ - case 32: /* Replaced/retained values marker operator */ + case 24: /* First-order statistical values marker operator */ + case 32: /* Replaced/retained values marker operator */ if (descriptors[i]->Y == 255) { - index = get_next_bitmap_descriptor_index(self, elementsDescriptorsIndex, dval); + index = get_next_bitmap_descriptor_index(elementsDescriptorsIndex, dval); if (index < 0) { /* Return value is an error code not an index */ err = index; return err; } - err = codec_element(c, self, iss, buffer, data, &pos, index, 0, elementIndex, dval, sval); + err = codec_element(c, this, iss, buffer, data, &pos, index, 0, elementIndex, dval, sval); if (err) return err; - /* self->expanded->v[index] */ + /* expanded_ ->v[index] */ if (flag != PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex, i); elementIndex++; @@ -2971,21 +3027,21 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st if (flag != PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex, i); if (decoding) { - push_zero_element(self, dval); + push_zero_element(dval); } elementIndex++; } break; - case 23: /* Substituted values operator */ + case 23: /* Substituted values operator */ if (descriptors[i]->Y == 255) { - index = get_next_bitmap_descriptor_index(self, elementsDescriptorsIndex, dval); + index = get_next_bitmap_descriptor_index(elementsDescriptorsIndex, dval); if (index < 0) { /* Return value is an error code not an index */ err = index; return err; } - err = codec_element(c, self, iss, buffer, data, &pos, index, 0, elementIndex, dval, sval); + err = codec_element(c, this, iss, buffer, data, &pos, index, 0, elementIndex, dval, sval); if (err) return err; - /* self->expanded->v[index] */ + /* expanded_ ->v[index] */ if (flag != PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex, i); elementIndex++; @@ -2993,41 +3049,41 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st else { if (flag == PROCESS_DECODE) { grib_iarray_push(elementsDescriptorsIndex, i); - push_zero_element(self, dval); + push_zero_element(dval); if (descriptors[i + 1] && descriptors[i + 1]->code != 236000 && descriptors[i + 1]->code != 237000) { - err = build_bitmap(self, data, &pos, elementIndex, elementsDescriptorsIndex, i); + err = build_bitmap(data, &pos, elementIndex, elementsDescriptorsIndex, i); if (err) return err; } } else if (flag == PROCESS_ENCODE) { if (descriptors[i + 1] && descriptors[i + 1]->code != 236000 && descriptors[i + 1]->code != 237000) - restart_bitmap(self); + restart_bitmap(); } else if (flag == PROCESS_NEW_DATA) { grib_iarray_push(elementsDescriptorsIndex, i); if (descriptors[i + 1] && descriptors[i + 1]->code != 236000 && descriptors[i + 1]->code != 237000) { - err = build_bitmap_new_data(self, data, &pos, elementIndex, elementsDescriptorsIndex, i); + err = build_bitmap_new_data(data, &pos, elementIndex, elementsDescriptorsIndex, i); if (err) return err; } } elementIndex++; } break; - case 25: /* Difference statistical values marker operator */ + case 25: /* Difference statistical values marker operator */ if (descriptors[i]->Y == 255) { - index = get_next_bitmap_descriptor_index(self, elementsDescriptorsIndex, dval); + index = get_next_bitmap_descriptor_index(elementsDescriptorsIndex, dval); if (index < 0) { /* Return value is an error code not an index */ err = index; return err; } - bd = grib_bufr_descriptor_clone(self->expanded->v[index]); + bd = grib_bufr_descriptor_clone(expanded_->v[index]); bd->reference = -codes_power(bd->width, 2); bd->width++; - err = codec_element(c, self, iss, buffer, data, &pos, index, bd, elementIndex, dval, sval); + err = codec_element(c, this, iss, buffer, data, &pos, index, bd, elementIndex, dval, sval); grib_bufr_descriptor_delete(bd); if (err) return err; - /* self->expanded->v[index] */ + /* expanded_ ->v[index] */ if (flag != PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex, i); elementIndex++; @@ -3036,49 +3092,49 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st if (flag != PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex, i); if (decoding) - push_zero_element(self, dval); + push_zero_element(dval); elementIndex++; } break; - case 35: /* Cancel backward data reference (cancel bitmap) */ + case 35: /* Cancel backward data reference (cancel bitmap) */ if (flag != PROCESS_ENCODE) { grib_iarray_push(elementsDescriptorsIndex, i); if (decoding) - push_zero_element(self, dval); + push_zero_element(dval); if (descriptors[i]->Y == 0) - cancel_bitmap(self); + cancel_bitmap(); } elementIndex++; break; - case 36: /* Define data present bit-map */ + case 36: /* Define data present bit-map */ if (flag == PROCESS_DECODE) { grib_iarray_push(elementsDescriptorsIndex, i); if (decoding) - push_zero_element(self, dval); - err = build_bitmap(self, data, &pos, elementIndex, elementsDescriptorsIndex, i); + push_zero_element(dval); + err = build_bitmap(data, &pos, elementIndex, elementsDescriptorsIndex, i); if (err) return err; } else if (flag == PROCESS_ENCODE) { - restart_bitmap(self); + restart_bitmap(); } else if (flag == PROCESS_NEW_DATA) { grib_iarray_push(elementsDescriptorsIndex, i); - err = build_bitmap_new_data(self, data, &pos, elementIndex, elementsDescriptorsIndex, i); + err = build_bitmap_new_data(data, &pos, elementIndex, elementsDescriptorsIndex, i); if (err) return err; } elementIndex++; break; - case 37: /* Use defined data present bit-map = reuse defined bitmap */ + case 37: /* Use defined data present bit-map = reuse defined bitmap */ if (flag != PROCESS_ENCODE) { grib_iarray_push(elementsDescriptorsIndex, i); if (decoding) - push_zero_element(self, dval); + push_zero_element(dval); } if (descriptors[i]->Y == 0) - restart_bitmap(self); + restart_bitmap(); /* cancel reuse */ else - cancel_bitmap(self); + cancel_bitmap(); elementIndex++; break; default: @@ -3089,7 +3145,7 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st case 9: /* Associated field */ if (descriptors[i]->X == 99 && descriptors[i]->Y == 999) { - err = codec_element(c, self, iss, buffer, data, &pos, i, 0, elementIndex, dval, sval); + err = codec_element(c, this, iss, buffer, data, &pos, i, 0, elementIndex, dval, sval); if (err) return err; if (flag != PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex, i); @@ -3141,83 +3197,82 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st } /* for all descriptors */ if (flag != PROCESS_ENCODE) { - grib_viarray_push(c, self->elementsDescriptorsIndex, elementsDescriptorsIndex); + grib_viarray_push(elementsDescriptorsIndex_, elementsDescriptorsIndex); /*grib_iarray_print("DBG process_elements::elementsDescriptorsIndex", elementsDescriptorsIndex);*/ } - if (decoding && !self->compressedData) { - grib_vdarray_push(c, self->numericValues, dval); + if (decoding && !compressedData_) { + grib_vdarray_push(numericValues_, dval); /*grib_darray_print("DBG process_elements::dval", dval);*/ } - if (flag == PROCESS_NEW_DATA && !self->compressedData) { - grib_vdarray_push(c, self->tempDoubleValues, dval); /* ECC-1172 */ + if (flag == PROCESS_NEW_DATA && !compressedData_) { + grib_vdarray_push(tempDoubleValues_, dval); /* ECC-1172 */ } } /* for all subsets */ - /*grib_vdarray_print("DBG process_elements: self->numericValues", self->numericValues);*/ - /*grib_viarray_print("DBG process_elements: self->elementsDescriptorsIndex", self->elementsDescriptorsIndex);*/ + /*grib_vdarray_print("DBG process_elements: numericValues", numericValues_ );*/ + /*grib_viarray_print("DBG process_elements: elementsDescriptorsIndex", elementsDescriptorsIndex_ );*/ if (decoding) { - err = create_keys(a, 0, 0, 0); - self->bitsToEndData = totalSize; + err = create_keys(0, 0, 0); + bitsToEndData_ = totalSize; } else { - self->bitsToEndData = buffer->ulength * 8; - grib_set_bytes(grib_handle_of_accessor(a), self->bufrDataEncodedName, buffer->data, &(buffer->ulength)); + bitsToEndData_ = buffer->ulength * 8; + grib_set_bytes(grib_handle_of_accessor(this), bufrDataEncodedName_, buffer->data, &(buffer->ulength)); grib_buffer_delete(c, buffer); - if (self->numberOfSubsets != grib_iarray_used_size(self->iss_list)) { - grib_set_long(h, self->numberOfSubsetsName, grib_iarray_used_size(self->iss_list)); + if (numberOfSubsets_ != grib_iarray_used_size(iss_list_)) { + grib_set_long(h, numberOfSubsetsName_, grib_iarray_used_size(iss_list_)); } } if (subsetList) - grib_context_free(c, subsetList);/* ECC-1498 */ + grib_context_free(c, subsetList); /* ECC-1498 */ return err; } -void grib_accessor_class_bufr_data_array_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_bufr_data_array_t::dump(grib_dumper* dumper) { // grib_accessor_bufr_data_array_t *self =(grib_accessor_bufr_data_array_t*)a; // int err=process_elements(a,PROCESS_DECODE); - // grib_dump_section(dumper,a,self->dataKeys->block); + // grib_dump_section(dumper,a,self->dataKeys_ ->block); + return; } -int grib_accessor_class_bufr_data_array_t::value_count(grib_accessor* a, long* count) +int grib_accessor_bufr_data_array_t::value_count(long* count) { int err = 0, l; long i; - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - err = process_elements(a, PROCESS_DECODE, 0, 0, 0); + err = process_elements(PROCESS_DECODE, 0, 0, 0); if (err) return err; - if (self->compressedData) { - l = grib_vdarray_used_size(self->numericValues); + if (compressedData_) { + l = grib_vdarray_used_size(numericValues_); - *count = l * self->numberOfSubsets; + *count = l * numberOfSubsets_; } else { *count = 0; - for (i = 0; i < self->numberOfSubsets; i++) - *count += grib_iarray_used_size(self->elementsDescriptorsIndex->v[i]); + for (i = 0; i < numberOfSubsets_; i++) + *count += grib_iarray_used_size(elementsDescriptorsIndex_->v[i]); } return err; } -int grib_accessor_class_bufr_data_array_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_bufr_data_array_t::unpack_double(double* val, size_t* len) { - int err = 0, i, k, ii; - int proc_flag = PROCESS_DECODE; - size_t l = 0, elementsInSubset; - long numberOfSubsets = 0; - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; + int err = 0, i, k, ii; + int proc_flag = PROCESS_DECODE; + size_t l = 0, elementsInSubset; + long numberOfSubsets = 0; - if (self->unpackMode == CODES_BUFR_NEW_DATA) + if (unpackMode_ == CODES_BUFR_NEW_DATA) proc_flag = PROCESS_NEW_DATA; - err = process_elements(a, proc_flag, 0, 0, 0); + err = process_elements(proc_flag, 0, 0, 0); if (err) return err; if (!val) @@ -3227,32 +3282,32 @@ int grib_accessor_class_bufr_data_array_t::unpack_double(grib_accessor* a, doubl * but when client requests a key like 'numericValues', then we end up here */ - l = grib_vdarray_used_size(self->numericValues); - err = grib_get_long(grib_handle_of_accessor(a), self->numberOfSubsetsName, &numberOfSubsets); + l = grib_vdarray_used_size(numericValues_); + err = grib_get_long(grib_handle_of_accessor(this), numberOfSubsetsName_, &numberOfSubsets); if (err) return err; - if (self->compressedData) { - const size_t rlen = l * self->numberOfSubsets; - ii = 0; + if (compressedData_) { + const size_t rlen = l * numberOfSubsets_; + ii = 0; if (*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "wrong size (%ld) for %s, it contains %ld values ", *len, a->name, rlen); + grib_context_log(context_, GRIB_LOG_ERROR, + "wrong size (%ld) for %s, it contains %ld values ", *len, name_, rlen); *len = 0; return GRIB_ARRAY_TOO_SMALL; } for (k = 0; k < numberOfSubsets; k++) { for (i = 0; i < l; i++) { - val[ii++] = self->numericValues->v[i]->n > 1 ? self->numericValues->v[i]->v[k] : self->numericValues->v[i]->v[0]; + val[ii++] = numericValues_->v[i]->n > 1 ? numericValues_->v[i]->v[k] : numericValues_->v[i]->v[0]; } } } else { ii = 0; for (k = 0; k < numberOfSubsets; k++) { - elementsInSubset = grib_iarray_used_size(self->elementsDescriptorsIndex->v[k]); + elementsInSubset = grib_iarray_used_size(elementsDescriptorsIndex_->v[k]); for (i = 0; i < elementsInSubset; i++) { - val[ii++] = self->numericValues->v[k]->v[i]; + val[ii++] = numericValues_->v[k]->v[i]; } } } @@ -3260,27 +3315,26 @@ int grib_accessor_class_bufr_data_array_t::unpack_double(grib_accessor* a, doubl return GRIB_SUCCESS; } -void grib_accessor_class_bufr_data_array_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_bufr_data_array_t::destroy(grib_context* c) { - grib_accessor_bufr_data_array_t* self = (grib_accessor_bufr_data_array_t*)a; - self_clear(c, self); - if (self->dataAccessors) - grib_accessors_list_delete(c, self->dataAccessors); - if (self->dataAccessorsTrie) { - grib_trie_with_rank_delete_container(self->dataAccessorsTrie); - self->dataAccessorsTrie = NULL; + self_clear(); + if (dataAccessors_) + grib_accessors_list_delete(c, dataAccessors_); + if (dataAccessorsTrie_) { + grib_trie_with_rank_delete_container(dataAccessorsTrie_); + dataAccessorsTrie_ = NULL; } - if (self->tempStrings) { - grib_sarray_delete_content(c, self->tempStrings); - grib_sarray_delete(c, self->tempStrings); + if (tempStrings_) { + grib_sarray_delete_content(tempStrings_); + grib_sarray_delete(tempStrings_); } - if (self->tempDoubleValues) { + if (tempDoubleValues_) { /* ECC-1172: Clean up to avoid memory leaks */ - grib_vdarray_delete_content(c, self->tempDoubleValues); - grib_vdarray_delete(c, self->tempDoubleValues); - self->tempDoubleValues = NULL; + grib_vdarray_delete_content(tempDoubleValues_); + grib_vdarray_delete(tempDoubleValues_); + tempDoubleValues_ = NULL; } - grib_iarray_delete(self->iss_list); - grib_accessor_class_gen_t::destroy(c, a); + grib_iarray_delete(iss_list_); + grib_accessor_gen_t::destroy(c); } diff --git a/src/accessor/grib_accessor_class_bufr_data_array.h b/src/accessor/grib_accessor_class_bufr_data_array.h index 75d02b9b4..95bc2889e 100644 --- a/src/accessor/grib_accessor_class_bufr_data_array.h +++ b/src/accessor/grib_accessor_class_bufr_data_array.h @@ -11,79 +11,129 @@ #pragma once #include "grib_accessor_class_gen.h" +#include "grib_accessor_class_expanded_descriptors.h" + +typedef struct bitmap_s +{ + grib_accessors_list* cursor; + grib_accessors_list* referredElement; + grib_accessors_list* referredElementStart; +} bitmap_s; + + +class grib_accessor_bufr_data_array_t; class grib_accessor_bufr_data_array_t : public grib_accessor_gen_t { public: - const char* bufrDataEncodedName; - const char* numberOfSubsetsName; - const char* expandedDescriptorsName; - const char* flagsName; - const char* unitsName; - const char* elementsDescriptorsIndexName; - const char* compressedDataName; - bufr_descriptors_array* expanded; - grib_accessor* expandedAccessor; - int* canBeMissing; - long numberOfSubsets; - long compressedData; - grib_vdarray* numericValues; - grib_vsarray* stringValues; - grib_viarray* elementsDescriptorsIndex; - int do_decode; - int bitmapStartElementsDescriptorsIndex; - int bitmapCurrentElementsDescriptorsIndex; - int bitmapSize; - int bitmapStart; - int bitmapCurrent; - grib_accessors_list* dataAccessors; - int unpackMode; - int bitsToEndData; - grib_section* dataKeys; - double* inputBitmap; - int nInputBitmap; - int iInputBitmap; - long* inputReplications; - int nInputReplications; - int iInputReplications; - long* inputExtendedReplications; - int nInputExtendedReplications; - int iInputExtendedReplications; - long* inputShortReplications; - int nInputShortReplications; - int iInputShortReplications; - grib_iarray* iss_list; - grib_trie_with_rank* dataAccessorsTrie; - grib_sarray* tempStrings; - grib_vdarray* tempDoubleValues; - int change_ref_value_operand; - size_t refValListSize; - long* refValList; - long refValIndex; - bufr_tableb_override* tableb_override; - int set_to_missing_if_out_of_range; -}; - -class grib_accessor_class_bufr_data_array_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_bufr_data_array_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_bufr_data_array_t() : + grib_accessor_gen_t() { class_name_ = "bufr_data_array"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bufr_data_array_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - long byte_count(grib_accessor*) override; - long byte_offset(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + long byte_count() override; + long byte_offset() override; + long next_offset() override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + + void accessor_bufr_data_array_set_unpackMode(int); + grib_accessors_list* accessor_bufr_data_array_get_dataAccessors(); + grib_trie_with_rank* accessor_bufr_data_array_get_dataAccessorsTrie(); + grib_vsarray* accessor_bufr_data_array_get_stringValues(); + +private: + const char* bufrDataEncodedName_ = nullptr; + const char* numberOfSubsetsName_ = nullptr; + const char* expandedDescriptorsName_ = nullptr; + const char* flagsName_ = nullptr; + const char* unitsName_ = nullptr; + const char* elementsDescriptorsIndexName_ = nullptr; + const char* compressedDataName_ = nullptr; + bufr_descriptors_array* expanded_ = nullptr; + grib_accessor_expanded_descriptors_t* expandedAccessor_ = nullptr; + int* canBeMissing_ = nullptr; + long numberOfSubsets_ = 0; + long compressedData_ = 0; + grib_vdarray* numericValues_ = nullptr; + grib_vsarray* stringValues_ = nullptr; + grib_viarray* elementsDescriptorsIndex_ = nullptr; + int do_decode_ = 0; + int bitmapStartElementsDescriptorsIndex_ = 0; + int bitmapCurrentElementsDescriptorsIndex_ = 0; + int bitmapSize_ = 0; + int bitmapStart_ = 0; + int bitmapCurrent_ = 0; + grib_accessors_list* dataAccessors_ = nullptr; + int unpackMode_ = 0; + int bitsToEndData_ = 0; + grib_section* dataKeys_ = nullptr; + double* inputBitmap_ = nullptr; + int nInputBitmap_ = 0; + int iInputBitmap_ = 0; + long* inputReplications_ = nullptr; + int nInputReplications_ = 0; + int iInputReplications_ = 0; + long* inputExtendedReplications_ = nullptr; + int nInputExtendedReplications_ = 0; + int iInputExtendedReplications_ = 0; + long* inputShortReplications_ = nullptr; + int nInputShortReplications_ = 0; + int iInputShortReplications_ = 0; + grib_iarray* iss_list_ = nullptr; + grib_trie_with_rank* dataAccessorsTrie_ = nullptr; + grib_sarray* tempStrings_ = nullptr; + grib_vdarray* tempDoubleValues_ = nullptr; + int change_ref_value_operand_ = 0; + size_t refValListSize_ = 0; + long* refValList_ = nullptr; + long refValIndex_ = 0; + bufr_tableb_override* tableb_override_ = nullptr; + int set_to_missing_if_out_of_range_ = 0; + + void restart_bitmap(); + void cancel_bitmap(); + int is_bitmap_start_defined(); + size_t get_length(); + void tableB_override_store_ref_val(grib_context*, int, long); + int tableB_override_get_ref_val(int, long*); + void tableB_override_clear(grib_context*); + int tableB_override_set_key(grib_handle*); + int get_descriptors(); + int decode_string_array(grib_context*, unsigned char*, long*, bufr_descriptor*); + int encode_string_array(grib_context*, grib_buffer*, long*, bufr_descriptor*, grib_sarray*); + int encode_double_array(grib_context*, grib_buffer*, long*, bufr_descriptor*, grib_darray*); + int encode_double_value(grib_context*, grib_buffer*, long*, bufr_descriptor*, double); + char* decode_string_value(grib_context*, unsigned char*, long*, bufr_descriptor*, int*); + double decode_double_value(grib_context*, unsigned char*, long*, bufr_descriptor*, int, int*); + int encode_new_bitmap(grib_context*, grib_buffer*, long*, int); + int encode_overridden_reference_value(grib_context*, grib_buffer*, long*, bufr_descriptor*); + int build_bitmap(unsigned char*, long*, int, grib_iarray*, int); + int consume_bitmap(int); + int build_bitmap_new_data(unsigned char*, long*, int, grib_iarray*, int); + int get_next_bitmap_descriptor_index_new_bitmap(grib_iarray*, int); + int get_next_bitmap_descriptor_index(grib_iarray*, grib_darray*); + void push_zero_element(grib_darray*); + grib_accessor* create_attribute_variable(const char*, grib_section*, int, char*, double, long, unsigned long); + grib_accessor* create_accessor_from_descriptor(grib_accessor*, grib_section*, long, long, int, int, int, int); + grib_iarray* set_subset_list( grib_context*, long, long, long, const long*, size_t); + void print_bitmap_debug_info(grib_context*, bitmap_s*, grib_accessors_list*, int); + int create_keys(long, long, long); + void set_input_replications(grib_handle*); + void set_input_bitmap(grib_handle*); + int process_elements(int, long, long, long); + void self_clear(); + grib_darray* decode_double_array(grib_context* c, unsigned char* data, long* pos, bufr_descriptor* bd, int canBeMissing, int*); + + friend int check_end_data(grib_context*, bufr_descriptor*, grib_accessor_bufr_data_array_t*, int); + friend int decode_element(grib_context*, grib_accessor_bufr_data_array_t*, int, grib_buffer*, unsigned char*, long*, int, bufr_descriptor*, long, grib_darray*, grib_sarray*); + friend int decode_replication(grib_context*, grib_accessor_bufr_data_array_t*, int, grib_buffer*, unsigned char*, long*, int, long, grib_darray*, long*); + friend int encode_new_element(grib_context*, grib_accessor_bufr_data_array_t*, int, grib_buffer*, unsigned char*, long*, int, bufr_descriptor*, long, grib_darray*, grib_sarray*); + friend int encode_new_replication(grib_context*, grib_accessor_bufr_data_array_t*, int, grib_buffer*, unsigned char*, long*, int, long, grib_darray*, long*); + friend int encode_element(grib_context*, grib_accessor_bufr_data_array_t*, int, grib_buffer*, unsigned char*, long*, int, bufr_descriptor*, long, grib_darray*, grib_sarray*); + friend int encode_replication(grib_context*, grib_accessor_bufr_data_array_t*, int, grib_buffer*, unsigned char*, long*, int, long, grib_darray*, long*); }; - -grib_vsarray* accessor_bufr_data_array_get_stringValues(grib_accessor* a); -grib_accessors_list* accessor_bufr_data_array_get_dataAccessors(grib_accessor* a); -grib_trie_with_rank* accessor_bufr_data_array_get_dataAccessorsTrie(grib_accessor* a); -void accessor_bufr_data_array_set_unpackMode(grib_accessor* a, int unpackMode); - diff --git a/src/accessor/grib_accessor_class_bufr_data_element.cc b/src/accessor/grib_accessor_class_bufr_data_element.cc index 8d483b96d..938266fa0 100644 --- a/src/accessor/grib_accessor_class_bufr_data_element.cc +++ b/src/accessor/grib_accessor_class_bufr_data_element.cc @@ -10,15 +10,14 @@ #include "grib_accessor_class_bufr_data_element.h" -grib_accessor_class_bufr_data_element_t _grib_accessor_class_bufr_data_element{ "bufr_data_element" }; -grib_accessor_class* grib_accessor_class_bufr_data_element = &_grib_accessor_class_bufr_data_element; +grib_accessor_bufr_data_element_t _grib_accessor_bufr_data_element{}; +grib_accessor* grib_accessor_bufr_data_element = &_grib_accessor_bufr_data_element; -grib_accessor* grib_accessor_class_bufr_data_element_t::make_clone(grib_accessor* a, grib_section* s, int* err) +grib_accessor* grib_accessor_bufr_data_element_t::make_clone(grib_section* s, int* err) { grib_accessor* the_clone = NULL; grib_accessor* attribute = NULL; grib_accessor_bufr_data_element_t* elementAccessor; - grib_accessor_bufr_data_element_t* self; char* copied_name = NULL; int i; grib_action creator = { @@ -28,34 +27,33 @@ grib_accessor* grib_accessor_class_bufr_data_element_t::make_clone(grib_accessor creator.name_space = (char*)""; creator.set = 0; creator.name = (char*)"unknown"; - if (strcmp(a->cclass->name, "bufr_data_element")) { - grib_context_log(a->context, GRIB_LOG_FATAL, "wrong accessor type: '%s' should be '%s'", a->cclass->name, "bufr_data_element"); + if (strcmp(class_name_, "bufr_data_element")) { + grib_context_log(context_, GRIB_LOG_FATAL, "wrong accessor type: '%s' should be '%s'", class_name_, "bufr_data_element"); } *err = 0; - the_clone = grib_accessor_factory(s, &creator, 0, NULL); - copied_name = grib_context_strdup(a->context, a->name); - the_clone->name = copied_name; - elementAccessor = (grib_accessor_bufr_data_element_t*)the_clone; - self = (grib_accessor_bufr_data_element_t*)a; - the_clone->flags = a->flags; - the_clone->parent = NULL; - the_clone->h = s->h; - elementAccessor->index = self->index; - elementAccessor->type = self->type; - elementAccessor->numberOfSubsets = self->numberOfSubsets; - elementAccessor->subsetNumber = self->subsetNumber; - elementAccessor->compressedData = self->compressedData; - elementAccessor->descriptors = self->descriptors; - elementAccessor->numericValues = self->numericValues; - elementAccessor->stringValues = self->stringValues; - elementAccessor->elementsDescriptorsIndex = self->elementsDescriptorsIndex; - elementAccessor->cname = copied_name; /* ECC-765 */ + the_clone = grib_accessor_factory(s, &creator, 0, NULL); + copied_name = grib_context_strdup(context_, name_); + the_clone->name_ = copied_name; + elementAccessor = dynamic_cast(the_clone); + the_clone->flags_ = flags_; + the_clone->parent_ = NULL; + the_clone->h_ = s->h; + elementAccessor->index_ = index_; + elementAccessor->type_ = type_; + elementAccessor->numberOfSubsets_ = numberOfSubsets_; + elementAccessor->subsetNumber_ = subsetNumber_; + elementAccessor->compressedData_ = compressedData_; + elementAccessor->descriptors_ = descriptors_; + elementAccessor->numericValues_ = numericValues_; + elementAccessor->stringValues_ = stringValues_; + elementAccessor->elementsDescriptorsIndex_ = elementsDescriptorsIndex_; + elementAccessor->cname_ = copied_name; /* ECC-765 */ i = 0; - while (a->attributes[i]) { - attribute = a->attributes[i]->clone(s, err); - /* attribute->parent=a->parent; */ + while (attributes_[i]) { + attribute = attributes_[i]->clone(s, err); + /* attribute->parent=parent_ ; */ the_clone->add_attribute(attribute, 0); i++; } @@ -63,152 +61,102 @@ grib_accessor* grib_accessor_class_bufr_data_element_t::make_clone(grib_accessor return the_clone; } -void accessor_bufr_data_element_set_index(grib_accessor* a, long index) +void grib_accessor_bufr_data_element_t::init(const long len, grib_arguments* params) { - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - self->index = index; + grib_accessor_gen_t::init(len, params); + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_BUFR_DATA; + /* flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; */ + index_ = 0; + type_ = 0; + compressedData_ = 0; + subsetNumber_ = 0; + numberOfSubsets_ = 0; + descriptors_ = NULL; + numericValues_ = NULL; + stringValues_ = NULL; + elementsDescriptorsIndex_ = NULL; + cname_ = NULL; } -void accessor_bufr_data_element_set_type(grib_accessor* a, int type) +void grib_accessor_bufr_data_element_t::dump(grib_dumper* dumper) { - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - self->type = type; -} + const int ntype = get_native_type(); -void accessor_bufr_data_element_set_numberOfSubsets(grib_accessor* a, long numberOfSubsets) -{ - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - self->numberOfSubsets = numberOfSubsets; -} - -void accessor_bufr_data_element_set_subsetNumber(grib_accessor* a, long subsetNumber) -{ - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - self->subsetNumber = subsetNumber; -} - -void accessor_bufr_data_element_set_compressedData(grib_accessor* a, int compressedData) -{ - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - self->compressedData = compressedData; -} - -void accessor_bufr_data_element_set_descriptors(grib_accessor* a, bufr_descriptors_array* descriptors) -{ - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - self->descriptors = descriptors; -} - -void accessor_bufr_data_element_set_numericValues(grib_accessor* a, grib_vdarray* numericValues) -{ - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - self->numericValues = numericValues; -} - -void accessor_bufr_data_element_set_stringValues(grib_accessor* a, grib_vsarray* stringValues) -{ - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - self->stringValues = stringValues; -} - -void accessor_bufr_data_element_set_elementsDescriptorsIndex(grib_accessor* a, grib_viarray* elementsDescriptorsIndex) -{ - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - self->elementsDescriptorsIndex = elementsDescriptorsIndex; -} - -void grib_accessor_class_bufr_data_element_t::init(grib_accessor* a, const long len, grib_arguments* params) -{ - grib_accessor_class_gen_t::init(a, len, params); - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_BUFR_DATA; - /* a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; */ - self->cname = NULL; -} - -void grib_accessor_class_bufr_data_element_t::dump(grib_accessor* a, grib_dumper* dumper) -{ - int type = get_native_type(a); - - switch (type) { + switch (ntype) { case GRIB_TYPE_LONG: - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); break; case GRIB_TYPE_DOUBLE: - grib_dump_values(dumper, a); + grib_dump_values(dumper, this); break; case GRIB_TYPE_STRING: - grib_dump_string_array(dumper, a, NULL); + grib_dump_string_array(dumper, this, NULL); break; } } -int grib_accessor_class_bufr_data_element_t::unpack_string_array(grib_accessor* a, char** val, size_t* len) +int grib_accessor_bufr_data_element_t::unpack_string_array(char** val, size_t* len) { - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - int ret = 0, idx = 0; size_t count = 0, i = 0; - grib_context* c = a->context; + grib_context* c = context_; - if (self->compressedData) { - DEBUG_ASSERT(self->index < self->numericValues->n); - idx = ((int)self->numericValues->v[self->index]->v[0] / 1000 - 1) / self->numberOfSubsets; - DEBUG_ASSERT(idx < self->stringValues->n); - count = grib_sarray_used_size(self->stringValues->v[idx]); + if (compressedData_) { + DEBUG_ASSERT(index_ < numericValues_->n); + idx = ((int)numericValues_->v[index_]->v[0] / 1000 - 1) / numberOfSubsets_; + DEBUG_ASSERT(idx < stringValues_->n); + count = grib_sarray_used_size(stringValues_->v[idx]); for (i = 0; i < count; i++) { - val[i] = grib_context_strdup(c, self->stringValues->v[idx]->v[i]); + val[i] = grib_context_strdup(c, stringValues_->v[idx]->v[i]); } *len = count; } else { - DEBUG_ASSERT(self->subsetNumber < self->numericValues->n); - DEBUG_ASSERT(self->index < self->numericValues->v[self->subsetNumber]->n); - idx = (int)self->numericValues->v[self->subsetNumber]->v[self->index] / 1000 - 1; - val[0] = grib_context_strdup(c, self->stringValues->v[idx]->v[0]); + DEBUG_ASSERT(subsetNumber_ < numericValues_->n); + DEBUG_ASSERT(index_ < numericValues_->v[subsetNumber_]->n); + idx = (int)numericValues_->v[subsetNumber_]->v[index_] / 1000 - 1; + val[0] = grib_context_strdup(c, stringValues_->v[idx]->v[0]); *len = 1; } return ret; } -int grib_accessor_class_bufr_data_element_t::pack_string_array(grib_accessor* a, const char** v, size_t* len) +int grib_accessor_bufr_data_element_t::pack_string_array(const char** v, size_t* len) { - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - int ret = GRIB_SUCCESS, idx = 0; size_t i = 0; char* s = NULL; - grib_context* c = a->context; + grib_context* c = context_; - if (self->compressedData) { - idx = ((int)self->numericValues->v[self->index]->v[0] / 1000 - 1) / self->numberOfSubsets; - if (*len != 1 && *len != (size_t)self->numberOfSubsets) { + if (compressedData_) { + idx = ((int)numericValues_->v[index_]->v[0] / 1000 - 1) / numberOfSubsets_; + if (*len != 1 && *len != (size_t)numberOfSubsets_) { grib_context_log(c, GRIB_LOG_ERROR, "Number of values mismatch for '%s': %ld strings provided but expected %ld (=number of subsets)", - self->descriptors->v[self->elementsDescriptorsIndex->v[0]->v[idx]]->shortName, *len, self->numberOfSubsets); + descriptors_->v[elementsDescriptorsIndex_->v[0]->v[idx]]->shortName, *len, numberOfSubsets_); return GRIB_ARRAY_TOO_SMALL; } - grib_sarray_delete_content(c, self->stringValues->v[idx]); /* ECC-1172 */ - grib_sarray_delete(c, self->stringValues->v[idx]); - self->stringValues->v[idx] = grib_sarray_new(c, *len, 1); + grib_sarray_delete_content(stringValues_->v[idx]); /* ECC-1172 */ + grib_sarray_delete(stringValues_->v[idx]); + stringValues_->v[idx] = grib_sarray_new(*len, 1); for (i = 0; i < *len; i++) { s = grib_context_strdup(c, v[i]); - grib_sarray_push(c, self->stringValues->v[idx], s); + grib_sarray_push(stringValues_->v[idx], s); } } else { // ECC-1623 - if (*len != (size_t)self->numberOfSubsets) { + if (*len != (size_t)numberOfSubsets_) { grib_context_log(c, GRIB_LOG_ERROR, "Number of values mismatch for '%s': %zu strings provided but expected %ld (=number of subsets)", - a->name, *len, self->numberOfSubsets); + name_, *len, numberOfSubsets_); return GRIB_WRONG_ARRAY_SIZE; } for (i = 0; i < *len; i++) { - // idx = (int)self->numericValues->v[self->subsetNumber]->v[self->index] / 1000 - 1; - idx = (int)self->numericValues->v[i]->v[self->index] / 1000 - 1; - self->stringValues->v[idx]->v[0] = strdup(v[i]); + // idx = (int)numericValues->v[subsetNumber]->v[index_ ] / 1000 - 1; + idx = (int)numericValues_->v[i]->v[index_] / 1000 - 1; + stringValues_->v[idx]->v[0] = strdup(v[i]); } *len = 1; } @@ -216,20 +164,19 @@ int grib_accessor_class_bufr_data_element_t::pack_string_array(grib_accessor* a, return ret; } -int grib_accessor_class_bufr_data_element_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_bufr_data_element_t::unpack_string(char* val, size_t* len) { - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - char* str = NULL; - char* p = 0; - size_t slen = 0; - double dval = 0; - size_t dlen = 1; + char* str = NULL; + char* p = 0; + size_t slen = 0; + double dval = 0; + size_t dlen = 1; int idx = 0, err = 0; - grib_context* c = a->context; + grib_context* c = context_; - if (self->type != BUFR_DESCRIPTOR_TYPE_STRING) { + if (type_ != BUFR_DESCRIPTOR_TYPE_STRING) { char sval[32] = {0,}; - err = unpack_double(a, &dval, &dlen); + err = unpack_double(&dval, &dlen); if (err) return err; snprintf(sval, sizeof(sval), "%g", dval); slen = strlen(sval); @@ -239,20 +186,20 @@ int grib_accessor_class_bufr_data_element_t::unpack_string(grib_accessor* a, cha return GRIB_SUCCESS; } - if (self->compressedData) { - DEBUG_ASSERT(self->index < self->numericValues->n); - idx = ((int)self->numericValues->v[self->index]->v[0] / 1000 - 1) / self->numberOfSubsets; + if (compressedData_) { + DEBUG_ASSERT(index_ < numericValues_->n); + idx = ((int)numericValues_->v[index_]->v[0] / 1000 - 1) / numberOfSubsets_; if (idx < 0) return GRIB_INTERNAL_ERROR; - str = grib_context_strdup(c, self->stringValues->v[idx]->v[0]); + str = grib_context_strdup(c, stringValues_->v[idx]->v[0]); } else { - DEBUG_ASSERT(self->subsetNumber < self->numericValues->n); - idx = (int)self->numericValues->v[self->subsetNumber]->v[self->index] / 1000 - 1; + DEBUG_ASSERT(subsetNumber_ < numericValues_->n); + idx = (int)numericValues_->v[subsetNumber_]->v[index_] / 1000 - 1; if (idx < 0) return GRIB_INTERNAL_ERROR; - DEBUG_ASSERT(idx < self->stringValues->n); - str = grib_context_strdup(c, self->stringValues->v[idx]->v[0]); + DEBUG_ASSERT(idx < stringValues_->n); + str = grib_context_strdup(c, stringValues_->v[idx]->v[0]); } if (str == NULL || strlen(str) == 0) { @@ -285,188 +232,180 @@ int grib_accessor_class_bufr_data_element_t::unpack_string(grib_accessor* a, cha return GRIB_SUCCESS; } -int grib_accessor_class_bufr_data_element_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_bufr_data_element_t::pack_string(const char* val, size_t* len) { - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - int ret = GRIB_SUCCESS, idx = 0; char* s = NULL; - grib_context* c = a->context; + grib_context* c = context_; - if (self->compressedData) { - idx = ((int)self->numericValues->v[self->index]->v[0] / 1000 - 1) / self->numberOfSubsets; + if (compressedData_) { + idx = ((int)numericValues_->v[index_]->v[0] / 1000 - 1) / numberOfSubsets_; } else { - idx = (int)self->numericValues->v[self->subsetNumber]->v[self->index] / 1000 - 1; + idx = (int)numericValues_->v[subsetNumber_]->v[index_] / 1000 - 1; } - grib_sarray_delete_content(c, self->stringValues->v[idx]); /* ECC-1172 */ - grib_sarray_delete(c, self->stringValues->v[idx]); - self->stringValues->v[idx] = grib_sarray_new(c, 1, 1); - s = grib_context_strdup(c, val); - grib_sarray_push(c, self->stringValues->v[idx], s); + grib_sarray_delete_content(stringValues_->v[idx]); /* ECC-1172 */ + grib_sarray_delete(stringValues_->v[idx]); + stringValues_->v[idx] = grib_sarray_new(1, 1); + s = grib_context_strdup(c, val); + grib_sarray_push(stringValues_->v[idx], s); return ret; } -int grib_accessor_class_bufr_data_element_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_bufr_data_element_t::unpack_long(long* val, size_t* len) { - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - int ret = GRIB_SUCCESS; + int ret = GRIB_SUCCESS; long count = 0, i = 0; - value_count(a, &count); + value_count(&count); if (*len < (size_t)count) return GRIB_ARRAY_TOO_SMALL; - if (self->compressedData) { + if (compressedData_) { for (i = 0; i < count; i++) { - DEBUG_ASSERT(self->index < self->numericValues->n); - DEBUG_ASSERT(i < self->numericValues->v[self->index]->n); - val[i] = self->numericValues->v[self->index]->v[i] == GRIB_MISSING_DOUBLE ? GRIB_MISSING_LONG : (long)self->numericValues->v[self->index]->v[i]; + DEBUG_ASSERT(index_ < numericValues_->n); + DEBUG_ASSERT(i < numericValues_->v[index_]->n); + val[i] = numericValues_->v[index_]->v[i] == GRIB_MISSING_DOUBLE ? GRIB_MISSING_LONG : (long)numericValues_->v[index_]->v[i]; } *len = count; } else { - DEBUG_ASSERT(self->subsetNumber < self->numericValues->n); - DEBUG_ASSERT(self->index < self->numericValues->v[self->subsetNumber]->n); - val[0] = self->numericValues->v[self->subsetNumber]->v[self->index] == GRIB_MISSING_DOUBLE ? GRIB_MISSING_LONG : (long)self->numericValues->v[self->subsetNumber]->v[self->index]; + DEBUG_ASSERT(subsetNumber_ < numericValues_->n); + DEBUG_ASSERT(index_ < numericValues_->v[subsetNumber_]->n); + val[0] = numericValues_->v[subsetNumber_]->v[index_] == GRIB_MISSING_DOUBLE ? GRIB_MISSING_LONG : (long)numericValues_->v[subsetNumber_]->v[index_]; *len = 1; } return ret; } -int grib_accessor_class_bufr_data_element_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_bufr_data_element_t::unpack_double(double* val, size_t* len) { - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - int ret = GRIB_SUCCESS; + int ret = GRIB_SUCCESS; long count = 0, i = 0; - value_count(a, &count); + value_count(&count); if (*len < (size_t)count) return GRIB_ARRAY_TOO_SMALL; - if (self->compressedData) { + if (compressedData_) { for (i = 0; i < count; i++) { - DEBUG_ASSERT(self->index < self->numericValues->n); - DEBUG_ASSERT(i < self->numericValues->v[self->index]->n); - val[i] = self->numericValues->v[self->index]->v[i]; + DEBUG_ASSERT(index_ < numericValues_->n); + DEBUG_ASSERT(i < numericValues_->v[index_]->n); + val[i] = numericValues_->v[index_]->v[i]; } *len = count; } else { - DEBUG_ASSERT(self->subsetNumber < self->numericValues->n); - DEBUG_ASSERT(self->index < self->numericValues->v[self->subsetNumber]->n); - val[0] = self->numericValues->v[self->subsetNumber]->v[self->index]; + DEBUG_ASSERT(subsetNumber_ < numericValues_->n); + DEBUG_ASSERT(index_ < numericValues_->v[subsetNumber_]->n); + val[0] = numericValues_->v[subsetNumber_]->v[index_]; *len = 1; } return ret; } -int grib_accessor_class_bufr_data_element_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_bufr_data_element_t::pack_double(const double* val, size_t* len) { - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - int ret = GRIB_SUCCESS; + int ret = GRIB_SUCCESS; size_t count = 1, i = 0; - grib_context* c = a->context; + grib_context* c = context_; - if (self->compressedData) { + if (compressedData_) { count = *len; - if (count != 1 && count != (size_t)self->numberOfSubsets) { + if (count != 1 && count != (size_t)numberOfSubsets_) { grib_context_log(c, GRIB_LOG_ERROR, "Number of values mismatch for '%s': %ld doubles provided but expected %ld (=number of subsets)", - self->descriptors->v[self->elementsDescriptorsIndex->v[0]->v[self->index]]->shortName, count, self->numberOfSubsets); + descriptors_->v[elementsDescriptorsIndex_->v[0]->v[index_]]->shortName, count, numberOfSubsets_); return GRIB_ARRAY_TOO_SMALL; } - grib_darray_delete(a->context, self->numericValues->v[self->index]); - self->numericValues->v[self->index] = grib_darray_new(a->context, count, 1); + grib_darray_delete(numericValues_->v[index_]); + numericValues_->v[index_] = grib_darray_new(count, 1); for (i = 0; i < count; i++) - grib_darray_push(a->context, self->numericValues->v[self->index], val[i]); + grib_darray_push(numericValues_->v[index_], val[i]); *len = count; } else { - self->numericValues->v[self->subsetNumber]->v[self->index] = val[0]; - *len = 1; + numericValues_->v[subsetNumber_]->v[index_] = val[0]; + *len = 1; } return ret; } -int grib_accessor_class_bufr_data_element_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_bufr_data_element_t::pack_long(const long* val, size_t* len) { - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - int ret = 0; + int ret = 0; size_t count = 1, i = 0; - grib_context* c = a->context; + grib_context* c = context_; - if (self->compressedData) { + if (compressedData_) { count = *len; - if (count != 1 && count != (size_t)self->numberOfSubsets) { + if (count != 1 && count != (size_t)numberOfSubsets_) { grib_context_log(c, GRIB_LOG_ERROR, "Number of values mismatch for '%s': %zu integers provided but expected %ld (=number of subsets)", - self->descriptors->v[self->elementsDescriptorsIndex->v[0]->v[self->index]]->shortName, count, self->numberOfSubsets); + descriptors_->v[elementsDescriptorsIndex_->v[0]->v[index_]]->shortName, count, numberOfSubsets_); return GRIB_ARRAY_TOO_SMALL; } - grib_darray_delete(a->context, self->numericValues->v[self->index]); - self->numericValues->v[self->index] = grib_darray_new(a->context, count, 1); + grib_darray_delete(numericValues_->v[index_]); + numericValues_->v[index_] = grib_darray_new(count, 1); for (i = 0; i < count; i++) { - grib_darray_push(a->context, self->numericValues->v[self->index], val[i] == GRIB_MISSING_LONG ? GRIB_MISSING_DOUBLE : val[i]); + grib_darray_push(numericValues_->v[index_], val[i] == GRIB_MISSING_LONG ? GRIB_MISSING_DOUBLE : val[i]); } *len = count; } else { - self->numericValues->v[self->subsetNumber]->v[self->index] = val[0] == GRIB_MISSING_LONG ? GRIB_MISSING_DOUBLE : val[0]; - *len = 1; + numericValues_->v[subsetNumber_]->v[index_] = val[0] == GRIB_MISSING_LONG ? GRIB_MISSING_DOUBLE : val[0]; + *len = 1; } return ret; } -int grib_accessor_class_bufr_data_element_t::value_count(grib_accessor* a, long* count) +int grib_accessor_bufr_data_element_t::value_count(long* count) { - int ret = 0, type = 0, idx = 0; - size_t size = 0; - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; + int ret = 0, idx = 0; + size_t size = 0; - if (!self->compressedData) { + if (!compressedData_) { *count = 1; return 0; } - type = get_native_type(a); + const int ntype = get_native_type(); - if (type == GRIB_TYPE_STRING) { - DEBUG_ASSERT(self->index < self->numericValues->n); - idx = ((int)self->numericValues->v[self->index]->v[0] / 1000 - 1) / self->numberOfSubsets; - size = grib_sarray_used_size(self->stringValues->v[idx]); + if (ntype == GRIB_TYPE_STRING) { + DEBUG_ASSERT(index_ < numericValues_->n); + idx = ((int)numericValues_->v[index_]->v[0] / 1000 - 1) / numberOfSubsets_; + size = grib_sarray_used_size(stringValues_->v[idx]); } else { - DEBUG_ASSERT(self->index < self->numericValues->n); - size = grib_darray_used_size(self->numericValues->v[self->index]); + DEBUG_ASSERT(index_ < numericValues_->n); + size = grib_darray_used_size(numericValues_->v[index_]); } - *count = size == 1 ? 1 : self->numberOfSubsets; + *count = size == 1 ? 1 : numberOfSubsets_; return ret; } -int grib_accessor_class_bufr_data_element_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_bufr_data_element_t::unpack_double_element(size_t idx, double* val) { /* ECC-415 */ - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - int ret = GRIB_SUCCESS; - long count = 0; + int ret = GRIB_SUCCESS; + long count = 0; - value_count(a, &count); + value_count(&count); if (idx >= (size_t)count) { return GRIB_INTERNAL_ERROR; } - if (self->compressedData) { - *val = self->numericValues->v[self->index]->v[idx]; + if (compressedData_) { + *val = numericValues_->v[index_]->v[idx]; } else { ret = GRIB_NOT_IMPLEMENTED; @@ -474,12 +413,10 @@ int grib_accessor_class_bufr_data_element_t::unpack_double_element(grib_accessor return ret; } -int grib_accessor_class_bufr_data_element_t::get_native_type(grib_accessor* a) +long grib_accessor_bufr_data_element_t::get_native_type() { - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - int ret = GRIB_TYPE_DOUBLE; - DEBUG_ASSERT(self); - switch (self->type) { + int ret = GRIB_TYPE_DOUBLE; + switch (type_) { case BUFR_DESCRIPTOR_TYPE_STRING: ret = GRIB_TYPE_STRING; break; @@ -500,50 +437,49 @@ int grib_accessor_class_bufr_data_element_t::get_native_type(grib_accessor* a) return ret; } -void grib_accessor_class_bufr_data_element_t::destroy(grib_context* ct, grib_accessor* a) +void grib_accessor_bufr_data_element_t::destroy(grib_context* ct) { - grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a; - int i = 0; - if (self->cname) - grib_context_free(ct, self->cname); /* ECC-765 */ - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { - /*grib_context_log(ct,GRIB_LOG_DEBUG,"deleting attribute %s->%s",a->name,a->attributes[i]->name);*/ - /*printf("bufr_data_element destroy %s %p\n", a->attributes[i]->name, (void*)a->attributes[i]);*/ - a->attributes[i]->destroy(ct); - a->attributes[i] = NULL; + int i = 0; + if (cname_) + grib_context_free(ct, cname_); /* ECC-765 */ + while (i < MAX_ACCESSOR_ATTRIBUTES && attributes_[i]) { + /*grib_context_log(ct,GRIB_LOG_DEBUG,"deleting attribute %s->%s",a->name,attributes_ [i]->name);*/ + /*printf("bufr_data_element destroy %s %p\n", a->attributes_[i]->name, (void*)attributes_ [i]);*/ + attributes_[i]->destroy(ct); + attributes_[i] = NULL; i++; } - grib_accessor_class_gen_t::destroy(ct, a); + grib_accessor_gen_t::destroy(ct); } #define MAX_STRING_SIZE 4096 /* Return 1 if BUFR element(s) is/are missing, 0 otherwise. In case of decoding errors, also return 0 */ -int grib_accessor_class_bufr_data_element_t::is_missing(grib_accessor* a) +int grib_accessor_bufr_data_element_t::is_missing() { - const int ktype = get_native_type(a); + const int ktype = get_native_type(); int err = 0, result = 1; /* default: assume all are missing */ long count = 0; size_t i = 0, size = 1, size2 = 0; - grib_context* c = a->context; + grib_context* c = context_; if (ktype == GRIB_TYPE_LONG) { long* values = NULL; long value = 0; - value_count(a, &count); + value_count(&count); size = size2 = count; if (size > 1) { values = (long*)grib_context_malloc_clear(c, sizeof(long) * size); - err = a->unpack_long(values, &size2); + err = unpack_long(values, &size2); } else { - err = a->unpack_long(&value, &size2); + err = unpack_long(&value, &size2); } if (err) return 0; /* TODO: no way of propagating the error up */ Assert(size2 == size); if (size > 1) { for (i = 0; i < size; i++) { - if (!grib_is_missing_long(a, values[i])) { + if (!grib_is_missing_long(this, values[i])) { result = 0; /* at least one not missing */ break; } @@ -551,27 +487,27 @@ int grib_accessor_class_bufr_data_element_t::is_missing(grib_accessor* a) grib_context_free(c, values); } else { - result = grib_is_missing_long(a, value); + result = grib_is_missing_long(this, value); } } else if (ktype == GRIB_TYPE_DOUBLE) { double value = 0; double* values = NULL; - value_count(a, &count); + value_count(&count); size = size2 = count; if (size > 1) { values = (double*)grib_context_malloc_clear(c, sizeof(double) * size); - err = a->unpack_double(values, &size2); + err = unpack_double(values, &size2); } else { - err = a->unpack_double(&value, &size2); + err = unpack_double(&value, &size2); } if (err) return 0; /* TODO: no way of propagating the error up */ Assert(size2 == size); if (size > 1) { for (i = 0; i < size; ++i) { - if (!grib_is_missing_double(a, values[i])) { + if (!grib_is_missing_double(this, values[i])) { result = 0; break; } @@ -579,19 +515,19 @@ int grib_accessor_class_bufr_data_element_t::is_missing(grib_accessor* a) grib_context_free(c, values); } else { - result = grib_is_missing_double(a, value); + result = grib_is_missing_double(this, value); } } else if (ktype == GRIB_TYPE_STRING) { char** values = NULL; - value_count(a, &count); + value_count(&count); size = count; if (size > 1) { - values = (char**)grib_context_malloc_clear(a->context, size * sizeof(char*)); - err = a->unpack_string_array(values, &size); + values = (char**)grib_context_malloc_clear(context_, size * sizeof(char*)); + err = unpack_string_array(values, &size); if (err) return 0; /* TODO: no way of propagating the error up */ for (i = 0; i < size; i++) { - if (!grib_is_missing_string(a, (unsigned char*)values[i], size)) { + if (!grib_is_missing_string(this, (unsigned char*)values[i], size)) { result = 0; break; } @@ -603,9 +539,9 @@ int grib_accessor_class_bufr_data_element_t::is_missing(grib_accessor* a) else { char value[MAX_STRING_SIZE] = {0,}; /* See ECC-710 */ size = MAX_STRING_SIZE; - err = a->unpack_string(value, &size); + err = unpack_string(value, &size); if (err) return 0; /* TODO: no way of propagating the error up */ - result = grib_is_missing_string(a, (unsigned char*)value, size); + result = grib_is_missing_string(this, (unsigned char*)value, size); } } else { @@ -614,26 +550,26 @@ int grib_accessor_class_bufr_data_element_t::is_missing(grib_accessor* a) return result; } -int grib_accessor_class_bufr_data_element_t::pack_missing(grib_accessor* a) +int grib_accessor_bufr_data_element_t::pack_missing() { int ktype = GRIB_TYPE_UNDEFINED; int err = 0; size_t size = 1; - const int can_be_missing = (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING); + const int can_be_missing = (flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING); if (!can_be_missing) return GRIB_VALUE_CANNOT_BE_MISSING; - ktype = get_native_type(a); + ktype = get_native_type(); if (ktype == GRIB_TYPE_LONG) { long missing = GRIB_MISSING_LONG; - err = pack_long(a, &missing, &size); + err = pack_long(&missing, &size); } else if (ktype == GRIB_TYPE_DOUBLE) { double missing = GRIB_MISSING_DOUBLE; - err = pack_double(a, &missing, &size); + err = pack_double(&missing, &size); } else if (ktype == GRIB_TYPE_STRING) { - err = pack_string(a, "", &size); + err = pack_string("", &size); } else { err = GRIB_INVALID_TYPE; diff --git a/src/accessor/grib_accessor_class_bufr_data_element.h b/src/accessor/grib_accessor_class_bufr_data_element.h index bbed1785b..c2bb80da9 100644 --- a/src/accessor/grib_accessor_class_bufr_data_element.h +++ b/src/accessor/grib_accessor_class_bufr_data_element.h @@ -16,39 +16,46 @@ class grib_accessor_bufr_data_element_t : public grib_accessor_gen_t { public: - /* Members defined in bufr_data_element */ - long index; - int type; - long compressedData; - long subsetNumber; - long numberOfSubsets; - bufr_descriptors_array* descriptors; - grib_vdarray* numericValues; - grib_vsarray* stringValues; - grib_viarray* elementsDescriptorsIndex; - char* cname; -}; - -class grib_accessor_class_bufr_data_element_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_bufr_data_element_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_bufr_data_element_t() : + grib_accessor_gen_t() { class_name_ = "bufr_data_element"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bufr_data_element_t{}; } - int get_native_type(grib_accessor*) override; - int pack_missing(grib_accessor*) override; - int is_missing(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int pack_string_array(grib_accessor*, const char**, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int unpack_string_array(grib_accessor*, char**, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - grib_accessor* make_clone(grib_accessor*, grib_section*, int*) override; + long get_native_type() override; + int pack_missing() override; + int is_missing() override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int pack_string_array(const char**, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + int unpack_string_array(char**, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + int unpack_double_element(size_t i, double* val) override; + grib_accessor* make_clone(grib_section*, int*) override; + + void index(long index) { index_ = index; } + void type(int type) { type_ = type; } + void numberOfSubsets(long numberOfSubsets) { numberOfSubsets_ = numberOfSubsets; } + void subsetNumber(long subsetNumber) { subsetNumber_ = subsetNumber; } + void compressedData(int compressedData) { compressedData_ = compressedData; } + void descriptors(bufr_descriptors_array* descriptors) { descriptors_ = descriptors; } + void numericValues(grib_vdarray* numericValues) { numericValues_ = numericValues; } + void stringValues(grib_vsarray* stringValues) { stringValues_ = stringValues; } + void elementsDescriptorsIndex(grib_viarray* elementsDescriptorsIndex) { elementsDescriptorsIndex_ = elementsDescriptorsIndex; } + +private: + long index_ = 0; + int type_ = 0; + long compressedData_ = 0; + long subsetNumber_ = 0; + long numberOfSubsets_ = 0; + bufr_descriptors_array* descriptors_ = nullptr; + grib_vdarray* numericValues_ = nullptr; + grib_vsarray* stringValues_ = nullptr; + grib_viarray* elementsDescriptorsIndex_ = nullptr; + char* cname_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_bufr_elements_table.cc b/src/accessor/grib_accessor_class_bufr_elements_table.cc index a4db0249b..73d631303 100644 --- a/src/accessor/grib_accessor_class_bufr_elements_table.cc +++ b/src/accessor/grib_accessor_class_bufr_elements_table.cc @@ -29,7 +29,7 @@ static omp_nest_lock_t mutex1; static void init_mutex() { - GRIB_OMP_CRITICAL(lock_grib_accessor_class_bufr_elements_table_c) + GRIB_OMP_CRITICAL(lock_grib_accessor_bufr_elements_table_c) { if (once == 0) { omp_init_nest_lock(&mutex1); @@ -39,70 +39,65 @@ static void init_mutex() } #endif +grib_accessor_bufr_elements_table_t _grib_accessor_bufr_elements_table{}; +grib_accessor* grib_accessor_bufr_elements_table = &_grib_accessor_bufr_elements_table; -grib_accessor_class_bufr_elements_table_t _grib_accessor_class_bufr_elements_table{ "bufr_elements_table" }; -grib_accessor_class* grib_accessor_class_bufr_elements_table = &_grib_accessor_class_bufr_elements_table; - - -void grib_accessor_class_bufr_elements_table_t::init(grib_accessor* a, const long len, grib_arguments* params) +void grib_accessor_bufr_elements_table_t::init(const long len, grib_arguments* params) { - grib_accessor_class_gen_t::init(a, len, params); - int n = 0; - grib_accessor_bufr_elements_table_t* self = (grib_accessor_bufr_elements_table_t*)a; + grib_accessor_gen_t::init(len, params); + int n = 0; - self->dictionary = grib_arguments_get_string(grib_handle_of_accessor(a), params, n++); - self->masterDir = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - self->localDir = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); + dictionary_ = grib_arguments_get_string(grib_handle_of_accessor(this), params, n++); + masterDir_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + localDir_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -static grib_trie* load_bufr_elements_table(grib_accessor* a, int* err) +grib_trie* grib_accessor_bufr_elements_table_t::load_bufr_elements_table(int* err) { - grib_accessor_bufr_elements_table_t* self = (grib_accessor_bufr_elements_table_t*)a; - - char* filename = NULL; + char* filename = NULL; char line[1024] = {0,}; char masterDir[1024] = {0,}; char localDir[1024] = {0,}; char dictName[1024] = {0,}; - char masterRecomposed[1024] = {0,}; //e.g. bufr/tables/0/wmo/36/element.table - char localRecomposed[1024] = {0,}; //e.g. bufr/tables/0/local/0/98/0/element.table + char masterRecomposed[1024] = {0,}; // e.g. bufr/tables/0/wmo/36/element.table + char localRecomposed[1024] = {0,}; // e.g. bufr/tables/0/local/0/98/0/element.table char* localFilename = 0; char** list = 0; char** cached_list = 0; size_t len = 1024; grib_trie* dictionary = NULL; FILE* f = NULL; - grib_handle* h = grib_handle_of_accessor(a); - grib_context* c = a->context; + grib_handle* h = grib_handle_of_accessor(this); + grib_context* c = context_; *err = GRIB_SUCCESS; len = 1024; - if (self->masterDir != NULL) - grib_get_string(h, self->masterDir, masterDir, &len); + if (masterDir_ != NULL) + grib_get_string(h, masterDir_, masterDir, &len); len = 1024; - if (self->localDir != NULL) - grib_get_string(h, self->localDir, localDir, &len); + if (localDir_ != NULL) + grib_get_string(h, localDir_, localDir, &len); GRIB_MUTEX_INIT_ONCE(&once, &init_mutex); GRIB_MUTEX_LOCK(&mutex1); if (*masterDir != 0) { char name[4096] = {0,}; - snprintf(name, 4096, "%s/%s", masterDir, self->dictionary); + snprintf(name, 4096, "%s/%s", masterDir, dictionary_); grib_recompose_name(h, NULL, name, masterRecomposed, 0); filename = grib_context_full_defs_path(c, masterRecomposed); } else { - filename = grib_context_full_defs_path(c, self->dictionary); + filename = grib_context_full_defs_path(c, dictionary_); } if (*localDir != 0) { char localName[2048] = {0,}; - snprintf(localName, 2048, "%s/%s", localDir, self->dictionary); + snprintf(localName, 2048, "%s/%s", localDir, dictionary_); grib_recompose_name(h, NULL, localName, localRecomposed, 0); localFilename = grib_context_full_defs_path(c, localRecomposed); snprintf(dictName, 1024, "%s:%s", localFilename, filename); @@ -112,7 +107,7 @@ static grib_trie* load_bufr_elements_table(grib_accessor* a, int* err) } if (!filename) { - grib_context_log(c, GRIB_LOG_ERROR, "Unable to find definition file %s", self->dictionary); + grib_context_log(c, GRIB_LOG_ERROR, "Unable to find definition file %s", dictionary_); if (strlen(masterRecomposed) > 0) grib_context_log(c, GRIB_LOG_DEBUG, "master path=%s", masterRecomposed); if (strlen(localRecomposed) > 0) grib_context_log(c, GRIB_LOG_DEBUG, "local path=%s", localRecomposed); *err = GRIB_FILE_NOT_FOUND; @@ -122,11 +117,11 @@ static grib_trie* load_bufr_elements_table(grib_accessor* a, int* err) dictionary = (grib_trie*)grib_trie_get(c->lists, dictName); if (dictionary) { - /*grib_context_log(c,GRIB_LOG_DEBUG,"using dictionary %s from cache",self->dictionary);*/ + /*grib_context_log(c,GRIB_LOG_DEBUG,"using dictionary %s from cache",a->dictionary_ );*/ goto the_end; } else { - grib_context_log(c, GRIB_LOG_DEBUG, "using dictionary %s from file %s", self->dictionary, filename); + grib_context_log(c, GRIB_LOG_DEBUG, "using dictionary %s from file %s", dictionary_, filename); } f = codes_fopen(filename, "r"); @@ -217,14 +212,14 @@ static long atol_fast(const char* input) return atol(input); } -static int bufr_get_from_table(grib_accessor* a, bufr_descriptor* v) +int grib_accessor_bufr_elements_table_t::bufr_get_from_table(bufr_descriptor* v) { int ret = 0; char** list = 0; char code[7] = { 0 }; const size_t codeLen = sizeof(code); - grib_trie* table = load_bufr_elements_table(a, &ret); + grib_trie* table = load_bufr_elements_table(&ret); if (ret) return ret; @@ -276,13 +271,14 @@ int bufr_descriptor_is_marker(bufr_descriptor* d) bufr_descriptor* accessor_bufr_elements_table_get_descriptor(grib_accessor* a, int code, int* err) { + grib_accessor_bufr_elements_table_t* self = (grib_accessor_bufr_elements_table_t*)a; grib_context* c; bufr_descriptor* v = NULL; if (!a) return NULL; - c = a->context; + c = a->context_; DEBUG_ASSERT(c); v = (bufr_descriptor*)grib_context_malloc_clear(c, sizeof(bufr_descriptor)); if (!v) { @@ -298,7 +294,7 @@ bufr_descriptor* accessor_bufr_elements_table_get_descriptor(grib_accessor* a, i switch (v->F) { case 0: - *err = bufr_get_from_table(a, v); + *err = self->bufr_get_from_table(v); break; case 1: v->type = BUFR_DESCRIPTOR_TYPE_REPLICATION; @@ -314,28 +310,28 @@ bufr_descriptor* accessor_bufr_elements_table_get_descriptor(grib_accessor* a, i return v; } -int grib_accessor_class_bufr_elements_table_t::unpack_string(grib_accessor* a, char* buffer, size_t* len) +int grib_accessor_bufr_elements_table_t::unpack_string(char* buffer, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_bufr_elements_table_t::value_count(grib_accessor* a, long* count) +int grib_accessor_bufr_elements_table_t::value_count(long* count) { *count = 1; return 0; } -int grib_accessor_class_bufr_elements_table_t::get_native_type(grib_accessor* a) +long grib_accessor_bufr_elements_table_t::get_native_type() { return GRIB_TYPE_STRING; } -int grib_accessor_class_bufr_elements_table_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_bufr_elements_table_t::unpack_long(long* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_bufr_elements_table_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_bufr_elements_table_t::unpack_double(double* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } diff --git a/src/accessor/grib_accessor_class_bufr_elements_table.h b/src/accessor/grib_accessor_class_bufr_elements_table.h index 4f133c9e4..ba1ed3389 100644 --- a/src/accessor/grib_accessor_class_bufr_elements_table.h +++ b/src/accessor/grib_accessor_class_bufr_elements_table.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,21 +15,26 @@ class grib_accessor_bufr_elements_table_t : public grib_accessor_gen_t { public: - /* Members defined in bufr_elements_table */ - const char* dictionary; - const char* masterDir; - const char* localDir; + grib_accessor_bufr_elements_table_t() : + grib_accessor_gen_t() { class_name_ = "bufr_elements_table"; } + grib_accessor* create_empty_accessor() override { return new grib_accessor_bufr_elements_table_t{}; } + long get_native_type() override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* dictionary_ = nullptr; + const char* masterDir_ = nullptr; + const char* localDir_ = nullptr; + + grib_trie* load_bufr_elements_table(int* err); + int bufr_get_from_table(bufr_descriptor* v); + + friend bufr_descriptor* accessor_bufr_elements_table_get_descriptor(grib_accessor* a, int code, int* err); }; -class grib_accessor_class_bufr_elements_table_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_bufr_elements_table_t(const char* name) : grib_accessor_class_gen_t(name) {} - grib_accessor* create_empty_accessor() override { return new grib_accessor_bufr_elements_table_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; -}; +int bufr_descriptor_is_marker(bufr_descriptor* d); +bufr_descriptor* accessor_bufr_elements_table_get_descriptor(grib_accessor* a, int code, int* err); diff --git a/src/accessor/grib_accessor_class_bufr_extract_area_subsets.cc b/src/accessor/grib_accessor_class_bufr_extract_area_subsets.cc index 91a34c72c..e6d9185c8 100644 --- a/src/accessor/grib_accessor_class_bufr_extract_area_subsets.cc +++ b/src/accessor/grib_accessor_class_bufr_extract_area_subsets.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,33 +10,31 @@ #include "grib_accessor_class_bufr_extract_area_subsets.h" -grib_accessor_class_bufr_extract_area_subsets_t _grib_accessor_class_bufr_extract_area_subsets{ "bufr_extract_area_subsets" }; -grib_accessor_class* grib_accessor_class_bufr_extract_area_subsets = &_grib_accessor_class_bufr_extract_area_subsets; +grib_accessor_bufr_extract_area_subsets_t _grib_accessor_bufr_extract_area_subsets{}; +grib_accessor* grib_accessor_bufr_extract_area_subsets = &_grib_accessor_bufr_extract_area_subsets; - -void grib_accessor_class_bufr_extract_area_subsets_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_bufr_extract_area_subsets_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_accessor_bufr_extract_area_subsets_t* self = (grib_accessor_bufr_extract_area_subsets_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_gen_t::init(len, arg); + grib_handle* h = grib_handle_of_accessor(this); + int n = 0; - a->length = 0; - self->doExtractSubsets = grib_arguments_get_name(h, arg, n++); - self->numberOfSubsets = grib_arguments_get_name(h, arg, n++); - self->extractSubsetList = grib_arguments_get_name(h, arg, n++); - self->extractAreaWestLongitude = grib_arguments_get_name(h, arg, n++); - self->extractAreaEastLongitude = grib_arguments_get_name(h, arg, n++); - self->extractAreaNorthLatitude = grib_arguments_get_name(h, arg, n++); - self->extractAreaSouthLatitude = grib_arguments_get_name(h, arg, n++); - self->extractAreaLongitudeRank = grib_arguments_get_name(h, arg, n++); - self->extractAreaLatitudeRank = grib_arguments_get_name(h, arg, n++); - self->extractedAreaNumberOfSubsets = grib_arguments_get_name(h, arg, n++); + length_ = 0; + doExtractSubsets_ = grib_arguments_get_name(h, arg, n++); + numberOfSubsets_ = grib_arguments_get_name(h, arg, n++); + extractSubsetList_ = grib_arguments_get_name(h, arg, n++); + extractAreaWestLongitude_ = grib_arguments_get_name(h, arg, n++); + extractAreaEastLongitude_ = grib_arguments_get_name(h, arg, n++); + extractAreaNorthLatitude_ = grib_arguments_get_name(h, arg, n++); + extractAreaSouthLatitude_ = grib_arguments_get_name(h, arg, n++); + extractAreaLongitudeRank_ = grib_arguments_get_name(h, arg, n++); + extractAreaLatitudeRank_ = grib_arguments_get_name(h, arg, n++); + extractedAreaNumberOfSubsets_ = grib_arguments_get_name(h, arg, n++); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; } -int grib_accessor_class_bufr_extract_area_subsets_t::get_native_type(grib_accessor* a) +long grib_accessor_bufr_extract_area_subsets_t::get_native_type() { return GRIB_TYPE_LONG; } @@ -50,13 +47,11 @@ static void fill_in(double a[], long length) a[i] = a[0]; } -static int select_area(grib_accessor* a) +int grib_accessor_bufr_extract_area_subsets_t::select_area() { - grib_accessor_bufr_extract_area_subsets_t* self = (grib_accessor_bufr_extract_area_subsets_t*)a; - int ret = 0; long compressed = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); grib_context* c = h->context; double* lat = NULL; @@ -65,26 +60,26 @@ static int select_area(grib_accessor* a) double lonWest, lonEast, latNorth, latSouth; long numberOfSubsets, i, latRank, lonRank; grib_iarray* subsets = NULL; - size_t nsubsets = 0; - char latstr[32] = {0,}; + size_t nsubsets = 0; + char latstr[32] = {0,}; char lonstr[32] = {0,}; ret = grib_get_long(h, "compressedData", &compressed); if (ret) return ret; - ret = grib_get_long(h, self->numberOfSubsets, &numberOfSubsets); + ret = grib_get_long(h, numberOfSubsets_, &numberOfSubsets); if (ret) return ret; - subsets = grib_iarray_new(c, numberOfSubsets, 10); + subsets = grib_iarray_new(numberOfSubsets, 10); ret = grib_set_long(h, "unpack", 1); if (ret) return ret; if (compressed) { - ret = grib_get_long(h, self->extractAreaLongitudeRank, &lonRank); + ret = grib_get_long(h, extractAreaLongitudeRank_, &lonRank); if (ret) return ret; snprintf(lonstr, sizeof(lonstr), "#%ld#longitude", lonRank); - ret = grib_get_long(h, self->extractAreaLatitudeRank, &latRank); + ret = grib_get_long(h, extractAreaLatitudeRank_, &latRank); if (ret) return ret; snprintf(latstr, sizeof(latstr), "#%ld#latitude", latRank); } @@ -141,13 +136,13 @@ static int select_area(grib_accessor* a) } } - ret = grib_get_double(h, self->extractAreaWestLongitude, &lonWest); + ret = grib_get_double(h, extractAreaWestLongitude_, &lonWest); if (ret) return ret; - ret = grib_get_double(h, self->extractAreaEastLongitude, &lonEast); + ret = grib_get_double(h, extractAreaEastLongitude_, &lonEast); if (ret) return ret; - ret = grib_get_double(h, self->extractAreaNorthLatitude, &latNorth); + ret = grib_get_double(h, extractAreaNorthLatitude_, &latNorth); if (ret) return ret; - ret = grib_get_double(h, self->extractAreaSouthLatitude, &latSouth); + ret = grib_get_double(h, extractAreaSouthLatitude_, &latSouth); if (ret) return ret; for (i = 0; i < numberOfSubsets; i++) { @@ -159,16 +154,16 @@ static int select_area(grib_accessor* a) } nsubsets = grib_iarray_used_size(subsets); - ret = grib_set_long(h, self->extractedAreaNumberOfSubsets, nsubsets); + ret = grib_set_long(h, extractedAreaNumberOfSubsets_, nsubsets); if (ret) return ret; if (nsubsets != 0) { long* subsets_ar = grib_iarray_get_array(subsets); - ret = grib_set_long_array(h, self->extractSubsetList, subsets_ar, nsubsets); + ret = grib_set_long_array(h, extractSubsetList_, subsets_ar, nsubsets); grib_context_free(c, subsets_ar); if (ret) return ret; - ret = grib_set_long(h, self->doExtractSubsets, 1); + ret = grib_set_long(h, doExtractSubsets_, 1); if (ret) return ret; } @@ -180,11 +175,9 @@ static int select_area(grib_accessor* a) return ret; } -int grib_accessor_class_bufr_extract_area_subsets_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_bufr_extract_area_subsets_t::pack_long(const long* val, size_t* len) { - /*grib_accessor_bufr_extract_area_subsets_t *self =(grib_accessor_bufr_extract_area_subsets_t*)a;*/ - if (*len == 0) return GRIB_SUCCESS; - return select_area(a); + return select_area(); } diff --git a/src/accessor/grib_accessor_class_bufr_extract_area_subsets.h b/src/accessor/grib_accessor_class_bufr_extract_area_subsets.h index 941f38ac0..cbe9bca0d 100644 --- a/src/accessor/grib_accessor_class_bufr_extract_area_subsets.h +++ b/src/accessor/grib_accessor_class_bufr_extract_area_subsets.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,25 +15,24 @@ class grib_accessor_bufr_extract_area_subsets_t : public grib_accessor_gen_t { public: - /* Members defined in bufr_extract_area_subsets */ - const char* doExtractSubsets; - const char* numberOfSubsets; - const char* extractSubsetList; - const char* extractAreaWestLongitude; - const char* extractAreaEastLongitude; - const char* extractAreaNorthLatitude; - const char* extractAreaSouthLatitude; - const char* extractAreaLongitudeRank; - const char* extractAreaLatitudeRank; - const char* extractedAreaNumberOfSubsets; -}; - -class grib_accessor_class_bufr_extract_area_subsets_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_bufr_extract_area_subsets_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_bufr_extract_area_subsets_t() : + grib_accessor_gen_t() { class_name_ = "bufr_extract_area_subsets"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bufr_extract_area_subsets_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* doExtractSubsets_ = nullptr; + const char* numberOfSubsets_ = nullptr; + const char* extractSubsetList_ = nullptr; + const char* extractAreaWestLongitude_ = nullptr; + const char* extractAreaEastLongitude_ = nullptr; + const char* extractAreaNorthLatitude_ = nullptr; + const char* extractAreaSouthLatitude_ = nullptr; + const char* extractAreaLongitudeRank_ = nullptr; + const char* extractAreaLatitudeRank_ = nullptr; + const char* extractedAreaNumberOfSubsets_ = nullptr; + + int select_area(); }; diff --git a/src/accessor/grib_accessor_class_bufr_extract_datetime_subsets.cc b/src/accessor/grib_accessor_class_bufr_extract_datetime_subsets.cc index fc49cdcae..9b5df9995 100644 --- a/src/accessor/grib_accessor_class_bufr_extract_datetime_subsets.cc +++ b/src/accessor/grib_accessor_class_bufr_extract_datetime_subsets.cc @@ -10,25 +10,23 @@ #include "grib_accessor_class_bufr_extract_datetime_subsets.h" -grib_accessor_class_bufr_extract_datetime_subsets_t _grib_accessor_class_bufr_extract_datetime_subsets{ "bufr_extract_datetime_subsets" }; -grib_accessor_class* grib_accessor_class_bufr_extract_datetime_subsets = &_grib_accessor_class_bufr_extract_datetime_subsets; +grib_accessor_bufr_extract_datetime_subsets_t _grib_accessor_bufr_extract_datetime_subsets{}; +grib_accessor* grib_accessor_bufr_extract_datetime_subsets = &_grib_accessor_bufr_extract_datetime_subsets; - -void grib_accessor_class_bufr_extract_datetime_subsets_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_bufr_extract_datetime_subsets_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - int n = 0; - grib_accessor_bufr_extract_datetime_subsets_t* self = (grib_accessor_bufr_extract_datetime_subsets_t*)a; + grib_accessor_gen_t::init(len, arg); + int n = 0; - a->length = 0; - self->doExtractSubsets = grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++); - self->numberOfSubsets = grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++); - self->extractSubsetList = grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++); + length_ = 0; + doExtractSubsets_ = grib_arguments_get_name(grib_handle_of_accessor(this), arg, n++); + numberOfSubsets_ = grib_arguments_get_name(grib_handle_of_accessor(this), arg, n++); + extractSubsetList_ = grib_arguments_get_name(grib_handle_of_accessor(this), arg, n++); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; } -int grib_accessor_class_bufr_extract_datetime_subsets_t::get_native_type(grib_accessor* a) +long grib_accessor_bufr_extract_datetime_subsets_t::get_native_type() { return GRIB_TYPE_LONG; } @@ -106,14 +104,13 @@ static int build_long_array(grib_context* c, grib_handle* h, int compressed, return err; } -static int select_datetime(grib_accessor* a) +int grib_accessor_bufr_extract_datetime_subsets_t::select_datetime() { - int ret = 0; - long compressed = 0; - grib_accessor_bufr_extract_datetime_subsets_t* self = (grib_accessor_bufr_extract_datetime_subsets_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - grib_context* c = h->context; - size_t n; + int ret = 0; + long compressed = 0; + grib_handle* h = grib_handle_of_accessor(this); + grib_context* c = h->context; + double julianStart = 0, julianEnd = 0, julianDT = 0; char start_str[80] = {0,}, end_str[80] = {0,}, @@ -136,10 +133,10 @@ static int select_datetime(grib_accessor* a) ret = grib_get_long(h, "compressedData", &compressed); if (ret) return ret; - ret = grib_get_long(h, self->numberOfSubsets, &numberOfSubsets); + ret = grib_get_long(h, numberOfSubsets_, &numberOfSubsets); if (ret) return ret; - subsets = grib_iarray_new(c, numberOfSubsets, 10); + subsets = grib_iarray_new(numberOfSubsets, 10); ret = grib_set_long(h, "unpack", 1); if (ret) return ret; @@ -191,7 +188,7 @@ static int select_datetime(grib_accessor* a) if (ret) return ret; /* SECOND: Double array */ - n = numberOfSubsets; + size_t n = numberOfSubsets; second = (double*)grib_context_malloc_clear(c, sizeof(double) * numberOfSubsets); if (compressed) { ret = grib_get_double_array(h, secondstr, second, &n); @@ -316,11 +313,11 @@ static int select_datetime(grib_accessor* a) if (nsubsets != 0) { long* subsets_ar = grib_iarray_get_array(subsets); - ret = grib_set_long_array(h, self->extractSubsetList, subsets_ar, nsubsets); + ret = grib_set_long_array(h, extractSubsetList_, subsets_ar, nsubsets); grib_context_free(c, subsets_ar); if (ret) return ret; - ret = grib_set_long(h, self->doExtractSubsets, 1); + ret = grib_set_long(h, doExtractSubsets_, 1); if (ret) return ret; } @@ -337,11 +334,11 @@ cleanup: return ret; } -int grib_accessor_class_bufr_extract_datetime_subsets_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_bufr_extract_datetime_subsets_t::pack_long(const long* val, size_t* len) { /*grib_accessor_bufr_extract_datetime_subsets_t *self =(grib_accessor_bufr_extract_datetime_subsets_t*)a;*/ if (*len == 0) return GRIB_SUCCESS; - return select_datetime(a); + return select_datetime(); } diff --git a/src/accessor/grib_accessor_class_bufr_extract_datetime_subsets.h b/src/accessor/grib_accessor_class_bufr_extract_datetime_subsets.h index 765786cd2..df81d6e12 100644 --- a/src/accessor/grib_accessor_class_bufr_extract_datetime_subsets.h +++ b/src/accessor/grib_accessor_class_bufr_extract_datetime_subsets.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,18 +15,17 @@ class grib_accessor_bufr_extract_datetime_subsets_t : public grib_accessor_gen_t { public: - /* Members defined in bufr_extract_datetime_subsets */ - const char* doExtractSubsets; - const char* numberOfSubsets; - const char* extractSubsetList; -}; - -class grib_accessor_class_bufr_extract_datetime_subsets_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_bufr_extract_datetime_subsets_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_bufr_extract_datetime_subsets_t() : + grib_accessor_gen_t() { class_name_ = "bufr_extract_datetime_subsets"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bufr_extract_datetime_subsets_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* doExtractSubsets_ = nullptr; + const char* numberOfSubsets_ = nullptr; + const char* extractSubsetList_ = nullptr; + + int select_datetime(); }; diff --git a/src/accessor/grib_accessor_class_bufr_extract_subsets.cc b/src/accessor/grib_accessor_class_bufr_extract_subsets.cc index 3826d0b32..afa289026 100644 --- a/src/accessor/grib_accessor_class_bufr_extract_subsets.cc +++ b/src/accessor/grib_accessor_class_bufr_extract_subsets.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,51 +10,50 @@ #include "grib_accessor_class_bufr_extract_subsets.h" -grib_accessor_class_bufr_extract_subsets_t _grib_accessor_class_bufr_extract_subsets{ "bufr_extract_subsets" }; -grib_accessor_class* grib_accessor_class_bufr_extract_subsets = &_grib_accessor_class_bufr_extract_subsets; +grib_accessor_bufr_extract_subsets_t _grib_accessor_bufr_extract_subsets{}; +grib_accessor* grib_accessor_bufr_extract_subsets = &_grib_accessor_bufr_extract_subsets; - -void get_accessors(grib_accessor* a) +void grib_accessor_bufr_extract_subsets_t::get_accessors() { - grib_accessor_bufr_extract_subsets_t* self = (grib_accessor_bufr_extract_subsets_t*)a; - const grib_handle* h = grib_handle_of_accessor(a); + const grib_handle* h = grib_handle_of_accessor(this); - if (self->packAccessor) + if (packAccessor_) return; - self->numericValuesAccessor = grib_find_accessor(h, self->numericValues); - self->packAccessor = grib_find_accessor(h, self->pack); + numericValuesAccessor_ = grib_find_accessor(h, numericValues_); + packAccessor_ = grib_find_accessor(h, pack_); } -void grib_accessor_class_bufr_extract_subsets_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_bufr_extract_subsets_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_accessor_bufr_extract_subsets_t* self = (grib_accessor_bufr_extract_subsets_t*)a; + grib_accessor_gen_t::init(len, arg); int n = 0; - a->length = 0; - self->numericValues = grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++); - self->pack = grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; + numericValues_ = grib_arguments_get_name(grib_handle_of_accessor(this), arg, n++); + pack_ = grib_arguments_get_name(grib_handle_of_accessor(this), arg, n++); + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + + numericValuesAccessor_ = NULL; + packAccessor_ = NULL; } -int grib_accessor_class_bufr_extract_subsets_t::get_native_type(grib_accessor* a) +long grib_accessor_bufr_extract_subsets_t::get_native_type() { return GRIB_TYPE_LONG; } -int grib_accessor_class_bufr_extract_subsets_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_bufr_extract_subsets_t::pack_long(const long* val, size_t* len) { - grib_accessor_bufr_extract_subsets_t* self = (grib_accessor_bufr_extract_subsets_t*)a; size_t l = 1; long v[1]; - get_accessors(a); + get_accessors(); - v[0] = 1; - int err = self->packAccessor->pack_long(v, &l); + v[0] = 1; + int err = packAccessor_->pack_long(v, &l); if (err) { if (err == GRIB_ENCODING_ERROR) - grib_context_log(a->context, GRIB_LOG_ERROR, "Could not extract subset(s).\n\tHint: Did you forget to set unpack=1?"); + grib_context_log(context_, GRIB_LOG_ERROR, "Could not extract subset(s).\n\tHint: Did you forget to set unpack=1?"); return err; } diff --git a/src/accessor/grib_accessor_class_bufr_extract_subsets.h b/src/accessor/grib_accessor_class_bufr_extract_subsets.h index 3015d87ae..1128bb7e6 100644 --- a/src/accessor/grib_accessor_class_bufr_extract_subsets.h +++ b/src/accessor/grib_accessor_class_bufr_extract_subsets.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,18 @@ class grib_accessor_bufr_extract_subsets_t : public grib_accessor_gen_t { public: - /* Members defined in bufr_extract_subsets */ - const char* numericValues; - const char* pack; - grib_accessor* numericValuesAccessor; - grib_accessor* packAccessor; -}; - -class grib_accessor_class_bufr_extract_subsets_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_bufr_extract_subsets_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_bufr_extract_subsets_t() : + grib_accessor_gen_t() { class_name_ = "bufr_extract_subsets"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bufr_extract_subsets_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* numericValues_ = nullptr; + const char* pack_ = nullptr; + grib_accessor* numericValuesAccessor_ = nullptr; + grib_accessor* packAccessor_ = nullptr; + + void get_accessors(); }; diff --git a/src/accessor/grib_accessor_class_bufr_group.cc b/src/accessor/grib_accessor_class_bufr_group.cc index e5b7a0841..781820fa4 100644 --- a/src/accessor/grib_accessor_class_bufr_group.cc +++ b/src/accessor/grib_accessor_class_bufr_group.cc @@ -10,20 +10,19 @@ #include "grib_accessor_class_bufr_group.h" -grib_accessor_class_bufr_group_t _grib_accessor_class_bufr_group{ "bufr_group" }; -grib_accessor_class* grib_accessor_class_bufr_group = &_grib_accessor_class_bufr_group; +grib_accessor_bufr_group_t _grib_accessor_bufr_group{}; +grib_accessor* grib_accessor_bufr_group = &_grib_accessor_bufr_group; - -void grib_accessor_class_bufr_group_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_bufr_group_t::dump(grib_dumper* dumper) { - grib_dump_section(dumper, a, a->sub_section->block); + grib_dump_section(dumper, this, sub_section_->block); } -grib_accessor* grib_accessor_class_bufr_group_t::next(grib_accessor* a, int explore) +grib_accessor* grib_accessor_bufr_group_t::next(grib_accessor* a, int explore) { grib_accessor* next = NULL; if (explore) { - next = a->sub_section->block->first; + next = a->sub_section_->block->first; if (!next) next = a->next_; } @@ -31,8 +30,8 @@ grib_accessor* grib_accessor_class_bufr_group_t::next(grib_accessor* a, int expl next = a->next_; } if (!next) { - if (a->parent->owner) - next = a->parent->owner->cclass->next(a->parent->owner, 0); + if (a->parent_->owner) + next = a->parent_->owner->next(a->parent_->owner, 0); } return next; } diff --git a/src/accessor/grib_accessor_class_bufr_group.h b/src/accessor/grib_accessor_class_bufr_group.h index 758c5c772..320e326f1 100644 --- a/src/accessor/grib_accessor_class_bufr_group.h +++ b/src/accessor/grib_accessor_class_bufr_group.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,14 +15,9 @@ class grib_accessor_bufr_group_t : public grib_accessor_variable_t { public: - /* Members defined in bufr_group */ -}; - -class grib_accessor_class_bufr_group_t : public grib_accessor_class_variable_t -{ -public: - grib_accessor_class_bufr_group_t(const char* name) : grib_accessor_class_variable_t(name) {} + grib_accessor_bufr_group_t() : + grib_accessor_variable_t() { class_name_ = "bufr_group"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bufr_group_t{}; } - void dump(grib_accessor*, grib_dumper*) override; - grib_accessor* next(grib_accessor* a, int explore) override; + void dump(grib_dumper*) override; + grib_accessor* next(grib_accessor*, int explore) override; }; diff --git a/src/accessor/grib_accessor_class_bufr_simple_thinning.cc b/src/accessor/grib_accessor_class_bufr_simple_thinning.cc index a74d7a74c..42d6641fe 100644 --- a/src/accessor/grib_accessor_class_bufr_simple_thinning.cc +++ b/src/accessor/grib_accessor_class_bufr_simple_thinning.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,39 +10,35 @@ #include "grib_accessor_class_bufr_simple_thinning.h" -grib_accessor_class_bufr_simple_thinning_t _grib_accessor_class_bufr_simple_thinning{ "bufr_simple_thinning" }; -grib_accessor_class* grib_accessor_class_bufr_simple_thinning = &_grib_accessor_class_bufr_simple_thinning; +grib_accessor_bufr_simple_thinning_t _grib_accessor_bufr_simple_thinning{}; +grib_accessor* grib_accessor_bufr_simple_thinning = &_grib_accessor_bufr_simple_thinning; - -void grib_accessor_class_bufr_simple_thinning_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_bufr_simple_thinning_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_accessor_bufr_simple_thinning_t* self = (grib_accessor_bufr_simple_thinning_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_gen_t::init(len, arg); + grib_handle* h = grib_handle_of_accessor(this); + int n = 0; - a->length = 0; - self->doExtractSubsets = grib_arguments_get_name(h, arg, n++); - self->numberOfSubsets = grib_arguments_get_name(h, arg, n++); - self->extractSubsetList = grib_arguments_get_name(h, arg, n++); - self->simpleThinningStart = grib_arguments_get_name(h, arg, n++); - self->simpleThinningMissingRadius = grib_arguments_get_name(h, arg, n++); - self->simpleThinningSkip = grib_arguments_get_name(h, arg, n++); + length_ = 0; + doExtractSubsets_ = grib_arguments_get_name(h, arg, n++); + numberOfSubsets_ = grib_arguments_get_name(h, arg, n++); + extractSubsetList_ = grib_arguments_get_name(h, arg, n++); + simpleThinningStart_ = grib_arguments_get_name(h, arg, n++); + simpleThinningMissingRadius_ = grib_arguments_get_name(h, arg, n++); + simpleThinningSkip_ = grib_arguments_get_name(h, arg, n++); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; } -int grib_accessor_class_bufr_simple_thinning_t::get_native_type(grib_accessor* a) +long grib_accessor_bufr_simple_thinning_t::get_native_type() { return GRIB_TYPE_LONG; } -static int apply_thinning(grib_accessor* a) +int grib_accessor_bufr_simple_thinning_t::apply_thinning() { - const grib_accessor_bufr_simple_thinning_t* self = (grib_accessor_bufr_simple_thinning_t*)a; - long skip; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); grib_context* c = h->context; long compressed = 0, nsubsets; grib_iarray* subsets; @@ -55,25 +50,25 @@ static int apply_thinning(grib_accessor* a) return ret; if (compressed) { long numberOfSubsets = 0; - ret = grib_get_long(h, self->numberOfSubsets, &numberOfSubsets); + ret = grib_get_long(h, numberOfSubsets_, &numberOfSubsets); if (ret) return ret; - ret = grib_get_long(h, self->simpleThinningStart, &start); + ret = grib_get_long(h, simpleThinningStart_, &start); if (ret) return ret; - ret = grib_get_long(h, self->simpleThinningSkip, &skip); + ret = grib_get_long(h, simpleThinningSkip_, &skip); if (ret) return ret; if (skip <= 0) return GRIB_INVALID_KEY_VALUE; - ret = grib_get_long(h, self->simpleThinningMissingRadius, &radius); + ret = grib_get_long(h, simpleThinningMissingRadius_, &radius); if (ret) return ret; - subsets = grib_iarray_new(c, numberOfSubsets / skip + 1, 10); + subsets = grib_iarray_new(numberOfSubsets / skip + 1, 10); for (long i = 0; i < numberOfSubsets; i += skip + 1) { grib_iarray_push(subsets, i + 1); } @@ -82,7 +77,7 @@ static int apply_thinning(grib_accessor* a) if (nsubsets != 0) { subsets_ar = grib_iarray_get_array(subsets); - ret = grib_set_long_array(h, self->extractSubsetList, subsets_ar, nsubsets); + ret = grib_set_long_array(h, extractSubsetList_, subsets_ar, nsubsets); grib_context_free(c, subsets_ar); if (ret) return ret; @@ -91,7 +86,7 @@ static int apply_thinning(grib_accessor* a) if (ret) return ret; - ret = grib_set_long(h, self->doExtractSubsets, 1); + ret = grib_set_long(h, doExtractSubsets_, 1); if (ret) return ret; } @@ -104,15 +99,13 @@ static int apply_thinning(grib_accessor* a) return ret; } -int grib_accessor_class_bufr_simple_thinning_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_bufr_simple_thinning_t::pack_long(const long* val, size_t* len) { - const grib_accessor_bufr_simple_thinning_t* self = (grib_accessor_bufr_simple_thinning_t*)a; - if (*len == 0) return GRIB_SUCCESS; - int err = apply_thinning(a); + int err = apply_thinning(); if (err) return err; - return grib_set_long(a->parent->h, self->doExtractSubsets, 1); + return grib_set_long(parent_->h, doExtractSubsets_, 1); } diff --git a/src/accessor/grib_accessor_class_bufr_simple_thinning.h b/src/accessor/grib_accessor_class_bufr_simple_thinning.h index 9b7467914..2c92a69df 100644 --- a/src/accessor/grib_accessor_class_bufr_simple_thinning.h +++ b/src/accessor/grib_accessor_class_bufr_simple_thinning.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,21 +15,20 @@ class grib_accessor_bufr_simple_thinning_t : public grib_accessor_gen_t { public: - /* Members defined in bufr_simple_thinning */ - const char* doExtractSubsets; - const char* numberOfSubsets; - const char* extractSubsetList; - const char* simpleThinningStart; - const char* simpleThinningMissingRadius; - const char* simpleThinningSkip; -}; - -class grib_accessor_class_bufr_simple_thinning_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_bufr_simple_thinning_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_bufr_simple_thinning_t() : + grib_accessor_gen_t() { class_name_ = "bufr_simple_thinning"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bufr_simple_thinning_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* doExtractSubsets_ = nullptr; + const char* numberOfSubsets_ = nullptr; + const char* extractSubsetList_ = nullptr; + const char* simpleThinningStart_ = nullptr; + const char* simpleThinningMissingRadius_ = nullptr; + const char* simpleThinningSkip_ = nullptr; + + int apply_thinning(); }; diff --git a/src/accessor/grib_accessor_class_bufr_string_values.cc b/src/accessor/grib_accessor_class_bufr_string_values.cc index 31e616b6f..e95f43a59 100644 --- a/src/accessor/grib_accessor_class_bufr_string_values.cc +++ b/src/accessor/grib_accessor_class_bufr_string_values.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -12,49 +11,45 @@ #include "grib_accessor_class_bufr_string_values.h" #include "grib_accessor_class_bufr_data_array.h" -grib_accessor_class_bufr_string_values_t _grib_accessor_class_bufr_string_values{ "bufr_string_values" }; -grib_accessor_class* grib_accessor_class_bufr_string_values = &_grib_accessor_class_bufr_string_values; +grib_accessor_bufr_string_values_t _grib_accessor_bufr_string_values{}; +grib_accessor* grib_accessor_bufr_string_values = &_grib_accessor_bufr_string_values; - -void grib_accessor_class_bufr_string_values_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_bufr_string_values_t::init(const long len, grib_arguments* args) { - grib_accessor_class_ascii_t::init(a, len, args); - grib_accessor_bufr_string_values_t* self = (grib_accessor_bufr_string_values_t*)a; - int n = 0; - self->dataAccessorName = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->dataAccessor = NULL; - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_ascii_t::init(len, args); + int n = 0; + dataAccessorName_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + dataAccessor_ = NULL; + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -void grib_accessor_class_bufr_string_values_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_bufr_string_values_t::dump(grib_dumper* dumper) { - grib_dump_string_array(dumper, a, NULL); + grib_dump_string_array(dumper, this, NULL); } -static grib_accessor* get_accessor(grib_accessor* a) +grib_accessor* grib_accessor_bufr_string_values_t::get_accessor() { - grib_accessor_bufr_string_values_t* self = (grib_accessor_bufr_string_values_t*)a; - if (!self->dataAccessor) { - self->dataAccessor = grib_find_accessor(grib_handle_of_accessor(a), self->dataAccessorName); + if (!dataAccessor_) { + dataAccessor_ = grib_find_accessor(grib_handle_of_accessor(this), dataAccessorName_); } - return self->dataAccessor; + return dataAccessor_; } -int grib_accessor_class_bufr_string_values_t::unpack_string_array(grib_accessor* a, char** buffer, size_t* len) +int grib_accessor_bufr_string_values_t::unpack_string_array(char** buffer, size_t* len) { - grib_accessor* data = 0; - grib_context* c = a->context; + grib_context* c = context_; grib_vsarray* stringValues = NULL; - size_t l = 0, tl; + size_t l = 0, tl; size_t i, j, n = 0; char** b = buffer; - data = get_accessor(a); + grib_accessor_bufr_data_array_t* data = dynamic_cast(get_accessor()); if (!data) return GRIB_NOT_FOUND; - stringValues = accessor_bufr_data_array_get_stringValues(data); + stringValues = data->accessor_bufr_data_array_get_stringValues(); n = grib_vsarray_used_size(stringValues); @@ -75,18 +70,18 @@ int grib_accessor_class_bufr_string_values_t::unpack_string_array(grib_accessor* return GRIB_SUCCESS; } -int grib_accessor_class_bufr_string_values_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_bufr_string_values_t::unpack_string(char* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_bufr_string_values_t::value_count(grib_accessor* a, long* rlen) +int grib_accessor_bufr_string_values_t::value_count(long* rlen) { - grib_accessor* descriptors = get_accessor(a); + grib_accessor* descriptors = get_accessor(); return descriptors->value_count(rlen); } -void grib_accessor_class_bufr_string_values_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_bufr_string_values_t::destroy(grib_context* c) { - grib_accessor_class_ascii_t::destroy(c, a); + grib_accessor_ascii_t::destroy(c); } diff --git a/src/accessor/grib_accessor_class_bufr_string_values.h b/src/accessor/grib_accessor_class_bufr_string_values.h index fe6c2acb7..77a0e8b30 100644 --- a/src/accessor/grib_accessor_class_bufr_string_values.h +++ b/src/accessor/grib_accessor_class_bufr_string_values.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,20 +15,19 @@ class grib_accessor_bufr_string_values_t : public grib_accessor_ascii_t { public: - /* Members defined in bufr_string_values */ - const char* dataAccessorName; - grib_accessor* dataAccessor; -}; - -class grib_accessor_class_bufr_string_values_t : public grib_accessor_class_ascii_t -{ -public: - grib_accessor_class_bufr_string_values_t(const char* name) : grib_accessor_class_ascii_t(name) {} + grib_accessor_bufr_string_values_t() : + grib_accessor_ascii_t() { class_name_ = "bufr_string_values"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bufr_string_values_t{}; } - int unpack_string(grib_accessor*, char*, size_t* len) override; - int unpack_string_array(grib_accessor*, char**, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_string(char*, size_t* len) override; + int unpack_string_array(char**, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* dataAccessorName_ = nullptr; + grib_accessor* dataAccessor_ = nullptr; + + grib_accessor* get_accessor(); }; diff --git a/src/accessor/grib_accessor_class_bufrdc_expanded_descriptors.cc b/src/accessor/grib_accessor_class_bufrdc_expanded_descriptors.cc index 777fa351c..1b769121a 100644 --- a/src/accessor/grib_accessor_class_bufrdc_expanded_descriptors.cc +++ b/src/accessor/grib_accessor_class_bufrdc_expanded_descriptors.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,43 +10,40 @@ #include "grib_accessor_class_bufrdc_expanded_descriptors.h" -grib_accessor_class_bufrdc_expanded_descriptors_t _grib_accessor_class_bufrdc_expanded_descriptors{ "bufrdc_expanded_descriptors" }; -grib_accessor_class* grib_accessor_class_bufrdc_expanded_descriptors = &_grib_accessor_class_bufrdc_expanded_descriptors; +grib_accessor_bufrdc_expanded_descriptors_t _grib_accessor_bufrdc_expanded_descriptors{}; +grib_accessor* grib_accessor_bufrdc_expanded_descriptors = &_grib_accessor_bufrdc_expanded_descriptors; - -void grib_accessor_class_bufrdc_expanded_descriptors_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_bufrdc_expanded_descriptors_t::init(const long len, grib_arguments* args) { - grib_accessor_class_long_t::init(a, len, args); - grib_accessor_bufrdc_expanded_descriptors_t* self = (grib_accessor_bufrdc_expanded_descriptors_t*)a; - int n = 0; - self->expandedDescriptors = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->expandedDescriptorsAccessor = 0; - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_long_t::init(len, args); + int n = 0; + expandedDescriptors_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + expandedDescriptorsAccessor_ = 0; + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -static grib_accessor* get_accessor(grib_accessor* a) +grib_accessor* grib_accessor_bufrdc_expanded_descriptors_t::get_accessor() { - grib_accessor_bufrdc_expanded_descriptors_t* self = (grib_accessor_bufrdc_expanded_descriptors_t*)a; - if (!self->expandedDescriptorsAccessor) { - self->expandedDescriptorsAccessor = grib_find_accessor(grib_handle_of_accessor(a), self->expandedDescriptors); + if (!expandedDescriptorsAccessor_) { + expandedDescriptorsAccessor_ = grib_find_accessor(grib_handle_of_accessor(this), expandedDescriptors_); } - return self->expandedDescriptorsAccessor; + return expandedDescriptorsAccessor_; } -int grib_accessor_class_bufrdc_expanded_descriptors_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_bufrdc_expanded_descriptors_t::unpack_long(long* val, size_t* len) { grib_accessor* descriptors = 0; size_t rlen = 0, l; long lenall = 0; size_t i = 0; long* v = 0; - grib_context* c = a->context; + grib_context* c = context_; - descriptors = get_accessor(a); + descriptors = get_accessor(); if (!descriptors) return GRIB_NOT_FOUND; - a->value_count(&lenall); + value_count(&lenall); v = (long*)grib_context_malloc_clear(c, sizeof(long) * lenall); l = lenall; descriptors->unpack_long(v, &l); @@ -62,7 +58,7 @@ int grib_accessor_class_bufrdc_expanded_descriptors_t::unpack_long(grib_accessor return GRIB_SUCCESS; } -int grib_accessor_class_bufrdc_expanded_descriptors_t::unpack_string_array(grib_accessor* a, char** buffer, size_t* len) +int grib_accessor_bufrdc_expanded_descriptors_t::unpack_string_array(char** buffer, size_t* len) { int err = 0; grib_accessor* descriptors = 0; @@ -71,12 +67,12 @@ int grib_accessor_class_bufrdc_expanded_descriptors_t::unpack_string_array(grib_ size_t i = 0; long* v = 0; char buf[25] = {0,}; - grib_context* c = a->context; + grib_context* c = context_; - descriptors = get_accessor(a); + descriptors = get_accessor(); if (!descriptors) return GRIB_NOT_FOUND; - err = a->value_count(&lenall); + err = value_count(&lenall); if (err) return err; l = lenall; if (l > *len) return GRIB_ARRAY_TOO_SMALL; @@ -95,14 +91,14 @@ int grib_accessor_class_bufrdc_expanded_descriptors_t::unpack_string_array(grib_ return GRIB_SUCCESS; } -int grib_accessor_class_bufrdc_expanded_descriptors_t::value_count(grib_accessor* a, long* rlen) +int grib_accessor_bufrdc_expanded_descriptors_t::value_count(long* rlen) { - grib_accessor* descriptors = get_accessor(a); + grib_accessor* descriptors = get_accessor(); return descriptors->value_count(rlen); } -void grib_accessor_class_bufrdc_expanded_descriptors_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_bufrdc_expanded_descriptors_t::destroy(grib_context* c) { - grib_accessor_class_long_t::destroy(c, a); + grib_accessor_long_t::destroy(c); } diff --git a/src/accessor/grib_accessor_class_bufrdc_expanded_descriptors.h b/src/accessor/grib_accessor_class_bufrdc_expanded_descriptors.h index 92cf595ad..f46110649 100644 --- a/src/accessor/grib_accessor_class_bufrdc_expanded_descriptors.h +++ b/src/accessor/grib_accessor_class_bufrdc_expanded_descriptors.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,18 @@ class grib_accessor_bufrdc_expanded_descriptors_t : public grib_accessor_long_t { public: - /* Members defined in bufrdc_expanded_descriptors */ - const char* expandedDescriptors; - grib_accessor* expandedDescriptorsAccessor; -}; - -class grib_accessor_class_bufrdc_expanded_descriptors_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_bufrdc_expanded_descriptors_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_bufrdc_expanded_descriptors_t() : + grib_accessor_long_t() { class_name_ = "bufrdc_expanded_descriptors"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bufrdc_expanded_descriptors_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string_array(grib_accessor*, char**, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string_array(char**, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void init(const long, grib_arguments*) override; + +private: + const char* expandedDescriptors_ = nullptr; + grib_accessor* expandedDescriptorsAccessor_ = nullptr; + + grib_accessor* get_accessor(); }; diff --git a/src/accessor/grib_accessor_class_bytes.cc b/src/accessor/grib_accessor_class_bytes.cc index b95b2338a..6ae039dcd 100644 --- a/src/accessor/grib_accessor_class_bytes.cc +++ b/src/accessor/grib_accessor_class_bytes.cc @@ -10,28 +10,27 @@ #include "grib_accessor_class_bytes.h" -grib_accessor_class_bytes_t _grib_accessor_class_bytes{ "bytes" }; -grib_accessor_class* grib_accessor_class_bytes = &_grib_accessor_class_bytes; +grib_accessor_bytes_t _grib_accessor_bytes{}; +grib_accessor* grib_accessor_bytes = &_grib_accessor_bytes; - -void grib_accessor_class_bytes_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_bytes_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); + grib_accessor_gen_t::init(len, arg); /*grib_accessor_signed* self = (grib_accessor_signed*)a; */ - a->length = len; - Assert(a->length >= 0); + length_ = len; + Assert(length_ >= 0); } -int grib_accessor_class_bytes_t::get_native_type(grib_accessor* a) +long grib_accessor_bytes_t::get_native_type() { return GRIB_TYPE_BYTES; } -int grib_accessor_class_bytes_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_bytes_t::compare(grib_accessor* b) { int retval = GRIB_SUCCESS; - size_t alen = (size_t)a->byte_count(); + size_t alen = (size_t)byte_count(); size_t blen = (size_t)b->byte_count(); if (alen != blen) return GRIB_COUNT_MISMATCH; @@ -39,12 +38,12 @@ int grib_accessor_class_bytes_t::compare(grib_accessor* a, grib_accessor* b) return retval; } -int grib_accessor_class_bytes_t::unpack_string(grib_accessor* a, char* v, size_t* len) +int grib_accessor_bytes_t::unpack_string(char* v, size_t* len) { unsigned char* p = NULL; char* s = v; long i = 0; - const long length = a->byte_count(); + const long length = byte_count(); const long slength = 2 * length; if (*len < (size_t)slength) { @@ -52,7 +51,7 @@ int grib_accessor_class_bytes_t::unpack_string(grib_accessor* a, char* v, size_t return GRIB_BUFFER_TOO_SMALL; } - p = grib_handle_of_accessor(a)->buffer->data + a->byte_offset(); + p = grib_handle_of_accessor(this)->buffer->data + byte_offset(); for (i = 0; i < length; i++) { snprintf(s, INT_MAX, "%02x", *(p++)); s += 2; @@ -63,15 +62,15 @@ int grib_accessor_class_bytes_t::unpack_string(grib_accessor* a, char* v, size_t return GRIB_SUCCESS; } -int grib_accessor_class_bytes_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_bytes_t::pack_string(const char* val, size_t* len) { /* The string representation (val) of the byte array will have two chars * per byte e.g. 4C5B means the 2 bytes 0114 and 0133 in octal * so has to be twice the length of the byte array */ int err = 0; - grib_context* c = a->context; - size_t nbytes = a->length; + grib_context* c = context_; + size_t nbytes = length_; const size_t expected_blen = nbytes; const size_t expected_slen = 2 * expected_blen; unsigned char* bytearray = NULL; @@ -80,7 +79,7 @@ int grib_accessor_class_bytes_t::pack_string(grib_accessor* a, const char* val, if (slen != expected_slen || *len != expected_slen) { grib_context_log(c, GRIB_LOG_ERROR, "%s: Key %s is %lu bytes. Expected a string with %lu characters (actual length=%zu)", - __func__, a->name, expected_blen, expected_slen, *len); + __func__, name_, expected_blen, expected_slen, *len); return GRIB_WRONG_ARRAY_SIZE; } @@ -99,7 +98,7 @@ int grib_accessor_class_bytes_t::pack_string(grib_accessor* a, const char* val, } /* Forward to base class to pack the byte array */ - err = grib_accessor_class_gen_t::pack_bytes(a, bytearray, &nbytes); + err = grib_accessor_gen_t::pack_bytes(bytearray, &nbytes); grib_context_free(c, bytearray); return err; } diff --git a/src/accessor/grib_accessor_class_bytes.h b/src/accessor/grib_accessor_class_bytes.h index 676cf55c4..3c33a4aac 100644 --- a/src/accessor/grib_accessor_class_bytes.h +++ b/src/accessor/grib_accessor_class_bytes.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,12 @@ class grib_accessor_bytes_t : public grib_accessor_gen_t { public: - /* Members defined in bytes */ -}; - -class grib_accessor_class_bytes_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_bytes_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_bytes_t() : + grib_accessor_gen_t() { class_name_ = "bytes"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_bytes_t{}; } - int get_native_type(grib_accessor*) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int compare(grib_accessor*, grib_accessor*) override; + long get_native_type() override; + int pack_string(const char*, size_t* len) override; + int unpack_string(char*, size_t* len) override; + void init(const long, grib_arguments*) override; + int compare(grib_accessor*) override; }; diff --git a/src/accessor/grib_accessor_class_cf_var_name.cc b/src/accessor/grib_accessor_class_cf_var_name.cc index 41f42ff30..8685e1dfb 100644 --- a/src/accessor/grib_accessor_class_cf_var_name.cc +++ b/src/accessor/grib_accessor_class_cf_var_name.cc @@ -10,40 +10,36 @@ #include "grib_accessor_class_cf_var_name.h" -grib_accessor_class_cf_var_name_t _grib_accessor_class_cf_var_name{ "cf_var_name" }; -grib_accessor_class* grib_accessor_class_cf_var_name = &_grib_accessor_class_cf_var_name; +grib_accessor_cf_var_name_t _grib_accessor_cf_var_name{}; +grib_accessor* grib_accessor_cf_var_name = &_grib_accessor_cf_var_name; - -void grib_accessor_class_cf_var_name_t::init(grib_accessor* a, const long l, grib_arguments* arg) +void grib_accessor_cf_var_name_t::init(const long l, grib_arguments* arg) { - grib_accessor_class_ascii_t::init(a, l, arg); - - grib_accessor_cf_var_name_t* self = (grib_accessor_cf_var_name_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - - self->defaultKey = grib_arguments_get_name(h, arg, 0); + grib_accessor_ascii_t::init(l, arg); + grib_handle* h = grib_handle_of_accessor(this); + defaultKey_ = grib_arguments_get_name(h, arg, 0); } -int grib_accessor_class_cf_var_name_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_cf_var_name_t::unpack_string(char* val, size_t* len) { - grib_accessor_cf_var_name_t* self = (grib_accessor_cf_var_name_t*)a; - - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); char defaultKey[256] = {0,}; - size_t size = sizeof(defaultKey) / sizeof(*defaultKey); + size_t size = sizeof(defaultKey) / sizeof(*defaultKey); char* pDefaultKey = defaultKey; - int err = grib_get_string(h, self->defaultKey, defaultKey, &size); + int err = grib_get_string(h, defaultKey_, defaultKey, &size); if (err) return err; Assert(size > 0); Assert(strlen(defaultKey) > 0); - if ( STR_EQUAL(defaultKey, "~") || isdigit(defaultKey[0]) ) { + if (STR_EQUAL(defaultKey, "~") || isdigit(defaultKey[0])) { // NetCDF variables cannot start with a digit long paramId = 0; - err = grib_get_long(h, "paramId", ¶mId); - if (err) snprintf(val, 1024, "%s", "unknown"); - else snprintf(val, 1024, "p%ld", paramId); + err = grib_get_long(h, "paramId", ¶mId); + if (err) + snprintf(val, 1024, "%s", "unknown"); + else + snprintf(val, 1024, "p%ld", paramId); } else { snprintf(val, 1024, "%s", pDefaultKey); @@ -53,7 +49,7 @@ int grib_accessor_class_cf_var_name_t::unpack_string(grib_accessor* a, char* val return GRIB_SUCCESS; } -size_t grib_accessor_class_cf_var_name_t::string_length(grib_accessor* a) +size_t grib_accessor_cf_var_name_t::string_length() { return 1024; } diff --git a/src/accessor/grib_accessor_class_cf_var_name.h b/src/accessor/grib_accessor_class_cf_var_name.h index aa0007a54..7cc181471 100644 --- a/src/accessor/grib_accessor_class_cf_var_name.h +++ b/src/accessor/grib_accessor_class_cf_var_name.h @@ -15,16 +15,13 @@ class grib_accessor_cf_var_name_t : public grib_accessor_ascii_t { public: - /* Members defined in cf_var_name */ - const char* defaultKey; -}; - -class grib_accessor_class_cf_var_name_t : public grib_accessor_class_ascii_t -{ -public: - grib_accessor_class_cf_var_name_t(const char* name) : grib_accessor_class_ascii_t(name) {} + grib_accessor_cf_var_name_t() : + grib_accessor_ascii_t() { class_name_ = "cf_var_name"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_cf_var_name_t{}; } - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + void init(const long, grib_arguments*) override; + +private: + const char* defaultKey_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_change_alternative_row_scanning.cc b/src/accessor/grib_accessor_class_change_alternative_row_scanning.cc index afd372549..67bb0eca8 100644 --- a/src/accessor/grib_accessor_class_change_alternative_row_scanning.cc +++ b/src/accessor/grib_accessor_class_change_alternative_row_scanning.cc @@ -10,32 +10,28 @@ #include "grib_accessor_class_change_alternative_row_scanning.h" -grib_accessor_class_change_alternative_row_scanning_t _grib_accessor_class_change_alternative_row_scanning{ "change_alternative_row_scanning" }; -grib_accessor_class* grib_accessor_class_change_alternative_row_scanning = &_grib_accessor_class_change_alternative_row_scanning; +grib_accessor_change_alternative_row_scanning_t _grib_accessor_change_alternative_row_scanning{}; +grib_accessor* grib_accessor_change_alternative_row_scanning = &_grib_accessor_change_alternative_row_scanning; - -void grib_accessor_class_change_alternative_row_scanning_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_change_alternative_row_scanning_t::init(const long len, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, len, args); - grib_accessor_change_alternative_row_scanning_t* self = (grib_accessor_change_alternative_row_scanning_t*)a; - + grib_accessor_gen_t::init(len, args); int n = 0; - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->Ni = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->Nj = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->alternativeRowScanning = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + Ni_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + Nj_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + alternativeRowScanning_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -int grib_accessor_class_change_alternative_row_scanning_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_change_alternative_row_scanning_t::pack_long(const long* val, size_t* len) { - grib_accessor_change_alternative_row_scanning_t* self = (grib_accessor_change_alternative_row_scanning_t*)a; - int err = 0; - const grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + const grib_context* c = context_; + grib_handle* h = grib_handle_of_accessor(this); long i, j, jr, theEnd, Ni, Nj, k, kp, alternativeRowScanning; size_t size = 0; double* values = NULL; @@ -45,23 +41,23 @@ int grib_accessor_class_change_alternative_row_scanning_t::pack_long(grib_access return 0; /* Make sure Ni / Nj are not missing */ - if (grib_is_missing(h, self->Ni, &err) && !err) { - grib_context_log(c, GRIB_LOG_ERROR, "change_alternative_row_scanning: Key %s cannot be 'missing'!", self->Ni); + if (grib_is_missing(h, Ni_, &err) && !err) { + grib_context_log(c, GRIB_LOG_ERROR, "change_alternative_row_scanning: Key %s cannot be 'missing'!", Ni_); return GRIB_WRONG_GRID; } - if (grib_is_missing(h, self->Nj, &err) && !err) { - grib_context_log(c, GRIB_LOG_ERROR, "change_alternative_row_scanning: Key %s cannot be 'missing'!", self->Nj); + if (grib_is_missing(h, Nj_, &err) && !err) { + grib_context_log(c, GRIB_LOG_ERROR, "change_alternative_row_scanning: Key %s cannot be 'missing'!", Nj_); return GRIB_WRONG_GRID; } - if ((err = grib_get_long_internal(h, self->Ni, &Ni)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, Ni_, &Ni)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(h, self->Nj, &Nj)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, Nj_, &Nj)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(h, self->alternativeRowScanning, &alternativeRowScanning)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, alternativeRowScanning_, &alternativeRowScanning)) != GRIB_SUCCESS) return err; - if ((err = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) + if ((err = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) return err; if (size > (size_t)(Ni * Nj)) { @@ -73,7 +69,7 @@ int grib_accessor_class_change_alternative_row_scanning_t::pack_long(grib_access if (!values) return GRIB_OUT_OF_MEMORY; - if ((err = grib_get_double_array_internal(h, self->values, values, &size)) != GRIB_SUCCESS) { + if ((err = grib_get_double_array_internal(h, values_, values, &size)) != GRIB_SUCCESS) { grib_context_free(c, values); return err; } @@ -93,12 +89,12 @@ int grib_accessor_class_change_alternative_row_scanning_t::pack_long(grib_access } } alternativeRowScanning = !alternativeRowScanning; - if ((err = grib_set_long_internal(h, self->alternativeRowScanning, alternativeRowScanning)) != GRIB_SUCCESS) { + if ((err = grib_set_long_internal(h, alternativeRowScanning_, alternativeRowScanning)) != GRIB_SUCCESS) { grib_context_free(c, values); return err; } - if ((err = grib_set_double_array_internal(h, self->values, values, size)) != GRIB_SUCCESS) { + if ((err = grib_set_double_array_internal(h, values_, values, size)) != GRIB_SUCCESS) { grib_context_free(c, values); return err; } @@ -108,12 +104,12 @@ int grib_accessor_class_change_alternative_row_scanning_t::pack_long(grib_access return GRIB_SUCCESS; } -int grib_accessor_class_change_alternative_row_scanning_t::get_native_type(grib_accessor* a) +long grib_accessor_change_alternative_row_scanning_t::get_native_type() { return GRIB_TYPE_LONG; } -int grib_accessor_class_change_alternative_row_scanning_t::unpack_long(grib_accessor* a, long* v, size_t* len) +int grib_accessor_change_alternative_row_scanning_t::unpack_long(long* v, size_t* len) { /* Decoding this accessor doesn't make sense so we return a dummy value */ *v = -1; diff --git a/src/accessor/grib_accessor_class_change_alternative_row_scanning.h b/src/accessor/grib_accessor_class_change_alternative_row_scanning.h index f889931a0..1ece123d4 100644 --- a/src/accessor/grib_accessor_class_change_alternative_row_scanning.h +++ b/src/accessor/grib_accessor_class_change_alternative_row_scanning.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,20 +15,17 @@ class grib_accessor_change_alternative_row_scanning_t : public grib_accessor_gen_t { public: - /* Members defined in change_alternative_row_scanning */ - const char* values; - const char* Ni; - const char* Nj; - const char* alternativeRowScanning; -}; - -class grib_accessor_class_change_alternative_row_scanning_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_change_alternative_row_scanning_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_change_alternative_row_scanning_t() : + grib_accessor_gen_t() { class_name_ = "change_alternative_row_scanning"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_change_alternative_row_scanning_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; + const char* Ni_ = nullptr; + const char* Nj_ = nullptr; + const char* alternativeRowScanning_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_change_scanning_direction.cc b/src/accessor/grib_accessor_class_change_scanning_direction.cc index e98df6f93..f85d80674 100644 --- a/src/accessor/grib_accessor_class_change_scanning_direction.cc +++ b/src/accessor/grib_accessor_class_change_scanning_direction.cc @@ -10,79 +10,75 @@ #include "grib_accessor_class_change_scanning_direction.h" -grib_accessor_class_change_scanning_direction_t _grib_accessor_class_change_scanning_direction{ "change_scanning_direction" }; -grib_accessor_class* grib_accessor_class_change_scanning_direction = &_grib_accessor_class_change_scanning_direction; +grib_accessor_change_scanning_direction_t _grib_accessor_change_scanning_direction{}; +grib_accessor* grib_accessor_change_scanning_direction = &_grib_accessor_change_scanning_direction; - -void grib_accessor_class_change_scanning_direction_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_change_scanning_direction_t::init(const long len, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, len, args); - grib_accessor_change_scanning_direction_t* self = (grib_accessor_change_scanning_direction_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + grib_accessor_gen_t::init(len, args); + grib_handle* h = grib_handle_of_accessor(this); + int n = 0; - int n = 0; - self->values = grib_arguments_get_name(h, args, n++); - self->Ni = grib_arguments_get_name(h, args, n++); - self->Nj = grib_arguments_get_name(h, args, n++); - self->i_scans_negatively = grib_arguments_get_name(h, args, n++); - self->j_scans_positively = grib_arguments_get_name(h, args, n++); - self->first = grib_arguments_get_name(h, args, n++); - self->last = grib_arguments_get_name(h, args, n++); - self->axis = grib_arguments_get_name(h, args, n++); + values_ = grib_arguments_get_name(h, args, n++); + Ni_ = grib_arguments_get_name(h, args, n++); + Nj_ = grib_arguments_get_name(h, args, n++); + i_scans_negatively_ = grib_arguments_get_name(h, args, n++); + j_scans_positively_ = grib_arguments_get_name(h, args, n++); + first_ = grib_arguments_get_name(h, args, n++); + last_ = grib_arguments_get_name(h, args, n++); + axis_ = grib_arguments_get_name(h, args, n++); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -int grib_accessor_class_change_scanning_direction_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_change_scanning_direction_t::pack_long(const long* val, size_t* len) { int err = 0; long i, j, jr, theEnd, Ni, Nj, k, kp; double tmp; - long iScansNegatively = 0; - long jScansPositively = 0; - double first = 0; - double last = 0; - size_t size = 0; - double* values = NULL; - grib_accessor_change_scanning_direction_t* self = (grib_accessor_change_scanning_direction_t*)a; - const grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; + long iScansNegatively = 0; + long jScansPositively = 0; + double first = 0; + double last = 0; + size_t size = 0; + double* values = NULL; + const grib_context* c = context_; + grib_handle* h = grib_handle_of_accessor(this); if (*val == 0) return GRIB_SUCCESS; /* Make sure Ni / Nj are not missing */ - if (grib_is_missing(h, self->Ni, &err) && !err) { - grib_context_log(c, GRIB_LOG_ERROR, "%s: Key %s cannot be 'missing'!", cclass_name, self->Ni); + if (grib_is_missing(h, Ni_, &err) && !err) { + grib_context_log(c, GRIB_LOG_ERROR, "%s: Key %s cannot be 'missing'!", class_name_, Ni_); return GRIB_WRONG_GRID; } - if (grib_is_missing(h, self->Nj, &err) && !err) { - grib_context_log(c, GRIB_LOG_ERROR, "%s: Key %s cannot be 'missing'!", cclass_name, self->Nj); + if (grib_is_missing(h, Nj_, &err) && !err) { + grib_context_log(c, GRIB_LOG_ERROR, "%s: Key %s cannot be 'missing'!", class_name_, Nj_); return GRIB_WRONG_GRID; } - if ((err = grib_get_long_internal(h, self->Ni, &Ni)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, Ni_, &Ni)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(h, self->Nj, &Nj)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, Nj_, &Nj)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(h, self->i_scans_negatively, &iScansNegatively)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, i_scans_negatively_, &iScansNegatively)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(h, self->j_scans_positively, &jScansPositively)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, j_scans_positively_, &jScansPositively)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(h, self->first, &first)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(h, first_, &first)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(h, self->last, &last)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(h, last_, &last)) != GRIB_SUCCESS) return err; - if ((err = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) + if ((err = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) return err; if (size > Ni * Nj) { - grib_context_log(c, GRIB_LOG_ERROR, "%s: Wrong values size!=Ni*Nj (%ld!=%ld*%ld)", cclass_name, size, Ni, Nj); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Wrong values size!=Ni*Nj (%ld!=%ld*%ld)", class_name_, size, Ni, Nj); return GRIB_WRONG_ARRAY_SIZE; } @@ -90,15 +86,15 @@ int grib_accessor_class_change_scanning_direction_t::pack_long(grib_accessor* a, if (!values) return GRIB_OUT_OF_MEMORY; - if ((err = grib_get_double_array_internal(h, self->values, values, &size)) != GRIB_SUCCESS) { + if ((err = grib_get_double_array_internal(h, values_, values, &size)) != GRIB_SUCCESS) { grib_context_free(c, values); return err; } - Assert(self->axis); - Assert(strcmp(self->axis, "x") == 0 || strcmp(self->axis, "y") == 0); + Assert(axis_); + Assert(strcmp(axis_, "x") == 0 || strcmp(axis_, "y") == 0); - if (self->axis[0] == 'x') { + if (axis_[0] == 'x') { theEnd = Ni / 2; for (j = 0; j < Nj; j++) { jr = Ni * j; @@ -111,7 +107,7 @@ int grib_accessor_class_change_scanning_direction_t::pack_long(grib_accessor* a, } } iScansNegatively = !iScansNegatively; - if ((err = grib_set_long_internal(h, self->i_scans_negatively, iScansNegatively)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(h, i_scans_negatively_, iScansNegatively)) != GRIB_SUCCESS) return err; } else { @@ -128,19 +124,19 @@ int grib_accessor_class_change_scanning_direction_t::pack_long(grib_accessor* a, } } jScansPositively = !jScansPositively; - if ((err = grib_set_long_internal(h, self->j_scans_positively, jScansPositively)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(h, j_scans_positively_, jScansPositively)) != GRIB_SUCCESS) return err; } - if ((err = grib_set_double_array_internal(h, self->values, values, size)) != GRIB_SUCCESS) { + if ((err = grib_set_double_array_internal(h, values_, values, size)) != GRIB_SUCCESS) { grib_context_free(c, values); return err; } - if ((err = grib_set_double_internal(h, self->first, last)) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(h, first_, last)) != GRIB_SUCCESS) return err; - if ((err = grib_set_double_internal(h, self->last, first)) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(h, last_, first)) != GRIB_SUCCESS) return err; grib_context_free(c, values); @@ -148,12 +144,12 @@ int grib_accessor_class_change_scanning_direction_t::pack_long(grib_accessor* a, return GRIB_SUCCESS; } -int grib_accessor_class_change_scanning_direction_t::get_native_type(grib_accessor* a) +long grib_accessor_change_scanning_direction_t::get_native_type() { return GRIB_TYPE_LONG; } -int grib_accessor_class_change_scanning_direction_t::unpack_long(grib_accessor* a, long* v, size_t* len) +int grib_accessor_change_scanning_direction_t::unpack_long(long* v, size_t* len) { /* ECC-976: decoding this accessor doesn't make sense so we return a dummy value */ *v = -1; diff --git a/src/accessor/grib_accessor_class_change_scanning_direction.h b/src/accessor/grib_accessor_class_change_scanning_direction.h index ead274485..e26a0e104 100644 --- a/src/accessor/grib_accessor_class_change_scanning_direction.h +++ b/src/accessor/grib_accessor_class_change_scanning_direction.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,24 +15,21 @@ class grib_accessor_change_scanning_direction_t : public grib_accessor_gen_t { public: - /* Members defined in change_scanning_direction */ - const char* values; - const char* Ni; - const char* Nj; - const char* i_scans_negatively; - const char* j_scans_positively; - const char* first; - const char* last; - const char* axis; -}; - -class grib_accessor_class_change_scanning_direction_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_change_scanning_direction_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_change_scanning_direction_t() : + grib_accessor_gen_t() { class_name_ = "change_scanning_direction"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_change_scanning_direction_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; + const char* Ni_ = nullptr; + const char* Nj_ = nullptr; + const char* i_scans_negatively_ = nullptr; + const char* j_scans_positively_ = nullptr; + const char* first_ = nullptr; + const char* last_ = nullptr; + const char* axis_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_check_internal_version.cc b/src/accessor/grib_accessor_class_check_internal_version.cc index 3dc480820..86aec25f3 100644 --- a/src/accessor/grib_accessor_class_check_internal_version.cc +++ b/src/accessor/grib_accessor_class_check_internal_version.cc @@ -10,22 +10,21 @@ #include "grib_accessor_class_check_internal_version.h" -grib_accessor_class_check_internal_version_t _grib_accessor_class_check_internal_version{ "check_internal_version" }; -grib_accessor_class* grib_accessor_class_check_internal_version = &_grib_accessor_class_check_internal_version; - +grib_accessor_check_internal_version_t _grib_accessor_check_internal_version{}; +grib_accessor* grib_accessor_check_internal_version = &_grib_accessor_check_internal_version; /* This is the internal engine version number */ /* We check this against the version number found in the definitions boot.def file */ /* See the key "internalVersion" */ #define LATEST_ENGINE_VERSION 30 -void grib_accessor_class_check_internal_version_t::init(grib_accessor* a, const long l, grib_arguments* args) +void grib_accessor_check_internal_version_t::init(const long l, grib_arguments* args) { - grib_accessor_class_ascii_t::init(a, l, args); + grib_accessor_ascii_t::init(l, args); /* Check version of definition files is compatible with the engine */ int err = 0; long defs_file_version = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); const char* s_defn_version = grib_arguments_get_name(h, args, 0); Assert(s_defn_version); @@ -41,13 +40,13 @@ void grib_accessor_class_check_internal_version_t::init(grib_accessor* a, const } } -int grib_accessor_class_check_internal_version_t::value_count(grib_accessor* a, long* count) +int grib_accessor_check_internal_version_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_check_internal_version_t::string_length(grib_accessor* a) +size_t grib_accessor_check_internal_version_t::string_length() { return 255; } diff --git a/src/accessor/grib_accessor_class_check_internal_version.h b/src/accessor/grib_accessor_class_check_internal_version.h index d37b57282..70517c33f 100644 --- a/src/accessor/grib_accessor_class_check_internal_version.h +++ b/src/accessor/grib_accessor_class_check_internal_version.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,15 +15,10 @@ class grib_accessor_check_internal_version_t : public grib_accessor_ascii_t { public: - /* Members defined in check_internal_version */ -}; - -class grib_accessor_class_check_internal_version_t : public grib_accessor_class_ascii_t -{ -public: - grib_accessor_class_check_internal_version_t(const char* name) : grib_accessor_class_ascii_t(name) {} + grib_accessor_check_internal_version_t() : + grib_accessor_ascii_t() { class_name_ = "check_internal_version"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_check_internal_version_t{}; } - size_t string_length(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + size_t string_length() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_closest_date.cc b/src/accessor/grib_accessor_class_closest_date.cc index 5113de7ae..46db8c1f3 100644 --- a/src/accessor/grib_accessor_class_closest_date.cc +++ b/src/accessor/grib_accessor_class_closest_date.cc @@ -11,51 +11,47 @@ #include "grib_accessor_class_closest_date.h" #include -grib_accessor_class_closest_date_t _grib_accessor_class_closest_date{ "closest_date" }; -grib_accessor_class* grib_accessor_class_closest_date = &_grib_accessor_class_closest_date; +grib_accessor_closest_date_t _grib_accessor_closest_date{}; +grib_accessor* grib_accessor_closest_date = &_grib_accessor_closest_date; - -void grib_accessor_class_closest_date_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_closest_date_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_closest_date_t* self = (grib_accessor_closest_date_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_double_t::init(l, c); + grib_handle* h = grib_handle_of_accessor(this); + int n = 0; - self->dateLocal = grib_arguments_get_name(h, c, n++); - self->timeLocal = grib_arguments_get_name(h, c, n++); - self->numForecasts = grib_arguments_get_name(h, c, n++); - self->year = grib_arguments_get_name(h, c, n++); - self->month = grib_arguments_get_name(h, c, n++); - self->day = grib_arguments_get_name(h, c, n++); - self->hour = grib_arguments_get_name(h, c, n++); - self->minute = grib_arguments_get_name(h, c, n++); - self->second = grib_arguments_get_name(h, c, n++); + dateLocal_ = grib_arguments_get_name(h, c, n++); + timeLocal_ = grib_arguments_get_name(h, c, n++); + numForecasts_ = grib_arguments_get_name(h, c, n++); + year_ = grib_arguments_get_name(h, c, n++); + month_ = grib_arguments_get_name(h, c, n++); + day_ = grib_arguments_get_name(h, c, n++); + hour_ = grib_arguments_get_name(h, c, n++); + minute_ = grib_arguments_get_name(h, c, n++); + second_ = grib_arguments_get_name(h, c, n++); - a->length = 0; + length_ = 0; } -void grib_accessor_class_closest_date_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_closest_date_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } -int grib_accessor_class_closest_date_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_closest_date_t::unpack_long(long* val, size_t* len) { int ret = 0; double v = 0; - ret = unpack_double(a, &v, len); + ret = unpack_double(&v, len); *val = (long)v; return ret; } /* Sets val to the 'index' of the closes date */ -int grib_accessor_class_closest_date_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_closest_date_t::unpack_double(double* val, size_t* len) { - const grib_accessor_closest_date_t* self = (grib_accessor_closest_date_t*)a; - int err = 0; long num_forecasts = 0; /* numberOfForecastsUsedInLocalTime */ /* These relate to the date and time in Section 1 */ @@ -68,56 +64,56 @@ int grib_accessor_class_closest_date_t::unpack_double(grib_accessor* a, double* /* These relate to the forecast dates and times in Section 4 */ long *yearArray, *monthArray, *dayArray, *hourArray, *minuteArray, *secondArray; - grib_handle* h = grib_handle_of_accessor(a); - const grib_context* c = a->context; + grib_handle* h = grib_handle_of_accessor(this); + const grib_context* c = context_; *val = -1; /* initialise to an invalid index */ - if ((err = grib_get_long_internal(h, self->numForecasts, &num_forecasts)) != GRIB_SUCCESS) return err; + if ((err = grib_get_long_internal(h, numForecasts_, &num_forecasts)) != GRIB_SUCCESS) return err; Assert(num_forecasts > 1); - if ((err = grib_get_long(h, self->dateLocal, &ymdLocal)) != GRIB_SUCCESS) return err; + if ((err = grib_get_long(h, dateLocal_, &ymdLocal)) != GRIB_SUCCESS) return err; yearLocal = ymdLocal / 10000; ymdLocal %= 10000; monthLocal = ymdLocal / 100; ymdLocal %= 100; dayLocal = ymdLocal; - if ((err = grib_get_long(h, self->timeLocal, &hmsLocal)) != GRIB_SUCCESS) return err; + if ((err = grib_get_long(h, timeLocal_, &hmsLocal)) != GRIB_SUCCESS) return err; hourLocal = hmsLocal / 100; hmsLocal %= 100; minuteLocal = hmsLocal / 100; hmsLocal %= 100; secondLocal = hmsLocal; - if ((err = grib_get_size(h, self->year, &size)) != GRIB_SUCCESS) return err; + if ((err = grib_get_size(h, year_, &size)) != GRIB_SUCCESS) return err; Assert(size == (size_t)num_forecasts); yearArray = (long*)grib_context_malloc_clear(c, size * sizeof(long)); - if ((err = grib_get_long_array_internal(h, self->year, yearArray, &size)) != GRIB_SUCCESS) return err; + if ((err = grib_get_long_array_internal(h, year_, yearArray, &size)) != GRIB_SUCCESS) return err; - if ((err = grib_get_size(h, self->month, &size)) != GRIB_SUCCESS) return err; + if ((err = grib_get_size(h, month_, &size)) != GRIB_SUCCESS) return err; Assert(size == (size_t)num_forecasts); monthArray = (long*)grib_context_malloc_clear(c, size * sizeof(long)); - if ((err = grib_get_long_array_internal(h, self->month, monthArray, &size)) != GRIB_SUCCESS) return err; + if ((err = grib_get_long_array_internal(h, month_, monthArray, &size)) != GRIB_SUCCESS) return err; - if ((err = grib_get_size(h, self->day, &size)) != GRIB_SUCCESS) return err; + if ((err = grib_get_size(h, day_, &size)) != GRIB_SUCCESS) return err; Assert(size == (size_t)num_forecasts); dayArray = (long*)grib_context_malloc_clear(c, size * sizeof(long)); - if ((err = grib_get_long_array_internal(h, self->day, dayArray, &size)) != GRIB_SUCCESS) return err; + if ((err = grib_get_long_array_internal(h, day_, dayArray, &size)) != GRIB_SUCCESS) return err; - if ((err = grib_get_size(h, self->hour, &size)) != GRIB_SUCCESS) return err; + if ((err = grib_get_size(h, hour_, &size)) != GRIB_SUCCESS) return err; Assert(size == (size_t)num_forecasts); hourArray = (long*)grib_context_malloc_clear(c, size * sizeof(long)); - if ((err = grib_get_long_array_internal(h, self->hour, hourArray, &size)) != GRIB_SUCCESS) return err; + if ((err = grib_get_long_array_internal(h, hour_, hourArray, &size)) != GRIB_SUCCESS) return err; - if ((err = grib_get_size(h, self->minute, &size)) != GRIB_SUCCESS) return err; + if ((err = grib_get_size(h, minute_, &size)) != GRIB_SUCCESS) return err; Assert(size == (size_t)num_forecasts); minuteArray = (long*)grib_context_malloc_clear(c, size * sizeof(long)); - if ((err = grib_get_long_array_internal(h, self->minute, minuteArray, &size)) != GRIB_SUCCESS) return err; + if ((err = grib_get_long_array_internal(h, minute_, minuteArray, &size)) != GRIB_SUCCESS) return err; - if ((err = grib_get_size(h, self->second, &size)) != GRIB_SUCCESS) return err; + if ((err = grib_get_size(h, second_, &size)) != GRIB_SUCCESS) return err; Assert(size == (size_t)num_forecasts); secondArray = (long*)grib_context_malloc_clear(c, size * sizeof(long)); - if ((err = grib_get_long_array_internal(h, self->second, secondArray, &size)) != GRIB_SUCCESS) return err; + if ((err = grib_get_long_array_internal(h, second_, secondArray, &size)) != GRIB_SUCCESS) return err; grib_datetime_to_julian(yearLocal, monthLocal, dayLocal, hourLocal, minuteLocal, secondLocal, &jLocal); for (i = 0; i < size; ++i) { diff --git a/src/accessor/grib_accessor_class_closest_date.h b/src/accessor/grib_accessor_class_closest_date.h index ebd3cb6d4..cea1c9b87 100644 --- a/src/accessor/grib_accessor_class_closest_date.h +++ b/src/accessor/grib_accessor_class_closest_date.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,25 +15,22 @@ class grib_accessor_closest_date_t : public grib_accessor_double_t { public: - /* Members defined in closest_date */ - const char *dateLocal; - const char *timeLocal; - const char *numForecasts; - const char *year; - const char *month; - const char *day; - const char *hour; - const char *minute; - const char *second; -}; - -class grib_accessor_class_closest_date_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_closest_date_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_closest_date_t() : + grib_accessor_double_t() { class_name_ = "closest_date"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_closest_date_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* dateLocal_ = nullptr; + const char* timeLocal_ = nullptr; + const char* numForecasts_ = nullptr; + const char* year_ = nullptr; + const char* month_ = nullptr; + const char* day_ = nullptr; + const char* hour_ = nullptr; + const char* minute_ = nullptr; + const char* second_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_codeflag.cc b/src/accessor/grib_accessor_class_codeflag.cc index 49f291d77..07435e6c4 100644 --- a/src/accessor/grib_accessor_class_codeflag.cc +++ b/src/accessor/grib_accessor_class_codeflag.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,17 +10,15 @@ #include "grib_accessor_class_codeflag.h" -grib_accessor_class_codeflag_t _grib_accessor_class_codeflag{ "codeflag" }; -grib_accessor_class* grib_accessor_class_codeflag = &_grib_accessor_class_codeflag; +grib_accessor_codeflag_t _grib_accessor_codeflag{}; +grib_accessor* grib_accessor_codeflag = &_grib_accessor_codeflag; - -void grib_accessor_class_codeflag_t::init(grib_accessor* a, const long len, grib_arguments* param) +void grib_accessor_codeflag_t::init(const long len, grib_arguments* param) { - grib_accessor_class_unsigned_t::init(a, len, param); - grib_accessor_codeflag_t* self = (grib_accessor_codeflag_t*)a; - a->length = len; - self->tablename = grib_arguments_get_string(grib_handle_of_accessor(a), param, 0); - Assert(a->length >= 0); + grib_accessor_unsigned_t::init(len, param); + length_ = len; + tablename_ = grib_arguments_get_string(grib_handle_of_accessor(this), param, 0); + Assert(length_ >= 0); } static int test_bit(long a, long b) @@ -30,10 +27,9 @@ static int test_bit(long a, long b) return a & (1 << b); } -static int grib_get_codeflag(grib_accessor* a, long code, char* codename) +int grib_accessor_codeflag_t::grib_get_codeflag(long code, char* codename) { - const grib_accessor_codeflag_t* self = (grib_accessor_codeflag_t*)a; - FILE* f = NULL; + FILE* f = NULL; char fname[1024]; char bval[50]; char num[50]; @@ -43,26 +39,26 @@ static int grib_get_codeflag(grib_accessor* a, long code, char* codename) int j = 0; int err = 0; - err = grib_recompose_name(grib_handle_of_accessor(a), NULL, self->tablename, fname, 1); + err = grib_recompose_name(grib_handle_of_accessor(this), NULL, tablename_, fname, 1); if (err) { - strncpy(fname, self->tablename, sizeof(fname) - 1); + strncpy(fname, tablename_, sizeof(fname) - 1); fname[sizeof(fname) - 1] = '\0'; } - if ((filename = grib_context_full_defs_path(a->context, fname)) == NULL) { - grib_context_log(a->context, GRIB_LOG_WARNING, "Cannot open flag table %s", filename); + if ((filename = grib_context_full_defs_path(context_, fname)) == NULL) { + grib_context_log(context_, GRIB_LOG_WARNING, "Cannot open flag table %s", filename); strcpy(codename, "Cannot open flag table"); return GRIB_FILE_NOT_FOUND; } f = codes_fopen(filename, "r"); if (!f) { - grib_context_log(a->context, (GRIB_LOG_WARNING) | (GRIB_LOG_PERROR), "Cannot open flag table %s", filename); + grib_context_log(context_, (GRIB_LOG_WARNING) | (GRIB_LOG_PERROR), "Cannot open flag table %s", filename); strcpy(codename, "Cannot open flag table"); return GRIB_FILE_NOT_FOUND; } - // strcpy(codename, self->tablename); + // strcpy(codename, tablename_ ); // strcat(codename,": "); // j = strlen(codename); @@ -70,7 +66,7 @@ static int grib_get_codeflag(grib_accessor* a, long code, char* codename) sscanf(line, "%49s %49s", num, bval); if (num[0] != '#') { - if ((test_bit(code, a->length * 8 - atol(num)) > 0) == atol(bval)) { + if ((test_bit(code, length_ * 8 - atol(num)) > 0) == atol(bval)) { size_t linelen = strlen(line); codename[j++] = '('; codename[j++] = num[0]; @@ -99,24 +95,23 @@ static int grib_get_codeflag(grib_accessor* a, long code, char* codename) return GRIB_SUCCESS; } -int grib_accessor_class_codeflag_t::value_count(grib_accessor* a, long* count) +int grib_accessor_codeflag_t::value_count(long* count) { *count = 1; return 0; } -void grib_accessor_class_codeflag_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_codeflag_t::dump(grib_dumper* dumper) { - const grib_accessor_codeflag_t* self = (grib_accessor_codeflag_t*)a; - long v = 0; + long v = 0; char flagname[1024] = {0,}; char fname[1024] = {0,}; size_t llen = 1; - grib_recompose_name(grib_handle_of_accessor(a), NULL, self->tablename, fname, 1); - a->unpack_long(&v, &llen); - grib_get_codeflag(a, v, flagname); + grib_recompose_name(grib_handle_of_accessor(this), NULL, tablename_, fname, 1); + unpack_long(&v, &llen); + grib_get_codeflag(v, flagname); - grib_dump_bits(dumper, a, flagname); + grib_dump_bits(dumper, this, flagname); } diff --git a/src/accessor/grib_accessor_class_codeflag.h b/src/accessor/grib_accessor_class_codeflag.h index 82c8cc77b..9aa8f62a0 100644 --- a/src/accessor/grib_accessor_class_codeflag.h +++ b/src/accessor/grib_accessor_class_codeflag.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,15 @@ class grib_accessor_codeflag_t : public grib_accessor_unsigned_t { public: - /* Members defined in codeflag */ - const char* tablename; -}; - -class grib_accessor_class_codeflag_t : public grib_accessor_class_unsigned_t -{ -public: - grib_accessor_class_codeflag_t(const char* name) : grib_accessor_class_unsigned_t(name) {} + grib_accessor_codeflag_t() : + grib_accessor_unsigned_t() { class_name_ = "codeflag"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_codeflag_t{}; } - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* tablename_ = nullptr; + + int grib_get_codeflag(long code, char* codename); }; diff --git a/src/accessor/grib_accessor_class_codetable.cc b/src/accessor/grib_accessor_class_codetable.cc index 9a9df9040..af9fce6fd 100644 --- a/src/accessor/grib_accessor_class_codetable.cc +++ b/src/accessor/grib_accessor_class_codetable.cc @@ -11,10 +11,8 @@ #include "grib_accessor_class_codetable.h" #include - -grib_accessor_class_codetable_t _grib_accessor_class_codetable("codetable"); -grib_accessor_class* grib_accessor_class_codetable = &_grib_accessor_class_codetable; - +grib_accessor_codetable_t _grib_accessor_codetable{}; +grib_accessor* grib_accessor_codetable = &_grib_accessor_codetable; #if GRIB_PTHREADS static pthread_once_t once = PTHREAD_ONCE_INIT; @@ -34,7 +32,7 @@ static omp_nest_lock_t mutex1; static void init_mutex() { - GRIB_OMP_CRITICAL(lock_grib_accessor_class_codetable_c) + GRIB_OMP_CRITICAL(lock_grib_accessor_codetable_c) { if (once == 0) { omp_init_nest_lock(&mutex1); @@ -46,16 +44,17 @@ static void init_mutex() static int grib_load_codetable(grib_context* c, const char* filename, const char* recomposed_name, size_t size, grib_codetable* t); -void grib_accessor_class_codetable_t::init(grib_accessor* a, const long len, grib_arguments* params) +void grib_accessor_codetable_t::init(const long len, grib_arguments* params) { - grib_accessor_class_unsigned_t::init(a, len, params); + grib_accessor_unsigned_t::init(len, params); - int n = 0; - long new_len = len; - grib_handle* hand = grib_handle_of_accessor(a); - grib_accessor_codetable_t* self = (grib_accessor_codetable_t*)a; - grib_action* act = (grib_action*)(a->creator); - DEBUG_ASSERT(len == self->nbytes); + int n = 0; + long new_len = len; + grib_handle* hand = grib_handle_of_accessor(this); + grib_action* act = (grib_action*)(creator_); + DEBUG_ASSERT(len == nbytes_); + table_ = NULL; + table_loaded_ = 0; if (new_len == 0) { /* ECC-485: When the codetable length is 0, it means we are passing @@ -64,33 +63,33 @@ void grib_accessor_class_codetable_t::init(grib_accessor* a, const long len, gri */ new_len = grib_arguments_get_long(hand, params, n++); if (new_len <= 0) { - grib_context_log(a->context, GRIB_LOG_FATAL, "%s: codetable length must be a positive integer", a->name); + grib_context_log(context_, GRIB_LOG_FATAL, "%s: codetable length must be a positive integer", name_); } - self->nbytes = new_len; + nbytes_ = new_len; } - self->tablename = grib_arguments_get_string(hand, params, n++); - if (self->tablename == NULL) { - grib_context_log(a->context, GRIB_LOG_FATAL, "%s: codetable table is invalid", a->name); + tablename_ = grib_arguments_get_string(hand, params, n++); + if (tablename_ == NULL) { + grib_context_log(context_, GRIB_LOG_FATAL, "%s: codetable table is invalid", name_); } - self->masterDir = grib_arguments_get_name(hand, params, n++); /* can be NULL */ - self->localDir = grib_arguments_get_name(hand, params, n++); /* can be NULL */ + masterDir_ = grib_arguments_get_name(hand, params, n++); /* can be NULL */ + localDir_ = grib_arguments_get_name(hand, params, n++); /* can be NULL */ - /*if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) - printf("-------- %s type string (%ld)\n",a->name,a->flags);*/ + /*if (flags_ & GRIB_ACCESSOR_FLAG_STRING_TYPE) + printf("-------- %s type string (%ld)\n",a->name,flags_ );*/ #ifdef DEBUG - if (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { - grib_context_log(a->context, GRIB_LOG_FATAL, "codetable '%s' has flag can_be_missing!", a->name); + if (flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { + grib_context_log(context_, GRIB_LOG_FATAL, "codetable '%s' has flag can_be_missing!", name_); Assert(!"codetable with can_be_missing?"); } #endif - if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { - a->length = 0; - if (!a->vvalue) - a->vvalue = (grib_virtual_value*)grib_context_malloc_clear(a->context, sizeof(grib_virtual_value)); - a->vvalue->type = a->get_native_type(); - a->vvalue->length = new_len; + if (flags_ & GRIB_ACCESSOR_FLAG_TRANSIENT) { + length_ = 0; + if (!vvalue_) + vvalue_ = (grib_virtual_value*)grib_context_malloc_clear(context_, sizeof(grib_virtual_value)); + vvalue_->type = get_native_type(); + vvalue_->length = new_len; if (act->default_value != NULL) { const char* p = 0; size_t s_len = 1; @@ -103,29 +102,29 @@ void grib_accessor_class_codetable_t::init(grib_accessor* a, const long len, gri switch (type) { case GRIB_TYPE_DOUBLE: grib_expression_evaluate_double(hand, expression, &d); - a->pack_double(&d, &s_len); + pack_double(&d, &s_len); break; case GRIB_TYPE_LONG: - grib_expression_evaluate_long(grib_handle_of_accessor(a), expression, &l); - a->pack_long(&l, &s_len); + grib_expression_evaluate_long(grib_handle_of_accessor(this), expression, &l); + pack_long(&l, &s_len); break; default: s_len = sizeof(tmp); - p = grib_expression_evaluate_string(grib_handle_of_accessor(a), expression, tmp, &s_len, &ret); + p = grib_expression_evaluate_string(grib_handle_of_accessor(this), expression, tmp, &s_len, &ret); if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_FATAL, - "Unable to evaluate %s as string", a->name); + grib_context_log(context_, GRIB_LOG_FATAL, + "Unable to evaluate %s as string", name_); } s_len = strlen(p) + 1; - pack_string(a, p, &s_len); + pack_string(p, &s_len); break; } } } else { - a->length = new_len; + length_ = new_len; } } @@ -164,43 +163,43 @@ static void dump_codetable(grib_codetable* atable) } } #endif -static grib_codetable* load_table(grib_accessor* a) + +grib_codetable* grib_accessor_codetable_t::load_table() { - grib_accessor_codetable_t* self = (grib_accessor_codetable_t*)a; - size_t size = 0; - grib_handle* h = ((grib_accessor*)self)->parent->h; - grib_context* c = h->context; - grib_codetable* t = NULL; - grib_codetable* next = NULL; - char* filename = 0; - char recomposed[1024] = {0,}; + size_t size = 0; + grib_handle* h = parent_->h; + grib_context* c = h->context; + grib_codetable* t = NULL; + grib_codetable* next = NULL; + char* filename = 0; + char recomposed[1024] = {0,}; char localRecomposed[1024] = {0,}; char* localFilename = 0; char masterDir[1024] = {0,}; char localDir[1024] = {0,}; size_t len = 1024; - if (self->masterDir != NULL) - grib_get_string(h, self->masterDir, masterDir, &len); + if (masterDir_ != NULL) + grib_get_string(h, masterDir_, masterDir, &len); len = 1024; - if (self->localDir != NULL) - grib_get_string(h, self->localDir, localDir, &len); + if (localDir_ != NULL) + grib_get_string(h, localDir_, localDir, &len); if (*masterDir != 0) { char name[2048] = {0,}; - snprintf(name, sizeof(name), "%s/%s", masterDir, self->tablename); + snprintf(name, sizeof(name), "%s/%s", masterDir, tablename_); grib_recompose_name(h, NULL, name, recomposed, 0); filename = grib_context_full_defs_path(c, recomposed); } else { - grib_recompose_name(h, NULL, self->tablename, recomposed, 0); + grib_recompose_name(h, NULL, tablename_, recomposed, 0); filename = grib_context_full_defs_path(c, recomposed); } if (*localDir != 0) { char localName[2048] = {0,}; - snprintf(localName, sizeof(localName), "%s/%s", localDir, self->tablename); + snprintf(localName, sizeof(localName), "%s/%s", localDir, tablename_); grib_recompose_name(h, NULL, localName, localRecomposed, 0); localFilename = grib_context_full_defs_path(c, localRecomposed); } @@ -208,7 +207,7 @@ static grib_codetable* load_table(grib_accessor* a) GRIB_MUTEX_INIT_ONCE(&once, &init_mutex); GRIB_MUTEX_LOCK(&mutex1); /* GRIB-930 */ - /*printf("DBG %s: Look in cache: f=%s lf=%s (recomposed=%s)\n", self->att.name, filename, localFilename,recomposed);*/ + /*printf("DBG %s: Look in cache: f=%s lf=%s (recomposed=%s)\n", att_ .name, filename, localFilename,recomposed);*/ if (filename == NULL && localFilename == NULL) { t = NULL; goto the_end; @@ -232,12 +231,12 @@ static grib_codetable* load_table(grib_accessor* a) next = next->next; } - if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { - Assert(a->vvalue != NULL); - size = a->vvalue->length * 8; + if (flags_ & GRIB_ACCESSOR_FLAG_TRANSIENT) { + Assert(vvalue_ != NULL); + size = vvalue_->length * 8; } else { - size = ((grib_accessor*)self)->byte_count() * 8; + size = byte_count() * 8; } size = (1ULL << size); /* 2^size - 64bits */ @@ -421,34 +420,34 @@ void grib_codetable_delete(grib_context* c) int codes_codetable_get_contents_malloc(const grib_handle* h, const char* key, code_table_entry** entries, size_t* num_entries) { - long lvalue = 0; - size_t size = 1; - int err = 0; + long lvalue = 0; + size_t size = 1; + int err = 0; grib_context* c = h->context; grib_accessor* aa = grib_find_accessor(h, key); if (!aa) return GRIB_NOT_FOUND; - if (!STR_EQUAL(aa->cclass->name, "codetable")) { - return GRIB_INVALID_ARGUMENT; // key is not a codetable + if (!STR_EQUAL(aa->class_name_, "codetable")) { + return GRIB_INVALID_ARGUMENT; // key is not a codetable } - const grib_accessor_codetable_t* ca = (const grib_accessor_codetable_t*)aa; // could be dynamic_cast + const grib_accessor_codetable_t* ca = (const grib_accessor_codetable_t*)aa; // could be dynamic_cast // Decode the key itself. This will either fetch it from the cache or place it there if ((err = aa->unpack_long(&lvalue, &size)) != GRIB_SUCCESS) { return err; } - const grib_codetable* table = ca->table; + const grib_codetable* table = ca->codetable(); if (!table) return GRIB_INTERNAL_ERROR; - grib_codetable* cached_table = c->codetable; // Access the codetable cache + grib_codetable* cached_table = c->codetable; // Access the codetable cache while (cached_table) { if (STR_EQUAL(table->recomposed_name[0], cached_table->recomposed_name[0])) { // Found a cache entry that matches the recomposed name of ours *num_entries = cached_table->size; - *entries = (code_table_entry*)calloc(cached_table->size, sizeof(code_table_entry)); + *entries = (code_table_entry*)calloc(cached_table->size, sizeof(code_table_entry)); if (!*entries) { return GRIB_OUT_OF_MEMORY; } @@ -466,9 +465,9 @@ int codes_codetable_get_contents_malloc(const grib_handle* h, const char* key, c int codes_codetable_check_code_figure(const grib_handle* h, const char* key, long code_figure) { code_table_entry* entries = NULL; - size_t num_entries = 0; - int err = 0; - err = codes_codetable_get_contents_malloc(h, key, &entries, &num_entries); + size_t num_entries = 0; + int err = 0; + err = codes_codetable_get_contents_malloc(h, key, &entries, &num_entries); if (err) return err; if (code_figure < 0 || (size_t)code_figure >= num_entries) { @@ -488,13 +487,13 @@ cleanup: int codes_codetable_check_abbreviation(const grib_handle* h, const char* key, const char* abbreviation) { code_table_entry* entries = NULL; - size_t num_entries = 0; - int err = 0; - err = codes_codetable_get_contents_malloc(h, key, &entries, &num_entries); + size_t num_entries = 0; + int err = 0; + err = codes_codetable_get_contents_malloc(h, key, &entries, &num_entries); if (err) return err; bool found = false; - for (size_t i=0; itable_loaded) { - self->table = load_table(a); /* may return NULL */ - self->table_loaded = 1; + if (!table_loaded_) { + table_ = load_table(); /* may return NULL */ + table_loaded_ = 1; } - table = self->table; + table = table_; - a->unpack_long(&value, &llen); + unpack_long(&value, &llen); if (value == GRIB_MISSING_LONG) { - if (a->length < 4) { - value = (1L << a->length) - 1; + if (length_ < 4) { + value = (1L << length_) - 1; } } @@ -562,13 +560,12 @@ void grib_accessor_class_codetable_t::dump(grib_accessor* a, grib_dumper* dumper } strcat(comment, ") "); - grib_dump_long(dumper, a, comment); + grib_dump_long(dumper, this, comment); } -int grib_accessor_class_codetable_t::unpack_string(grib_accessor* a, char* buffer, size_t* len) +int grib_accessor_codetable_t::unpack_string(char* buffer, size_t* len) { - grib_accessor_codetable_t* self = (grib_accessor_codetable_t*)a; - grib_codetable* table = NULL; + grib_codetable* table = NULL; size_t size = 1; long value; @@ -576,14 +573,14 @@ int grib_accessor_class_codetable_t::unpack_string(grib_accessor* a, char* buffe char tmp[1024]; size_t l = 0; - if ((err = a->unpack_long(&value, &size)) != GRIB_SUCCESS) + if ((err = unpack_long(&value, &size)) != GRIB_SUCCESS) return err; - if (!self->table_loaded) { - self->table = load_table(a); /* may return NULL */ - self->table_loaded = 1; + if (!table_loaded_) { + table_ = load_table(); /* may return NULL */ + table_loaded_ = 1; } - table = self->table; + table = table_; if (table && (value >= 0) && (value < table->size) && table->entries[value].abbreviation) { strcpy(tmp, table->entries[value].abbreviation); @@ -595,10 +592,9 @@ int grib_accessor_class_codetable_t::unpack_string(grib_accessor* a, char* buffe l = strlen(tmp) + 1; if (*len < l) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, l, *len); + class_name_, name_, l, *len); *len = l; return GRIB_BUFFER_TOO_SMALL; } @@ -609,7 +605,7 @@ int grib_accessor_class_codetable_t::unpack_string(grib_accessor* a, char* buffe return GRIB_SUCCESS; } -int grib_accessor_class_codetable_t::value_count(grib_accessor* a, long* count) +int grib_accessor_codetable_t::value_count(long* count) { *count = 1; return 0; @@ -632,36 +628,35 @@ bool strings_equal(const char* s1, const char* s2, bool case_sensitive) return (strcmp_nocase(s1, s2) == 0); } -int grib_accessor_class_codetable_t::pack_string(grib_accessor* a, const char* buffer, size_t* len) +int grib_accessor_codetable_t::pack_string(const char* buffer, size_t* len) { long lValue = 0; Assert(buffer); if (is_number(buffer) && string_to_long(buffer, &lValue, 1) == GRIB_SUCCESS) { // ECC-1654: If value is a pure number, just pack as long size_t l = 1; - return a->pack_long(&lValue, &l); + return pack_long(&lValue, &l); } if (STR_EQUAL_NOCASE(buffer, "missing")) { - return pack_missing(a); + return pack_missing(); } - grib_accessor_codetable_t* self = (grib_accessor_codetable_t*)a; grib_codetable* table = NULL; - long i = 0; - size_t size = 1; + long i = 0; + size_t size = 1; - if (!self->table_loaded) { - self->table = load_table(a); /* may return NULL */ - self->table_loaded = 1; + if (!table_loaded_) { + table_ = load_table(); /* may return NULL */ + table_loaded_ = 1; } - table = self->table; + table = table_; if (!table) return GRIB_ENCODING_ERROR; - if (a->set) { - int err = grib_set_string(grib_handle_of_accessor(a), a->set, buffer, len); + if (set_) { + int err = grib_set_string(grib_handle_of_accessor(this), set_, buffer, len); if (err != 0) return err; } @@ -669,48 +664,48 @@ int grib_accessor_class_codetable_t::pack_string(grib_accessor* a, const char* b // If the key has the "lowercase" flag set, then the string comparison // should ignore the case bool case_sensitive = true; - if (a->flags & GRIB_ACCESSOR_FLAG_LOWERCASE) case_sensitive = false; + if (flags_ & GRIB_ACCESSOR_FLAG_LOWERCASE) case_sensitive = false; for (i = 0; i < table->size; i++) { if (table->entries[i].abbreviation) { if (strings_equal(table->entries[i].abbreviation, buffer, case_sensitive)) { - return a->pack_long(&i, &size); + return pack_long(&i, &size); } } } - if (a->flags & GRIB_ACCESSOR_FLAG_NO_FAIL) { - grib_action* act = (grib_action*)(a->creator); + if (flags_ & GRIB_ACCESSOR_FLAG_NO_FAIL) { + grib_action* act = (grib_action*)(creator_); if (act->default_value != NULL) { - const char* p = 0; - size_t s_len = 1; - long l = 0; - int ret = 0; - double d = 0; + const char* p = 0; + size_t s_len = 1; + long l = 0; + int ret = 0; + double d = 0; char tmp[1024] = {0,}; - grib_expression* expression = grib_arguments_get_expression(grib_handle_of_accessor(a), act->default_value, 0); - int type = grib_expression_native_type(grib_handle_of_accessor(a), expression); + grib_expression* expression = grib_arguments_get_expression(grib_handle_of_accessor(this), act->default_value, 0); + int type = grib_expression_native_type(grib_handle_of_accessor(this), expression); switch (type) { case GRIB_TYPE_DOUBLE: - grib_expression_evaluate_double(grib_handle_of_accessor(a), expression, &d); - a->pack_double(&d, &s_len); + grib_expression_evaluate_double(grib_handle_of_accessor(this), expression, &d); + pack_double(&d, &s_len); break; case GRIB_TYPE_LONG: - grib_expression_evaluate_long(grib_handle_of_accessor(a), expression, &l); - a->pack_long(&l, &s_len); + grib_expression_evaluate_long(grib_handle_of_accessor(this), expression, &l); + pack_long(&l, &s_len); break; default: s_len = sizeof(tmp); - p = grib_expression_evaluate_string(grib_handle_of_accessor(a), expression, tmp, &s_len, &ret); + p = grib_expression_evaluate_string(grib_handle_of_accessor(this), expression, tmp, &s_len, &ret); if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s: Unable to evaluate default value of %s as string expression", __func__, a->name); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s: Unable to evaluate default value of %s as string expression", __func__, name_); return ret; } s_len = strlen(p) + 1; - pack_string(a, p, &s_len); + pack_string(p, &s_len); break; } return GRIB_SUCCESS; @@ -721,10 +716,10 @@ int grib_accessor_class_codetable_t::pack_string(grib_accessor* a, const char* b for (i = 0; i < table->size; i++) { if (table->entries[i].abbreviation) { if (strcmp_nocase(table->entries[i].abbreviation, buffer) == 0) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: No such code table entry: '%s' " "(Did you mean '%s'?)", - a->name, buffer, table->entries[i].abbreviation); + name_, buffer, table->entries[i].abbreviation); } } } @@ -732,124 +727,122 @@ int grib_accessor_class_codetable_t::pack_string(grib_accessor* a, const char* b return GRIB_ENCODING_ERROR; } -int grib_accessor_class_codetable_t::pack_expression(grib_accessor* a, grib_expression* e) +int grib_accessor_codetable_t::pack_expression(grib_expression* e) { const char* cval = NULL; int ret = 0; long lval = 0; size_t len = 1; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); if (strcmp(e->cclass->name, "long") == 0) { grib_expression_evaluate_long(hand, e, &lval); /* TODO: check return value */ - //if (hand->context->debug) printf("ECCODES DEBUG grib_accessor_class_codetable::pack_expression %s %ld\n", a->name,lval); - ret = a->pack_long(&lval, &len); + // if (hand->context->debug) printf("ECCODES DEBUG grib_accessor_codetable::pack_expression %s %ld\n", name_ ,lval); + ret = pack_long(&lval, &len); } else { char tmp[1024]; len = sizeof(tmp); cval = grib_expression_evaluate_string(hand, e, tmp, &len, &ret); if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "grib_accessor_codetable.%s: Unable to evaluate string %s to be set in %s", - __func__, grib_expression_get_name(e), a->name); + grib_context_log(context_, GRIB_LOG_ERROR, + "grib_accessor_codetable.%s: Unable to evaluate string %s to be set in %s", + __func__, grib_expression_get_name(e), name_); return ret; } len = strlen(cval) + 1; - //if (hand->context->debug) - // printf("ECCODES DEBUG grib_accessor_class_codetable::pack_expression %s %s\n", a->name, cval); - ret = a->pack_string(cval, &len); + // if (hand->context->debug) + // printf("ECCODES DEBUG grib_accessor_codetable::pack_expression %s %s\n", name_ , cval); + ret = pack_string(cval, &len); } return ret; } -void grib_accessor_class_codetable_t::destroy(grib_context* context, grib_accessor* a) +void grib_accessor_codetable_t::destroy(grib_context* context) { - if (a->vvalue != NULL) { - grib_context_free(context, a->vvalue); - a->vvalue = NULL; + if (vvalue_ != NULL) { + grib_context_free(context, vvalue_); + vvalue_ = NULL; } - grib_accessor_class_unsigned_t::destroy(context, a); + grib_accessor_unsigned_t::destroy(context); } -int grib_accessor_class_codetable_t::get_native_type(grib_accessor* a) +long grib_accessor_codetable_t::get_native_type() { int type = GRIB_TYPE_LONG; /*printf("---------- %s flags=%ld GRIB_ACCESSOR_FLAG_STRING_TYPE=%d\n", - a->name,a->flags,GRIB_ACCESSOR_FLAG_STRING_TYPE);*/ - if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) + a->name,flags_ ,GRIB_ACCESSOR_FLAG_STRING_TYPE);*/ + if (flags_ & GRIB_ACCESSOR_FLAG_STRING_TYPE) type = GRIB_TYPE_STRING; return type; } -int grib_accessor_class_codetable_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_codetable_t::unpack_long(long* val, size_t* len) { - grib_accessor_codetable_t* self = (grib_accessor_codetable_t*)a; long rlen = 0, i = 0; - long pos = a->offset * 8; + long pos = offset_ * 8; grib_handle* hand = NULL; #ifdef DEBUG { - int err = a->value_count(&rlen); + int err = value_count(&rlen); Assert(!err); Assert(rlen == 1); } #endif rlen = 1; /* ECC-480 Performance: avoid func call overhead of grib_value_count */ - if (!self->table_loaded) { - self->table = load_table(a); /* may return NULL */ - self->table_loaded = 1; + if (!table_loaded_) { + table_ = load_table(); /* may return NULL */ + table_loaded_ = 1; } if (*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size (%lu) for %s, it contains %ld values", - *len, a->name, rlen); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size (%lu) for %s, it contains %ld values", + *len, name_, rlen); *len = 0; return GRIB_ARRAY_TOO_SMALL; } - if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { - *val = a->vvalue->lval; + if (flags_ & GRIB_ACCESSOR_FLAG_TRANSIENT) { + *val = vvalue_->lval; *len = 1; return GRIB_SUCCESS; } /* ECC-480 Performance: inline the grib_handle_of_accessor here to reduce func call overhead */ - if (a->parent == NULL) - hand = a->h; + if (parent_ == NULL) + hand = h_; else - hand = a->parent->h; + hand = parent_->h; for (i = 0; i < rlen; i++) { - val[i] = (long)grib_decode_unsigned_long(hand->buffer->data, &pos, self->nbytes * 8); + val[i] = (long)grib_decode_unsigned_long(hand->buffer->data, &pos, nbytes_ * 8); } *len = rlen; return GRIB_SUCCESS; } -int grib_accessor_class_codetable_t::pack_missing(grib_accessor* a) +int grib_accessor_codetable_t::pack_missing() { // Many of the code tables do have a 'Missing' entry (all bits = 1) // So it is more user-friendly to allow setting codetable keys to // missing. For tables that do not have such an entry, an error is issued - grib_accessor_codetable_t* self = (grib_accessor_codetable_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); - const long nbytes = a->length; - const long nbits = nbytes*8; - const long maxVal = (1<name, maxVal); + int err = codes_codetable_check_code_figure(h, name_, maxVal); if (!err) { size_t l = 1; - return a->pack_long(&maxVal, &l); + return pack_long(&maxVal, &l); } - grib_context_log(a->context, GRIB_LOG_ERROR, "There is no 'missing' entry in Code Table %s (%s)", - self->tablename, grib_get_error_message(err)); + grib_context_log(context_, GRIB_LOG_ERROR, "There is no 'missing' entry in Code Table %s (%s)", + tablename_, grib_get_error_message(err)); return err; } diff --git a/src/accessor/grib_accessor_class_codetable.h b/src/accessor/grib_accessor_class_codetable.h index 8a16d9113..cc8e36b3d 100644 --- a/src/accessor/grib_accessor_class_codetable.h +++ b/src/accessor/grib_accessor_class_codetable.h @@ -15,27 +15,29 @@ class grib_accessor_codetable_t : public grib_accessor_unsigned_t { -public: - const char* tablename; - const char* masterDir; - const char* localDir; - grib_codetable* table; - int table_loaded; -}; - -class grib_accessor_class_codetable_t : public grib_accessor_class_unsigned_t -{ public: grib_accessor* create_empty_accessor() override { return new grib_accessor_codetable_t{}; } - grib_accessor_class_codetable_t(const char* name) : grib_accessor_class_unsigned_t(name) {} - int get_native_type(grib_accessor*) override; - int pack_missing(grib_accessor*) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int pack_expression(grib_accessor*, grib_expression*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + grib_accessor_codetable_t() : + grib_accessor_unsigned_t() { class_name_ = "codetable"; } + long get_native_type() override; + int pack_missing() override; + int pack_string(const char*, size_t* len) override; + int pack_expression(grib_expression*) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + + grib_codetable* codetable() const { return table_; } + +private: + grib_codetable* table_ = nullptr; + const char* tablename_ = nullptr; + const char* masterDir_ = nullptr; + const char* localDir_ = nullptr; + int table_loaded_ = 0; + + grib_codetable* load_table(); }; diff --git a/src/accessor/grib_accessor_class_codetable_title.cc b/src/accessor/grib_accessor_class_codetable_title.cc index 2bcdfd215..6e247ad1b 100644 --- a/src/accessor/grib_accessor_class_codetable_title.cc +++ b/src/accessor/grib_accessor_class_codetable_title.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -12,27 +11,25 @@ #include "grib_accessor_class_codetable_title.h" #include "grib_accessor_class_codetable.h" -grib_accessor_class_codetable_title_t _grib_accessor_class_codetable_title{ "codetable_title" }; -grib_accessor_class* grib_accessor_class_codetable_title = &_grib_accessor_class_codetable_title; +grib_accessor_codetable_title_t _grib_accessor_codetable_title{}; +grib_accessor* grib_accessor_codetable_title = &_grib_accessor_codetable_title; -void grib_accessor_class_codetable_title_t::init(grib_accessor* a, const long len, grib_arguments* params) +void grib_accessor_codetable_title_t::init(const long len, grib_arguments* params) { - grib_accessor_class_gen_t::init(a, len, params); - grib_accessor_codetable_title_t* self = (grib_accessor_codetable_title_t*)a; - int n = 0; - self->codetable = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_gen_t::init(len, params); + int n = 0; + codetable_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_codetable_title_t::get_native_type(grib_accessor* a) +long grib_accessor_codetable_title_t::get_native_type() { return GRIB_TYPE_STRING; } -int grib_accessor_class_codetable_title_t::unpack_string(grib_accessor* a, char* buffer, size_t* len) +int grib_accessor_codetable_title_t::unpack_string(char* buffer, size_t* len) { - grib_accessor_codetable_title_t* self = (grib_accessor_codetable_title_t*)a; grib_codetable* table = NULL; size_t size = 1; @@ -40,12 +37,12 @@ int grib_accessor_class_codetable_title_t::unpack_string(grib_accessor* a, char* int err = GRIB_SUCCESS; char tmp[1024]; size_t l = 1024; - grib_accessor_codetable_t* ca = (grib_accessor_codetable_t*)grib_find_accessor(grib_handle_of_accessor(a), self->codetable); + grib_accessor_codetable_t* ca = (grib_accessor_codetable_t*)grib_find_accessor(grib_handle_of_accessor(this), codetable_); if ((err = ((grib_accessor*)ca)->unpack_long(&value, &size)) != GRIB_SUCCESS) return err; - table = ca->table; + table = ca->codetable(); if (table && (value >= 0) && (value < table->size) && table->entries[value].title) { strcpy(tmp, table->entries[value].title); @@ -57,10 +54,9 @@ int grib_accessor_class_codetable_title_t::unpack_string(grib_accessor* a, char* l = strlen(tmp) + 1; if (*len < l) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, l, *len); + class_name_, name_, l, *len); *len = l; return GRIB_BUFFER_TOO_SMALL; } diff --git a/src/accessor/grib_accessor_class_codetable_title.h b/src/accessor/grib_accessor_class_codetable_title.h index f820c585c..625d15aef 100644 --- a/src/accessor/grib_accessor_class_codetable_title.h +++ b/src/accessor/grib_accessor_class_codetable_title.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_codetable_title_t : public grib_accessor_gen_t { public: - /* Members defined in codetable_title */ - const char* codetable; -}; - -class grib_accessor_class_codetable_title_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_codetable_title_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_codetable_title_t() : + grib_accessor_gen_t() { class_name_ = "codetable_title"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_codetable_title_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_string(char*, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* codetable_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_codetable_units.cc b/src/accessor/grib_accessor_class_codetable_units.cc index cc91ae2e2..279de14f6 100644 --- a/src/accessor/grib_accessor_class_codetable_units.cc +++ b/src/accessor/grib_accessor_class_codetable_units.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -12,41 +11,39 @@ #include "grib_accessor_class_codetable_units.h" #include "grib_accessor_class_codetable.h" -grib_accessor_class_codetable_units_t _grib_accessor_class_codetable_units{ "codetable_units" }; -grib_accessor_class* grib_accessor_class_codetable_units = &_grib_accessor_class_codetable_units; +grib_accessor_codetable_units_t _grib_accessor_codetable_units{}; +grib_accessor* grib_accessor_codetable_units = &_grib_accessor_codetable_units; -void grib_accessor_class_codetable_units_t::init(grib_accessor* a, const long len, grib_arguments* params) +void grib_accessor_codetable_units_t::init(const long len, grib_arguments* params) { - grib_accessor_class_gen_t::init(a, len, params); - grib_accessor_codetable_units_t* self = (grib_accessor_codetable_units_t*)a; + grib_accessor_gen_t::init(len, params); - int n = 0; - self->codetable = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + int n = 0; + codetable_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_codetable_units_t::get_native_type(grib_accessor* a) +long grib_accessor_codetable_units_t::get_native_type() { return GRIB_TYPE_STRING; } -int grib_accessor_class_codetable_units_t::unpack_string(grib_accessor* a, char* buffer, size_t* len) +int grib_accessor_codetable_units_t::unpack_string(char* buffer, size_t* len) { - grib_accessor_codetable_units_t* self = (grib_accessor_codetable_units_t*)a; - grib_codetable* table = NULL; + grib_codetable* table = NULL; size_t size = 1; long value; int err = GRIB_SUCCESS; char tmp[1024]; - size_t l = sizeof(tmp); - grib_accessor_codetable_t* ca = (grib_accessor_codetable_t*)grib_find_accessor(grib_handle_of_accessor(a), self->codetable); + size_t l = sizeof(tmp); + grib_accessor_codetable_t* ca = (grib_accessor_codetable_t*)grib_find_accessor(grib_handle_of_accessor(this), codetable_); if ((err = ((grib_accessor*)ca)->unpack_long(&value, &size)) != GRIB_SUCCESS) return err; - table = ca->table; + table = ca->codetable(); if (table && (value >= 0) && (value < table->size) && table->entries[value].units) { strcpy(tmp, table->entries[value].units); @@ -58,10 +55,9 @@ int grib_accessor_class_codetable_units_t::unpack_string(grib_accessor* a, char* l = strlen(tmp) + 1; if (*len < l) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, l, *len); + class_name_, name_, l, *len); *len = l; return GRIB_BUFFER_TOO_SMALL; } diff --git a/src/accessor/grib_accessor_class_codetable_units.h b/src/accessor/grib_accessor_class_codetable_units.h index 0a8c9389d..86ad6e652 100644 --- a/src/accessor/grib_accessor_class_codetable_units.h +++ b/src/accessor/grib_accessor_class_codetable_units.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_codetable_units_t : public grib_accessor_gen_t { public: - /* Members defined in codetable_units */ - const char* codetable; -}; - -class grib_accessor_class_codetable_units_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_codetable_units_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_codetable_units_t() : + grib_accessor_gen_t() { class_name_ = "codetable_units"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_codetable_units_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_string(char*, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* codetable_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_concept.cc b/src/accessor/grib_accessor_class_concept.cc index 2fec990f3..249dde888 100644 --- a/src/accessor/grib_accessor_class_concept.cc +++ b/src/accessor/grib_accessor_class_concept.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -10,14 +9,12 @@ */ #include "grib_accessor_class_concept.h" - #include #include #include -grib_accessor_class_concept_t _grib_accessor_class_concept{ "concept" }; -grib_accessor_class* grib_accessor_class_concept = &_grib_accessor_class_concept; - +grib_accessor_concept_t _grib_accessor_concept{}; +grib_accessor* grib_accessor_concept = &_grib_accessor_concept; #define MAX_CONCEPT_STRING_LENGTH 255 @@ -37,15 +34,15 @@ GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b) return (*a == 0 && *b == 0) ? 0 : 1; } -void grib_accessor_class_concept_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_concept_t::init(const long len, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, len, args); - a->length = 0; + grib_accessor_gen_t::init(len, args); + length_ = 0; } -void grib_accessor_class_concept_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_concept_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } // See ECC-1905 @@ -166,8 +163,8 @@ static const char* concept_evaluate(grib_accessor* a) grib_handle* h = grib_handle_of_accessor(a); std::unordered_map memo; // See ECC-1905 - - //fprintf(stderr, "DEBUG: concept_evaluate: %s %s\n", a->name, c->name); + + // fprintf(stderr, "DEBUG: concept_evaluate: %s %s\n", name_ , c->name); while (c) { grib_concept_condition* e = c->conditions; int cnt = 0; @@ -275,18 +272,84 @@ bool blacklisted(grib_handle* h, long edition, const char* concept_name, const c return false; } +static void print_user_friendly_message(grib_handle* h, const char* name, grib_concept_value* concepts, grib_action* act) +{ + size_t i = 0, concept_count = 0; + long dummy = 0, editionNumber = 0; + char centre_s[32] = {0,}; + size_t centre_len = sizeof(centre_s); + char* all_concept_vals[MAX_NUM_CONCEPT_VALUES] = {NULL,}; /* sorted array containing concept values */ + grib_concept_value* pCon = concepts; + + grib_context_log(h->context, GRIB_LOG_ERROR, "concept: no match for %s=%s", act->name, name); + if (grib_get_long(h, "edition", &editionNumber) == GRIB_SUCCESS && + grib_get_string(h, "centre", centre_s, ¢re_len) == GRIB_SUCCESS) { + grib_context_log(h->context, GRIB_LOG_ERROR, "concept: input handle edition=%ld, centre=%s", editionNumber, centre_s); + } + char dataset_s[80]; + size_t dataset_len = sizeof(dataset_s); + if (grib_get_string(h, "datasetForLocal", dataset_s, &dataset_len) == GRIB_SUCCESS && !STR_EQUAL(dataset_s, "unknown")) { + grib_context_log(h->context, GRIB_LOG_ERROR, "concept: input handle dataset=%s", dataset_s); + } + if (strcmp(act->name, "paramId") == 0) { + if (string_to_long(name, &dummy, 1) == GRIB_SUCCESS) { + // The paramId value is an integer. Show them the param DB + grib_context_log(h->context, GRIB_LOG_ERROR, + "Please check the Parameter Database 'https://codes.ecmwf.int/grib/param-db/?id=%s'", name); + } + else { + // paramId being set to a non-integer + grib_context_log(h->context, GRIB_LOG_ERROR, + "The paramId value should be an integer. Are you trying to set the shortName?"); + } + } + if (strcmp(act->name, "shortName") == 0) { + grib_context_log(h->context, GRIB_LOG_ERROR, + "Please check the Parameter Database 'https://codes.ecmwf.int/grib/param-db/'"); + } + + // Create a list of all possible values for this concept and sort it + while (pCon) { + if (i >= MAX_NUM_CONCEPT_VALUES) + break; + all_concept_vals[i++] = pCon->name; + pCon = pCon->next; + } + concept_count = i; + // Only print out all concepts if fewer than MAX_NUM_CONCEPT_VALUES. + // Printing out all values for concepts like paramId would be silly! + if (concept_count < MAX_NUM_CONCEPT_VALUES) { + fprintf(stderr, "Here are some possible values for concept %s:\n", act->name); + qsort(&all_concept_vals, concept_count, sizeof(char*), cmpstringp); + for (i = 0; i < concept_count; ++i) { + if (all_concept_vals[i]) { + bool print_it = true; + if (i > 0 && all_concept_vals[i - 1] && strcmp(all_concept_vals[i], all_concept_vals[i - 1]) == 0) { + print_it = false; // skip duplicate entries + } + if (blacklisted(h, editionNumber, act->name, all_concept_vals[i])) { + print_it = false; + } + if (print_it) { + fprintf(stderr, "\t%s\n", all_concept_vals[i]); + } + } + } + } +} + static int grib_concept_apply(grib_accessor* a, const char* name) { - int err = 0; - int count = 0; + int err = 0; + int count = 0; grib_concept_condition* e = NULL; - grib_values values[1024]; - grib_sarray* sa = NULL; - grib_concept_value* c = NULL; + grib_values values[1024] = {{0},}; // key/value pair array + grib_sarray* sa = NULL; + grib_concept_value* c = NULL; grib_concept_value* concepts = action_concept_get_concept(a); - grib_handle* h = grib_handle_of_accessor(a); - grib_action* act = a->creator; - int nofail = action_concept_get_nofail(a); + grib_handle* h = grib_handle_of_accessor(a); + grib_action* act = a->creator_; + const int nofail = action_concept_get_nofail(a); DEBUG_ASSERT(concepts); @@ -298,92 +361,70 @@ static int grib_concept_apply(grib_accessor* a, const char* name) if (!c) { err = nofail ? GRIB_SUCCESS : GRIB_CONCEPT_NO_MATCH; if (err) { - size_t i = 0, concept_count = 0; - long dummy = 0, editionNumber = 0; - char centre_s[32] = {0,}; - size_t centre_len = sizeof(centre_s); - char* all_concept_vals[MAX_NUM_CONCEPT_VALUES] = { - NULL, - }; /* sorted array containing concept values */ - grib_concept_value* pCon = concepts; - - grib_context_log(h->context, GRIB_LOG_ERROR, "concept: no match for %s=%s", act->name, name); - if (grib_get_long(h, "edition", &editionNumber) == GRIB_SUCCESS && - grib_get_string(h, "centre", centre_s, ¢re_len) == GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "concept: input handle edition=%ld, centre=%s", editionNumber, centre_s); - } - char dataset_s[80]; - size_t dataset_len = sizeof(dataset_s); - if (grib_get_string(h, "datasetForLocal", dataset_s, &dataset_len) == GRIB_SUCCESS && !STR_EQUAL(dataset_s, "unknown")) { - grib_context_log(h->context, GRIB_LOG_ERROR, "concept: input handle dataset=%s", dataset_s); - } - if (strcmp(act->name, "paramId") == 0) { - if (string_to_long(name, &dummy, 1) == GRIB_SUCCESS) { - // The paramId value is an integer. Show them the param DB - grib_context_log(h->context, GRIB_LOG_ERROR, - "Please check the Parameter Database 'https://codes.ecmwf.int/grib/param-db/?id=%s'", name); - } - else { - // paramId being set to a non-integer - grib_context_log(h->context, GRIB_LOG_ERROR, - "The paramId value should be an integer. Are you trying to set the shortName?"); - } - } - if (strcmp(act->name, "shortName") == 0) { - grib_context_log(h->context, GRIB_LOG_ERROR, - "Please check the Parameter Database 'https://codes.ecmwf.int/grib/param-db/'"); - } - - /* Create a list of all possible values for this concept and sort it */ - while (pCon) { - if (i >= MAX_NUM_CONCEPT_VALUES) - break; - all_concept_vals[i++] = pCon->name; - pCon = pCon->next; - } - concept_count = i; - /* Only print out all concepts if fewer than MAX_NUM_CONCEPT_VALUES. - * Printing out all values for concepts like paramId would be silly! */ - if (concept_count < MAX_NUM_CONCEPT_VALUES) { - fprintf(stderr, "Here are some possible values for concept %s:\n", act->name); - qsort(&all_concept_vals, concept_count, sizeof(char*), cmpstringp); - for (i = 0; i < concept_count; ++i) { - if (all_concept_vals[i]) { - bool print_it = true; - if (i > 0 && all_concept_vals[i - 1] && strcmp(all_concept_vals[i], all_concept_vals[i - 1]) == 0) { - print_it = false; /* skip duplicate entries */ - } - if (blacklisted(h, editionNumber, act->name, all_concept_vals[i])) { - print_it = false; - } - if (print_it) { - fprintf(stderr, "\t%s\n", all_concept_vals[i]); - } - } - } - } + print_user_friendly_message(h, name, concepts, act); } return err; } e = c->conditions; - sa = grib_sarray_new(h->context, 10, 10); + sa = grib_sarray_new(10, 10); while (e) { concept_conditions_apply(h, e, values, sa, &count); e = e->next; } - grib_sarray_delete(h->context, sa); + grib_sarray_delete(sa); + + if (count) { + err = grib_set_values_silent(h, values, count, /*silent=*/1); + if (err) { + // GRIB2 product template selection + bool resubmit = false; + for (int i = 0; i < count; i++) { + if (values[i].error == GRIB_NOT_FOUND) { + // Repair the most common cause of failure: input GRIB2 handle + // is instantaneous but paramId/shortName being set is for accum/avg etc + if (STR_EQUAL(values[i].name, "typeOfStatisticalProcessing")) { + grib_context_log(h->context, GRIB_LOG_DEBUG, "%s: Switch from instantaneous to interval-based", __func__); + if (grib_set_long(h, "selectStepTemplateInterval", 1) == GRIB_SUCCESS) { + resubmit = true; + grib_set_values(h, &values[i], 1); + } + } + // else if (STR_EQUAL(values[i].name, "sourceSinkChemicalPhysicalProcess")) { + // if (grib_set_long(h, "is_chemical_srcsink", 1) == GRIB_SUCCESS) { + // resubmit = true; + // grib_set_values(h, &values[i], 1); + // } + // } + } + } + + if (resubmit) { + grib_context_log(h->context, GRIB_LOG_DEBUG, "%s: Resubmitting key/values", __func__); + err = grib_set_values(h, values, count); + } + } + } + //grib_print_values("DEBUG grib_concept_apply", values, stdout, count); + if (err) { + for (int i = 0; i < count; i++) { + if (values[i].error != GRIB_SUCCESS) { + grib_context_log(h->context, GRIB_LOG_ERROR, + "grib_set_values[%d] %s (type=%s) failed: %s", + i, values[i].name, grib_get_type_name(values[i].type), + grib_get_error_message(values[i].error)); + } + } + } - if (count) - err = grib_set_values(h, values, count); return err; } -int grib_accessor_class_concept_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_concept_t::pack_double(const double* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_concept_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_concept_t::pack_long(const long* val, size_t* len) { char buf[80]; size_t s; @@ -393,16 +434,15 @@ int grib_accessor_class_concept_t::pack_long(grib_accessor* a, const long* val, // return GRIB_NOT_IMPLEMENTED; // ECC-1806: GRIB: Change of paramId in conversion from GRIB1 to GRIB2 - if (STR_EQUAL(a->name, "paramId")) { - grib_handle* h = grib_handle_of_accessor(a); + if (STR_EQUAL(name_, "paramId")) { + grib_handle* h = grib_handle_of_accessor(this); long edition = 0; if (grib_get_long(h, "edition", &edition) == GRIB_SUCCESS && edition == 2) { long newParamId = 0; if (grib_get_long(h, "paramIdForConversion", &newParamId) == GRIB_SUCCESS && newParamId > 0) { - if (a->context->debug) { - const char* cclass_name = a->cclass->name; + if (context_->debug) { fprintf(stderr, "ECCODES DEBUG %s::%s: Changing %s from %ld to %ld\n", - cclass_name, __func__, a->name, *val, newParamId); + class_name_, __func__, name_, *val, newParamId); } snprintf(buf, sizeof(buf), "%ld", newParamId); } @@ -410,10 +450,10 @@ int grib_accessor_class_concept_t::pack_long(grib_accessor* a, const long* val, } s = strlen(buf) + 1; - return pack_string(a, buf, &s); + return pack_string(buf, &s); } -int grib_accessor_class_concept_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_concept_t::unpack_double(double* val, size_t* len) { /* * If we want to have a condition which contains tests for paramId as well @@ -423,20 +463,20 @@ int grib_accessor_class_concept_t::unpack_double(grib_accessor* a, double* val, */ /*return GRIB_NOT_IMPLEMENTED*/ int ret = 0; - if (a->flags & GRIB_ACCESSOR_FLAG_LONG_TYPE) { + if (flags_ & GRIB_ACCESSOR_FLAG_LONG_TYPE) { long lval = 0; - ret = unpack_long(a, &lval, len); + ret = unpack_long(&lval, len); if (ret == GRIB_SUCCESS) { *val = lval; } } - else if (a->flags & GRIB_ACCESSOR_FLAG_DOUBLE_TYPE) { - const char* p = concept_evaluate(a); + else if (flags_ & GRIB_ACCESSOR_FLAG_DOUBLE_TYPE) { + const char* p = concept_evaluate(this); if (!p) { - grib_handle* h = grib_handle_of_accessor(a); - if (a->creator->defaultkey) - return grib_get_double_internal(h, a->creator->defaultkey, val); + grib_handle* h = grib_handle_of_accessor(this); + if (creator_->defaultkey) + return grib_get_double_internal(h, creator_->defaultkey, val); return GRIB_NOT_FOUND; } @@ -446,14 +486,14 @@ int grib_accessor_class_concept_t::unpack_double(grib_accessor* a, double* val, return ret; } -int grib_accessor_class_concept_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_concept_t::unpack_long(long* val, size_t* len) { - const char* p = concept_evaluate(a); + const char* p = concept_evaluate(this); if (!p) { - grib_handle* h = grib_handle_of_accessor(a); - if (a->creator->defaultkey) - return grib_get_long_internal(h, a->creator->defaultkey, val); + grib_handle* h = grib_handle_of_accessor(this); + if (creator_->defaultkey) + return grib_get_long_internal(h, creator_->defaultkey, val); return GRIB_NOT_FOUND; } @@ -471,9 +511,9 @@ int grib_accessor_class_concept_t::unpack_long(grib_accessor* a, long* val, size if (endptr == p || *endptr != '\0') { /* Failed to convert string into integer */ int type = GRIB_TYPE_UNDEFINED; - grib_context_log(a->context, GRIB_LOG_ERROR, "Cannot unpack %s as long", a->name); - if (grib_get_native_type(grib_handle_of_accessor(a), a->name, &type) == GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Hint: Try unpacking as %s", grib_get_type_name(type)); + grib_context_log(context_, GRIB_LOG_ERROR, "Cannot unpack %s as long", name_); + if (grib_get_native_type(grib_handle_of_accessor(this), name_, &type) == GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, "Hint: Try unpacking as %s", grib_get_type_name(type)); } return GRIB_DECODING_ERROR; } @@ -482,73 +522,73 @@ int grib_accessor_class_concept_t::unpack_long(grib_accessor* a, long* val, size return GRIB_SUCCESS; } -int grib_accessor_class_concept_t::get_native_type(grib_accessor* a) +long grib_accessor_concept_t::get_native_type() { int type = GRIB_TYPE_STRING; - if (a->flags & GRIB_ACCESSOR_FLAG_LONG_TYPE) + if (flags_ & GRIB_ACCESSOR_FLAG_LONG_TYPE) type = GRIB_TYPE_LONG; return type; } -void grib_accessor_class_concept_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_concept_t::destroy(grib_context* c) { // grib_accessor_concept_t *self = (grib_accessor_concept_t*)a; - // grib_context_free(c,self->cval); - grib_accessor_class_gen_t::destroy(c, a); + // grib_context_free(c,cval_ ); + grib_accessor_gen_t::destroy(c); } -int grib_accessor_class_concept_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_concept_t::unpack_string(char* val, size_t* len) { size_t slen; - const char* p = concept_evaluate(a); + const char* p = concept_evaluate(this); if (!p) { - grib_handle* h = grib_handle_of_accessor(a); - if (a->creator->defaultkey) - return grib_get_string_internal(h, a->creator->defaultkey, val, len); + grib_handle* h = grib_handle_of_accessor(this); + if (creator_->defaultkey) + return grib_get_string_internal(h, creator_->defaultkey, val, len); return GRIB_NOT_FOUND; } slen = strlen(p) + 1; if (*len < slen) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "Concept unpack_string. Buffer too small for %s, value='%s' which requires %lu bytes (len=%lu)", - a->name, p, slen, *len); + name_, p, slen, *len); *len = slen; return GRIB_BUFFER_TOO_SMALL; } strcpy(val, p); /* NOLINT: CWE-119 clang-analyzer-security.insecureAPI.strcpy */ *len = slen; - // if (a->context->debug==1) { + // if (context_ ->debug==1) { // int err = 0; // char result[1024] = {0,}; - // err = get_concept_condition_string(grib_handle_of_accessor(a), a->name, val, result); - // if (!err) fprintf(stderr, "ECCODES DEBUG concept name=%s, value=%s, conditions=%s\n", a->name, val, result); + // err = get_concept_condition_string(grib_handle_of_accessor(this), name_ , val, result); + // if (!err) fprintf(stderr, "ECCODES DEBUG concept name=%s, value=%s, conditions=%s\n", name_ , val, result); // } return GRIB_SUCCESS; } -int grib_accessor_class_concept_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_concept_t::pack_string(const char* val, size_t* len) { - return grib_concept_apply(a, val); + return grib_concept_apply(this, val); } -size_t grib_accessor_class_concept_t::string_length(grib_accessor* a) +size_t grib_accessor_concept_t::string_length() { return MAX_CONCEPT_STRING_LENGTH; } -int grib_accessor_class_concept_t::value_count(grib_accessor* a, long* count) +int grib_accessor_concept_t::value_count(long* count) { *count = 1; return 0; } -int grib_accessor_class_concept_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_concept_t::compare(grib_accessor* b) { int retval = 0; char* aval = 0; @@ -559,7 +599,7 @@ int grib_accessor_class_concept_t::compare(grib_accessor* a, grib_accessor* b) int err = 0; long count = 0; - err = a->value_count(&count); + err = value_count(&count); if (err) return err; alen = count; @@ -572,10 +612,10 @@ int grib_accessor_class_concept_t::compare(grib_accessor* a, grib_accessor* b) alen = MAX_CONCEPT_STRING_LENGTH; blen = MAX_CONCEPT_STRING_LENGTH; - aval = (char*)grib_context_malloc(a->context, alen * sizeof(char)); - bval = (char*)grib_context_malloc(b->context, blen * sizeof(char)); + aval = (char*)grib_context_malloc(context_, alen * sizeof(char)); + bval = (char*)grib_context_malloc(b->context_, blen * sizeof(char)); - err = a->unpack_string(aval, &alen); + err = unpack_string(aval, &alen); if (err) return err; err = b->unpack_string(bval, &blen); if (err) return err; @@ -584,8 +624,8 @@ int grib_accessor_class_concept_t::compare(grib_accessor* a, grib_accessor* b) if (!aval || !bval || grib_inline_strcmp(aval, bval)) retval = GRIB_STRING_VALUE_MISMATCH; - grib_context_free(a->context, aval); - grib_context_free(b->context, bval); + grib_context_free(context_, aval); + grib_context_free(b->context_, bval); return retval; } diff --git a/src/accessor/grib_accessor_class_concept.h b/src/accessor/grib_accessor_class_concept.h index 7b9ea11d0..cf89b19b5 100644 --- a/src/accessor/grib_accessor_class_concept.h +++ b/src/accessor/grib_accessor_class_concept.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,25 +15,20 @@ class grib_accessor_concept_t : public grib_accessor_gen_t { public: - /* Members defined in concept */ -}; - -class grib_accessor_class_concept_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_concept_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_concept_t() : + grib_accessor_gen_t() { class_name_ = "concept"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_concept_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int compare(grib_accessor*, grib_accessor*) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + int compare(grib_accessor*) override; }; diff --git a/src/accessor/grib_accessor_class_constant.cc b/src/accessor/grib_accessor_class_constant.cc index ed30a6365..d7f1354c1 100644 --- a/src/accessor/grib_accessor_class_constant.cc +++ b/src/accessor/grib_accessor_class_constant.cc @@ -10,11 +10,11 @@ #include "grib_accessor_class_constant.h" -grib_accessor_class_constant_t _grib_accessor_class_constant{"constant"}; -grib_accessor_class* grib_accessor_class_constant = &_grib_accessor_class_constant; +grib_accessor_constant_t _grib_accessor_constant{}; +grib_accessor* grib_accessor_constant = &_grib_accessor_constant; -void grib_accessor_class_constant_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_constant_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_variable_t::init(a, len, arg); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_variable_t::init(len, arg); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } diff --git a/src/accessor/grib_accessor_class_constant.h b/src/accessor/grib_accessor_class_constant.h index 916df88e9..ea4a88c6a 100644 --- a/src/accessor/grib_accessor_class_constant.h +++ b/src/accessor/grib_accessor_class_constant.h @@ -10,12 +10,12 @@ #include "grib_accessor_class_variable.h" -class grib_accessor_constant_t : public grib_accessor_variable_t {}; - -class grib_accessor_class_constant_t : public grib_accessor_class_variable_t +class grib_accessor_constant_t : public grib_accessor_variable_t { public: - grib_accessor_class_constant_t(const char* name) : grib_accessor_class_variable_t(name) {} + grib_accessor_constant_t() : + grib_accessor_variable_t() { class_name_ = "constant"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_constant_t{}; } - void init(grib_accessor*, const long, grib_arguments*) override; + void init(const long, grib_arguments*) override; + }; diff --git a/src/accessor/grib_accessor_class_count_file.cc b/src/accessor/grib_accessor_class_count_file.cc index 268ba8051..16f65c300 100644 --- a/src/accessor/grib_accessor_class_count_file.cc +++ b/src/accessor/grib_accessor_class_count_file.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,20 +10,19 @@ #include "grib_accessor_class_count_file.h" -grib_accessor_class_count_file_t _grib_accessor_class_count_file{ "count_file" }; -grib_accessor_class* grib_accessor_class_count_file = &_grib_accessor_class_count_file; +grib_accessor_count_file_t _grib_accessor_count_file{}; +grib_accessor* grib_accessor_count_file = &_grib_accessor_count_file; - -void grib_accessor_class_count_file_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_count_file_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length = 0; + grib_accessor_long_t::init(l, c); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + length_ = 0; } -int grib_accessor_class_count_file_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_count_file_t::unpack_long(long* val, size_t* len) { - *val = grib_context_get_handle_file_count(a->context); + *val = grib_context_get_handle_file_count(context_); *len = 1; return 0; } diff --git a/src/accessor/grib_accessor_class_count_file.h b/src/accessor/grib_accessor_class_count_file.h index 25092b0a4..8f1ef4919 100644 --- a/src/accessor/grib_accessor_class_count_file.h +++ b/src/accessor/grib_accessor_class_count_file.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,14 +15,9 @@ class grib_accessor_count_file_t : public grib_accessor_long_t { public: - /* Members defined in count_file */ -}; - -class grib_accessor_class_count_file_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_count_file_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_count_file_t() : + grib_accessor_long_t() { class_name_ = "count_file"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_count_file_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_count_missing.cc b/src/accessor/grib_accessor_class_count_missing.cc index 7a3232175..372f6540d 100644 --- a/src/accessor/grib_accessor_class_count_missing.cc +++ b/src/accessor/grib_accessor_class_count_missing.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,9 +10,8 @@ #include "grib_accessor_class_count_missing.h" -grib_accessor_class_count_missing_t _grib_accessor_class_count_missing{ "count_missing" }; -grib_accessor_class* grib_accessor_class_count_missing = &_grib_accessor_class_count_missing; - +grib_accessor_count_missing_t _grib_accessor_count_missing{}; +grib_accessor* grib_accessor_count_missing = &_grib_accessor_count_missing; static const unsigned char bitsoff[] = { 8, 7, 7, 6, 7, 6, 6, 5, 7, 6, 6, 5, 6, 5, 5, 4, 7, @@ -34,25 +32,24 @@ static const unsigned char bitsoff[] = { 0 }; -void grib_accessor_class_count_missing_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_count_missing_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_long_t::init(a, len, arg); - int n = 0; - grib_accessor_count_missing_t* self = (grib_accessor_count_missing_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - self->bitmap = grib_arguments_get_name(h, arg, n++); - self->unusedBitsInBitmap = grib_arguments_get_name(h, arg, n++); - self->numberOfDataPoints = grib_arguments_get_name(h, arg, n++); - self->missingValueManagementUsed = grib_arguments_get_name(h, arg, n++); /* Can be NULL */ + grib_accessor_long_t::init(len, arg); + int n = 0; + grib_handle* h = grib_handle_of_accessor(this); + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + bitmap_ = grib_arguments_get_name(h, arg, n++); + unusedBitsInBitmap_ = grib_arguments_get_name(h, arg, n++); + numberOfDataPoints_ = grib_arguments_get_name(h, arg, n++); + missingValueManagementUsed_ = grib_arguments_get_name(h, arg, n++); /* Can be NULL */ } static const int used[] = { 0, 1, 3, 7, 15, 31, 63, 127, 255 }; static int get_count_of_missing_values(grib_handle* h, long* p_count_of_missing) { - int err = 0; + int err = 0; long count_of_missing = 0; size_t vsize = 0, ii = 0; double* values = NULL; @@ -74,24 +71,23 @@ static int get_count_of_missing_values(grib_handle* h, long* p_count_of_missing) return GRIB_SUCCESS; } -int grib_accessor_class_count_missing_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_count_missing_t::unpack_long(long* val, size_t* len) { - grib_accessor_count_missing_t* self = (grib_accessor_count_missing_t*)a; unsigned char* p; int i; long size = 0; long offset = 0; long unusedBitsInBitmap = 0; long numberOfDataPoints = 0; - grib_handle* h = grib_handle_of_accessor(a); - grib_accessor* bitmap = grib_find_accessor(h, self->bitmap); + grib_handle* h = grib_handle_of_accessor(this); + grib_accessor* bitmap = grib_find_accessor(h, bitmap_); *val = 0; /* By default assume none are missing */ *len = 1; if (!bitmap) { long mvmu = 0; - if (self->missingValueManagementUsed && - grib_get_long(h, self->missingValueManagementUsed, &mvmu) == GRIB_SUCCESS && mvmu != 0) { + if (missingValueManagementUsed_ && + grib_get_long(h, missingValueManagementUsed_, &mvmu) == GRIB_SUCCESS && mvmu != 0) { /* ECC-523: No bitmap. Missing values are encoded in the Data Section. * So we must decode all the data values and count how many are missing */ @@ -105,15 +101,15 @@ int grib_accessor_class_count_missing_t::unpack_long(grib_accessor* a, long* val size = bitmap->byte_count(); offset = bitmap->byte_offset(); - if (grib_get_long(h, self->unusedBitsInBitmap, &unusedBitsInBitmap) != GRIB_SUCCESS) { - if (grib_get_long(h, self->numberOfDataPoints, &numberOfDataPoints) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to count missing values"); + if (grib_get_long(h, unusedBitsInBitmap_, &unusedBitsInBitmap) != GRIB_SUCCESS) { + if (grib_get_long(h, numberOfDataPoints_, &numberOfDataPoints) != GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to count missing values"); return GRIB_INTERNAL_ERROR; } unusedBitsInBitmap = size * 8 - numberOfDataPoints; if (unusedBitsInBitmap < 0) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Inconsistent number of bitmap points: Check the bitmap and data sections!"); - grib_context_log(a->context, GRIB_LOG_ERROR, "Bitmap size=%ld, numberOfDataPoints=%ld", size * 8, numberOfDataPoints); + grib_context_log(context_, GRIB_LOG_ERROR, "Inconsistent number of bitmap points: Check the bitmap and data sections!"); + grib_context_log(context_, GRIB_LOG_ERROR, "Bitmap size=%ld, numberOfDataPoints=%ld", size * 8, numberOfDataPoints); return GRIB_DECODING_ERROR; } } @@ -131,7 +127,7 @@ int grib_accessor_class_count_missing_t::unpack_long(grib_accessor* a, long* val return GRIB_SUCCESS; } -int grib_accessor_class_count_missing_t::value_count(grib_accessor* a, long* count) +int grib_accessor_count_missing_t::value_count(long* count) { *count = 1; return 0; diff --git a/src/accessor/grib_accessor_class_count_missing.h b/src/accessor/grib_accessor_class_count_missing.h index 3e2cf7330..4e3fb6d82 100644 --- a/src/accessor/grib_accessor_class_count_missing.h +++ b/src/accessor/grib_accessor_class_count_missing.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_count_missing_t : public grib_accessor_long_t { public: - /* Members defined in count_missing */ - const char* bitmap; - const char* unusedBitsInBitmap; - const char* numberOfDataPoints; - const char* missingValueManagementUsed; -}; - -class grib_accessor_class_count_missing_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_count_missing_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_count_missing_t() : + grib_accessor_long_t() { class_name_ = "count_missing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_count_missing_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* bitmap_ = nullptr; + const char* unusedBitsInBitmap_ = nullptr; + const char* numberOfDataPoints_ = nullptr; + const char* missingValueManagementUsed_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_count_total.cc b/src/accessor/grib_accessor_class_count_total.cc index dc708b4b6..432930686 100644 --- a/src/accessor/grib_accessor_class_count_total.cc +++ b/src/accessor/grib_accessor_class_count_total.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,20 +10,19 @@ #include "grib_accessor_class_count_total.h" -grib_accessor_class_count_total_t _grib_accessor_class_count_total{ "count_total" }; -grib_accessor_class* grib_accessor_class_count_total = &_grib_accessor_class_count_total; +grib_accessor_count_total_t _grib_accessor_count_total{}; +grib_accessor* grib_accessor_count_total = &_grib_accessor_count_total; - -void grib_accessor_class_count_total_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_count_total_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length = 0; + grib_accessor_long_t::init(l, c); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + length_ = 0; } -int grib_accessor_class_count_total_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_count_total_t::unpack_long(long* val, size_t* len) { - *val = grib_context_get_handle_total_count(a->context); + *val = grib_context_get_handle_total_count(context_); *len = 1; return 0; } diff --git a/src/accessor/grib_accessor_class_count_total.h b/src/accessor/grib_accessor_class_count_total.h index 6fa89df0e..2f6dcaad9 100644 --- a/src/accessor/grib_accessor_class_count_total.h +++ b/src/accessor/grib_accessor_class_count_total.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,14 +15,9 @@ class grib_accessor_count_total_t : public grib_accessor_long_t { public: - /* Members defined in count_total */ -}; - -class grib_accessor_class_count_total_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_count_total_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_count_total_t() : + grib_accessor_long_t() { class_name_ = "count_total"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_count_total_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_data_apply_bitmap.cc b/src/accessor/grib_accessor_class_data_apply_bitmap.cc index cf3d5f4a5..72a5cc148 100644 --- a/src/accessor/grib_accessor_class_data_apply_bitmap.cc +++ b/src/accessor/grib_accessor_class_data_apply_bitmap.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,68 +10,64 @@ #include "grib_accessor_class_data_apply_bitmap.h" -grib_accessor_class_data_apply_bitmap_t _grib_accessor_class_data_apply_bitmap{ "data_apply_bitmap" }; -grib_accessor_class* grib_accessor_class_data_apply_bitmap = &_grib_accessor_class_data_apply_bitmap; +grib_accessor_data_apply_bitmap_t _grib_accessor_data_apply_bitmap{}; +grib_accessor* grib_accessor_data_apply_bitmap = &_grib_accessor_data_apply_bitmap; - -void grib_accessor_class_data_apply_bitmap_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_apply_bitmap_t::init(const long v, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, v, args); + grib_accessor_gen_t::init(v, args); int n = 0; - grib_accessor_data_apply_bitmap_t* self = (grib_accessor_data_apply_bitmap_t*)a; - self->coded_values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->bitmap = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->missing_value = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->binary_scale_factor = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->number_of_data_points = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->number_of_values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); + coded_values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + bitmap_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + missing_value_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + binary_scale_factor_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + number_of_data_points_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + number_of_values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); - a->length = 0; + length_ = 0; } -void grib_accessor_class_data_apply_bitmap_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_data_apply_bitmap_t::dump(grib_dumper* dumper) { - grib_dump_values(dumper, a); + grib_dump_values(dumper, this); } -int grib_accessor_class_data_apply_bitmap_t::value_count(grib_accessor* a, long* count) +int grib_accessor_data_apply_bitmap_t::value_count(long* count) { - grib_accessor_data_apply_bitmap_t* self = (grib_accessor_data_apply_bitmap_t*)a; size_t len = 0; - int ret = GRIB_SUCCESS; + int ret = GRIB_SUCCESS; - if (grib_find_accessor(grib_handle_of_accessor(a), self->bitmap)) - ret = grib_get_size(grib_handle_of_accessor(a), self->bitmap, &len); + if (grib_find_accessor(grib_handle_of_accessor(this), bitmap_)) + ret = grib_get_size(grib_handle_of_accessor(this), bitmap_, &len); else - ret = grib_get_size(grib_handle_of_accessor(a), self->coded_values, &len); + ret = grib_get_size(grib_handle_of_accessor(this), coded_values_, &len); *count = len; return ret; } -int grib_accessor_class_data_apply_bitmap_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_apply_bitmap_t::unpack_double_element(size_t idx, double* val) { - grib_accessor_data_apply_bitmap_t* self = (grib_accessor_data_apply_bitmap_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); - size_t i = 0, cidx = 0; + grib_handle* gh = grib_handle_of_accessor(this); + size_t i = 0, cidx = 0; double missing_value = 0; double* bvals = NULL; size_t n_vals = 0; long nn = 0; - int err = a->value_count(&nn); - n_vals = nn; + int err = value_count(&nn); + n_vals = nn; if (err) return err; - if (!grib_find_accessor(gh, self->bitmap)) - return grib_get_double_element_internal(gh, self->coded_values, idx, val); + if (!grib_find_accessor(gh, bitmap_)) + return grib_get_double_element_internal(gh, coded_values_, idx, val); - if ((err = grib_get_double_internal(gh, self->missing_value, &missing_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(gh, missing_value_, &missing_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_element_internal(gh, self->bitmap, idx, val)) != GRIB_SUCCESS) + if ((err = grib_get_double_element_internal(gh, bitmap_, idx, val)) != GRIB_SUCCESS) return err; if (*val == 0) { @@ -80,11 +75,11 @@ int grib_accessor_class_data_apply_bitmap_t::unpack_double_element(grib_accessor return GRIB_SUCCESS; } - bvals = (double*)grib_context_malloc(a->context, n_vals * sizeof(double)); + bvals = (double*)grib_context_malloc(context_, n_vals * sizeof(double)); if (bvals == NULL) return GRIB_OUT_OF_MEMORY; - if ((err = grib_get_double_array_internal(gh, self->bitmap, bvals, &n_vals)) != GRIB_SUCCESS) + if ((err = grib_get_double_array_internal(gh, bitmap_, bvals, &n_vals)) != GRIB_SUCCESS) return err; cidx = 0; @@ -92,15 +87,14 @@ int grib_accessor_class_data_apply_bitmap_t::unpack_double_element(grib_accessor cidx += bvals[i]; } - grib_context_free(a->context, bvals); + grib_context_free(context_, bvals); - return grib_get_double_element_internal(gh, self->coded_values, cidx, val); + return grib_get_double_element_internal(gh, coded_values_, cidx, val); } -int grib_accessor_class_data_apply_bitmap_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_apply_bitmap_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { - grib_accessor_data_apply_bitmap_t* self = (grib_accessor_data_apply_bitmap_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); + grib_handle* gh = grib_handle_of_accessor(this); int err = 0, all_missing = 1; size_t cidx = 0; /* index into the coded_values array */ size_t* cidx_array = NULL; /* array of indexes into the coded_values */ @@ -110,17 +104,17 @@ int grib_accessor_class_data_apply_bitmap_t::unpack_double_element_set(grib_acce size_t n_vals = 0, i = 0, j = 0, idx = 0, count_1s = 0, ci = 0; long nn = 0; - err = a->value_count(&nn); + err = value_count(&nn); n_vals = nn; if (err) return err; - if (!grib_find_accessor(gh, self->bitmap)) - return grib_get_double_element_set_internal(gh, self->coded_values, index_array, len, val_array); + if (!grib_find_accessor(gh, bitmap_)) + return grib_get_double_element_set_internal(gh, coded_values_, index_array, len, val_array); - if ((err = grib_get_double_internal(gh, self->missing_value, &missing_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(gh, missing_value_, &missing_value)) != GRIB_SUCCESS) return err; - err = grib_get_double_element_set_internal(gh, self->bitmap, index_array, len, val_array); + err = grib_get_double_element_set_internal(gh, bitmap_, index_array, len, val_array); if (err) return err; for (i = 0; i < len; i++) { if (val_array[i] == 0) { @@ -139,14 +133,14 @@ int grib_accessor_class_data_apply_bitmap_t::unpack_double_element_set(grib_acce /* At this point val_array contains entries which are either missing_value or 1 */ /* Now we need to dig into the codes values with index array of count_1s */ - bvals = (double*)grib_context_malloc(a->context, n_vals * sizeof(double)); + bvals = (double*)grib_context_malloc(context_, n_vals * sizeof(double)); if (!bvals) return GRIB_OUT_OF_MEMORY; - if ((err = grib_get_double_array_internal(gh, self->bitmap, bvals, &n_vals)) != GRIB_SUCCESS) + if ((err = grib_get_double_array_internal(gh, bitmap_, bvals, &n_vals)) != GRIB_SUCCESS) return err; - cidx_array = (size_t*)grib_context_malloc(a->context, count_1s * sizeof(size_t)); - cval_array = (double*)grib_context_malloc(a->context, count_1s * sizeof(double)); + cidx_array = (size_t*)grib_context_malloc(context_, count_1s * sizeof(size_t)); + cval_array = (double*)grib_context_malloc(context_, count_1s * sizeof(double)); ci = 0; for (i = 0; i < len; i++) { @@ -160,7 +154,7 @@ int grib_accessor_class_data_apply_bitmap_t::unpack_double_element_set(grib_acce cidx_array[ci++] = cidx; } } - err = grib_get_double_element_set_internal(gh, self->coded_values, cidx_array, count_1s, cval_array); + err = grib_get_double_element_set_internal(gh, coded_values_, cidx_array, count_1s, cval_array); if (err) return err; /* Transfer from cval_array to our result val_array */ @@ -171,48 +165,47 @@ int grib_accessor_class_data_apply_bitmap_t::unpack_double_element_set(grib_acce } } - grib_context_free(a->context, bvals); - grib_context_free(a->context, cidx_array); - grib_context_free(a->context, cval_array); + grib_context_free(context_, bvals); + grib_context_free(context_, cidx_array); + grib_context_free(context_, cval_array); return GRIB_SUCCESS; } -int grib_accessor_class_data_apply_bitmap_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_apply_bitmap_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_apply_bitmap_t* self = (grib_accessor_data_apply_bitmap_t*)a; - int err = 0; - size_t bmaplen = *len; - long coded_n_vals = 0; - double* coded_vals = NULL; - long i = 0; - long j = 0; - double missing_value = 0; - grib_handle* hand = grib_handle_of_accessor(a); - grib_context* ctxt = a->context; + int err = 0; + size_t bmaplen = *len; + long coded_n_vals = 0; + double* coded_vals = NULL; + long i = 0; + long j = 0; + double missing_value = 0; + grib_handle* hand = grib_handle_of_accessor(this); + grib_context* ctxt = context_; if (*len == 0) return GRIB_NO_VALUES; - if (!grib_find_accessor(hand, self->bitmap)) { - /*printf("SETTING TOTAL number_of_data_points %s %ld\n",self->number_of_data_points,*len);*/ - if (self->number_of_data_points) - grib_set_long_internal(hand, self->number_of_data_points, *len); + if (!grib_find_accessor(hand, bitmap_)) { + /*printf("SETTING TOTAL number_of_data_points %s %ld\n",number_of_data_points_ ,*len);*/ + if (number_of_data_points_) + grib_set_long_internal(hand, number_of_data_points_, *len); - err = grib_set_double_array_internal(hand, self->coded_values, val, *len); + err = grib_set_double_array_internal(hand, coded_values_, val, *len); return err; } - if ((err = grib_get_double_internal(hand, self->missing_value, &missing_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(hand, missing_value_, &missing_value)) != GRIB_SUCCESS) return err; - if ((err = grib_set_double_array_internal(hand, self->bitmap, val, bmaplen)) != GRIB_SUCCESS) + if ((err = grib_set_double_array_internal(hand, bitmap_, val, bmaplen)) != GRIB_SUCCESS) return err; coded_n_vals = *len; if (coded_n_vals < 1) { - err = grib_set_double_array_internal(hand, self->coded_values, NULL, 0); + err = grib_set_double_array_internal(hand, coded_values_, NULL, 0); return err; } @@ -226,24 +219,22 @@ int grib_accessor_class_data_apply_bitmap_t::pack_double(grib_accessor* a, const } } - err = grib_set_double_array_internal(hand, self->coded_values, coded_vals, j); + err = grib_set_double_array_internal(hand, coded_values_, coded_vals, j); grib_context_free(ctxt, coded_vals); if (j == 0) { - if (self->number_of_values) - err = grib_set_long_internal(hand, self->number_of_values, 0); - if (self->binary_scale_factor) - err = grib_set_long_internal(hand, self->binary_scale_factor, 0); + if (number_of_values_) + err = grib_set_long_internal(hand, number_of_values_, 0); + if (binary_scale_factor_) + err = grib_set_long_internal(hand, binary_scale_factor_, 0); } return err; } - -template -static int unpack(grib_accessor* a, T* val, size_t* len) +template +int grib_accessor_data_apply_bitmap_t::unpack(T* val, size_t* len) { static_assert(std::is_floating_point::value, "Requires floating point numbers"); - grib_accessor_data_apply_bitmap_t* self = (grib_accessor_data_apply_bitmap_t*)a; size_t i = 0; size_t j = 0; @@ -253,18 +244,18 @@ static int unpack(grib_accessor* a, T* val, size_t* len) T* coded_vals = NULL; double missing_value = 0; - int err = a->value_count(&nn); - n_vals = nn; + int err = value_count(&nn); + n_vals = nn; if (err) return err; - if (!grib_find_accessor(grib_handle_of_accessor(a), self->bitmap)) - return grib_get_array(grib_handle_of_accessor(a), self->coded_values, val, len); + if (!grib_find_accessor(grib_handle_of_accessor(this), bitmap_)) + return grib_get_array(grib_handle_of_accessor(this), coded_values_, val, len); - if ((err = grib_get_size(grib_handle_of_accessor(a), self->coded_values, &coded_n_vals)) != GRIB_SUCCESS) + if ((err = grib_get_size(grib_handle_of_accessor(this), coded_values_, &coded_n_vals)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->missing_value, &missing_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(grib_handle_of_accessor(this), missing_value_, &missing_value)) != GRIB_SUCCESS) return err; if (*len < n_vals) { @@ -280,21 +271,21 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return GRIB_SUCCESS; } - if ((err = grib_get_array_internal(grib_handle_of_accessor(a), self->bitmap, val, &n_vals)) != GRIB_SUCCESS) + if ((err = grib_get_array_internal(grib_handle_of_accessor(this), bitmap_, val, &n_vals)) != GRIB_SUCCESS) return err; - coded_vals = (T*)grib_context_malloc(a->context, coded_n_vals * sizeof(T)); + coded_vals = (T*)grib_context_malloc(context_, coded_n_vals * sizeof(T)); if (coded_vals == NULL) return GRIB_OUT_OF_MEMORY; - if ((err = grib_get_array(grib_handle_of_accessor(a), self->coded_values, coded_vals, &coded_n_vals)) != GRIB_SUCCESS) { - grib_context_free(a->context, coded_vals); + if ((err = grib_get_array(grib_handle_of_accessor(this), coded_values_, coded_vals, &coded_n_vals)) != GRIB_SUCCESS) { + grib_context_free(context_, coded_vals); return err; } - grib_context_log(a->context, GRIB_LOG_DEBUG, - "grib_accessor_class_data_apply_bitmap: %s : creating %s, %d values", - __func__, a->name, n_vals); + grib_context_log(context_, GRIB_LOG_DEBUG, + "grib_accessor_data_apply_bitmap: %s : creating %s, %d values", + __func__, name_, n_vals); for (i = 0; i < n_vals; i++) { if (val[i] == 0) { @@ -303,11 +294,11 @@ static int unpack(grib_accessor* a, T* val, size_t* len) else { val[i] = coded_vals[j++]; if (j > coded_n_vals) { - grib_context_free(a->context, coded_vals); - grib_context_log(a->context, GRIB_LOG_ERROR, - "grib_accessor_class_data_apply_bitmap [%s]:" + grib_context_free(context_, coded_vals); + grib_context_log(context_, GRIB_LOG_ERROR, + "grib_accessor_data_apply_bitmap [%s]:" " %s : number of coded values does not match bitmap %ld %ld", - a->name, __func__, coded_n_vals, n_vals); + name_, __func__, coded_n_vals, n_vals); return GRIB_ARRAY_TOO_SMALL; } @@ -316,28 +307,28 @@ static int unpack(grib_accessor* a, T* val, size_t* len) *len = n_vals; - grib_context_free(a->context, coded_vals); + grib_context_free(context_, coded_vals); return err; } -int grib_accessor_class_data_apply_bitmap_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_apply_bitmap_t::unpack_double(double* val, size_t* len) { - return unpack(a, val, len); + return unpack(val, len); } -int grib_accessor_class_data_apply_bitmap_t::unpack_float(grib_accessor* a, float* val, size_t* len) +int grib_accessor_data_apply_bitmap_t::unpack_float(float* val, size_t* len) { - return unpack(a, val, len); + return unpack(val, len); } -int grib_accessor_class_data_apply_bitmap_t::get_native_type(grib_accessor* a) +long grib_accessor_data_apply_bitmap_t::get_native_type() { // grib_accessor_data_apply_bitmap_t* self = (grib_accessor_data_apply_bitmap_t*)a; - // return grib_accessor_get_native_type(grib_find_accessor(grib_handle_of_accessor(a),self->coded_values)); + // return grib_accessor_get_native_type(grib_find_accessor(grib_handle_of_accessor(this),coded_values_ )); return GRIB_TYPE_DOUBLE; } -int grib_accessor_class_data_apply_bitmap_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_data_apply_bitmap_t::compare(grib_accessor* b) { int retval = GRIB_SUCCESS; double* aval = 0; @@ -348,7 +339,7 @@ int grib_accessor_class_data_apply_bitmap_t::compare(grib_accessor* a, grib_acce int err = 0; long count = 0; - err = a->value_count(&count); + err = value_count(&count); if (err) return err; alen = count; @@ -361,18 +352,18 @@ int grib_accessor_class_data_apply_bitmap_t::compare(grib_accessor* a, grib_acce if (alen != blen) return GRIB_COUNT_MISMATCH; - aval = (double*)grib_context_malloc(a->context, alen * sizeof(double)); - bval = (double*)grib_context_malloc(b->context, blen * sizeof(double)); + aval = (double*)grib_context_malloc(context_, alen * sizeof(double)); + bval = (double*)grib_context_malloc(b->context_, blen * sizeof(double)); - a->unpack_double(aval, &alen); + unpack_double(aval, &alen); b->unpack_double(bval, &blen); retval = GRIB_SUCCESS; for (size_t i = 0; i < alen && retval == GRIB_SUCCESS; ++i) { if (aval[i] != bval[i]) retval = GRIB_DOUBLE_VALUE_MISMATCH; } - grib_context_free(a->context, aval); - grib_context_free(b->context, bval); + grib_context_free(context_, aval); + grib_context_free(b->context_, bval); return retval; } diff --git a/src/accessor/grib_accessor_class_data_apply_bitmap.h b/src/accessor/grib_accessor_class_data_apply_bitmap.h index f3bed1166..26f90ce47 100644 --- a/src/accessor/grib_accessor_class_data_apply_bitmap.h +++ b/src/accessor/grib_accessor_class_data_apply_bitmap.h @@ -15,28 +15,27 @@ class grib_accessor_data_apply_bitmap_t : public grib_accessor_gen_t { public: - /* Members defined in data_apply_bitmap */ - const char* coded_values; - const char* bitmap; - const char* missing_value; - const char* number_of_data_points; - const char* number_of_values; - const char* binary_scale_factor; -}; - -class grib_accessor_class_data_apply_bitmap_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_data_apply_bitmap_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_data_apply_bitmap_t() : + grib_accessor_gen_t() { class_name_ = "data_apply_bitmap"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_apply_bitmap_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int compare(grib_accessor*, grib_accessor*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + int compare(grib_accessor*) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; + +private: + const char* coded_values_ = nullptr; + const char* bitmap_ = nullptr; + const char* missing_value_ = nullptr; + const char* number_of_data_points_ = nullptr; + const char* number_of_values_ = nullptr; + const char* binary_scale_factor_ = nullptr; + + template int unpack(T* val, size_t* len); }; diff --git a/src/accessor/grib_accessor_class_data_apply_boustrophedonic.cc b/src/accessor/grib_accessor_class_data_apply_boustrophedonic.cc index 2569a05cb..a711969f4 100644 --- a/src/accessor/grib_accessor_class_data_apply_boustrophedonic.cc +++ b/src/accessor/grib_accessor_class_data_apply_boustrophedonic.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,53 +10,47 @@ #include "grib_accessor_class_data_apply_boustrophedonic.h" -grib_accessor_class_data_apply_boustrophedonic_t _grib_accessor_class_data_apply_boustrophedonic{ "data_apply_boustrophedonic" }; -grib_accessor_class* grib_accessor_class_data_apply_boustrophedonic = &_grib_accessor_class_data_apply_boustrophedonic; +grib_accessor_data_apply_boustrophedonic_t _grib_accessor_data_apply_boustrophedonic{}; +grib_accessor* grib_accessor_data_apply_boustrophedonic = &_grib_accessor_data_apply_boustrophedonic; - -void grib_accessor_class_data_apply_boustrophedonic_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_apply_boustrophedonic_t::init(const long v, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, v, args); - grib_accessor_data_apply_boustrophedonic_t* self = (grib_accessor_data_apply_boustrophedonic_t*)a; + grib_accessor_gen_t::init(v, args); - int n = 0; - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->numberOfRows = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->numberOfColumns = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->numberOfPoints = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->pl = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); + int n = 0; + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + numberOfRows_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + numberOfColumns_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + numberOfPoints_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + pl_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); - a->length = 0; + length_ = 0; } -void grib_accessor_class_data_apply_boustrophedonic_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_data_apply_boustrophedonic_t::dump(grib_dumper* dumper) { - grib_dump_values(dumper, a); + grib_dump_values(dumper, this); } -int grib_accessor_class_data_apply_boustrophedonic_t::value_count(grib_accessor* a, long* numberOfPoints) +int grib_accessor_data_apply_boustrophedonic_t::value_count(long* numberOfPoints) { - grib_accessor_data_apply_boustrophedonic_t* self = (grib_accessor_data_apply_boustrophedonic_t*)a; - *numberOfPoints = 0; - return grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints, numberOfPoints); + return grib_get_long_internal(grib_handle_of_accessor(this), numberOfPoints_, numberOfPoints); } template -static int unpack(grib_accessor* a, T* val, size_t* len) +int grib_accessor_data_apply_boustrophedonic_t::unpack(T* val, size_t* len) { - grib_accessor_data_apply_boustrophedonic_t* self = (grib_accessor_data_apply_boustrophedonic_t*)a; - - size_t plSize = 0; - long* pl = 0; - double* values = 0; - double* pvalues = 0; - T* pval = 0; - size_t valuesSize = 0; + size_t plSize = 0; + long* pl = 0; + double* values = 0; + double* pvalues = 0; + T* pval = 0; + size_t valuesSize = 0; long i, j; int ret; long numberOfPoints, numberOfRows, numberOfColumns; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints, &numberOfPoints); + ret = grib_get_long_internal(grib_handle_of_accessor(this), numberOfPoints_, &numberOfPoints); if (ret) return ret; @@ -66,7 +59,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return GRIB_ARRAY_TOO_SMALL; } - ret = grib_get_size(grib_handle_of_accessor(a), self->values, &valuesSize); + ret = grib_get_size(grib_handle_of_accessor(this), values_, &valuesSize); if (ret) return ret; @@ -75,31 +68,31 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return 0; if (valuesSize != numberOfPoints) { - grib_context_log(a->context, GRIB_LOG_ERROR, "boustrophedonic ordering error: ( %s=%ld ) != (sizeOf(%s)=%ld)", - self->numberOfPoints, numberOfPoints, self->values, (long)valuesSize); + grib_context_log(context_, GRIB_LOG_ERROR, "boustrophedonic ordering error: ( %s=%ld ) != (sizeOf(%s)=%ld)", + numberOfPoints, numberOfPoints, values_, (long)valuesSize); return GRIB_DECODING_ERROR; } - values = (double*)grib_context_malloc_clear(a->context, sizeof(double) * numberOfPoints); - ret = grib_get_double_array_internal(grib_handle_of_accessor(a), self->values, values, &valuesSize); + values = (double*)grib_context_malloc_clear(context_, sizeof(double) * numberOfPoints); + ret = grib_get_double_array_internal(grib_handle_of_accessor(this), values_, values, &valuesSize); if (ret) return ret; pvalues = values; pval = val; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfRows, &numberOfRows); + ret = grib_get_long_internal(grib_handle_of_accessor(this), numberOfRows_, &numberOfRows); if (ret) return ret; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfColumns, &numberOfColumns); + ret = grib_get_long_internal(grib_handle_of_accessor(this), numberOfColumns_, &numberOfColumns); if (ret) return ret; - if (grib_get_size(grib_handle_of_accessor(a), self->pl, &plSize) == GRIB_SUCCESS) { + if (grib_get_size(grib_handle_of_accessor(this), pl_, &plSize) == GRIB_SUCCESS) { Assert(plSize == numberOfRows); - pl = (long*)grib_context_malloc_clear(a->context, sizeof(long) * plSize); - ret = grib_get_long_array_internal(grib_handle_of_accessor(a), self->pl, pl, &plSize); + pl = (long*)grib_context_malloc_clear(context_, sizeof(long) * plSize); + ret = grib_get_long_array_internal(grib_handle_of_accessor(this), pl_, pl, &plSize); if (ret) return ret; @@ -116,7 +109,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len) } } - grib_context_free(a->context, pl); + grib_context_free(context_, pl); } else { for (j = 0; j < numberOfRows; j++) { @@ -133,52 +126,52 @@ static int unpack(grib_accessor* a, T* val, size_t* len) } } - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } -int grib_accessor_class_data_apply_boustrophedonic_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_apply_boustrophedonic_t::unpack_double(double* val, size_t* len) { - return unpack(a, val, len); + return unpack(val, len); } -int grib_accessor_class_data_apply_boustrophedonic_t::unpack_float(grib_accessor* a, float* val, size_t* len) +int grib_accessor_data_apply_boustrophedonic_t::unpack_float(float* val, size_t* len) { - return unpack(a, val, len); + return unpack(val, len); } -int grib_accessor_class_data_apply_boustrophedonic_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_apply_boustrophedonic_t::unpack_double_element(size_t idx, double* val) { size_t size; double* values; /* GRIB-564: The index idx relates to codedValues NOT values! */ - int err = grib_get_size(a->parent->h, "codedValues", &size); + int err = grib_get_size(parent_->h, "codedValues", &size); if (err) return err; if (idx > size) return GRIB_INVALID_NEAREST; - values = (double*)grib_context_malloc_clear(a->parent->h->context, size * sizeof(double)); - err = grib_get_double_array(a->parent->h, "codedValues", values, &size); + values = (double*)grib_context_malloc_clear(parent_->h->context, size * sizeof(double)); + err = grib_get_double_array(parent_->h, "codedValues", values, &size); if (err) { - grib_context_free(a->parent->h->context, values); + grib_context_free(parent_->h->context, values); return err; } *val = values[idx]; - grib_context_free(a->parent->h->context, values); + grib_context_free(parent_->h->context, values); return GRIB_SUCCESS; } -int grib_accessor_class_data_apply_boustrophedonic_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_apply_boustrophedonic_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { size_t size = 0, i = 0; double* values; int err = 0; /* GRIB-564: The indexes in index_array relate to codedValues NOT values! */ - err = grib_get_size(grib_handle_of_accessor(a), "codedValues", &size); + err = grib_get_size(grib_handle_of_accessor(this), "codedValues", &size); if (err) return err; @@ -186,23 +179,21 @@ int grib_accessor_class_data_apply_boustrophedonic_t::unpack_double_element_set( if (index_array[i] > size) return GRIB_INVALID_ARGUMENT; } - values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); - err = grib_get_double_array(grib_handle_of_accessor(a), "codedValues", values, &size); + values = (double*)grib_context_malloc_clear(context_, size * sizeof(double)); + err = grib_get_double_array(grib_handle_of_accessor(this), "codedValues", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } for (i = 0; i < len; i++) { val_array[i] = values[index_array[i]]; } - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } -int grib_accessor_class_data_apply_boustrophedonic_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_apply_boustrophedonic_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_apply_boustrophedonic_t* self = (grib_accessor_data_apply_boustrophedonic_t*)a; - size_t plSize = 0; long* pl = 0; double* values = 0; @@ -212,7 +203,7 @@ int grib_accessor_class_data_apply_boustrophedonic_t::pack_double(grib_accessor* long i, j; long numberOfPoints, numberOfRows, numberOfColumns; - int ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints, &numberOfPoints); + int ret = grib_get_long_internal(grib_handle_of_accessor(this), numberOfPoints_, &numberOfPoints); if (ret) return ret; @@ -223,23 +214,23 @@ int grib_accessor_class_data_apply_boustrophedonic_t::pack_double(grib_accessor* valuesSize = numberOfPoints; - values = (double*)grib_context_malloc_clear(a->context, sizeof(double) * numberOfPoints); + values = (double*)grib_context_malloc_clear(context_, sizeof(double) * numberOfPoints); pvalues = values; pval = (double*)val; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfRows, &numberOfRows); + ret = grib_get_long_internal(grib_handle_of_accessor(this), numberOfRows_, &numberOfRows); if (ret) return ret; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfColumns, &numberOfColumns); + ret = grib_get_long_internal(grib_handle_of_accessor(this), numberOfColumns_, &numberOfColumns); if (ret) return ret; - if (grib_get_size(grib_handle_of_accessor(a), self->pl, &plSize) == GRIB_SUCCESS) { + if (grib_get_size(grib_handle_of_accessor(this), pl_, &plSize) == GRIB_SUCCESS) { Assert(plSize == numberOfRows); - pl = (long*)grib_context_malloc_clear(a->context, sizeof(long) * plSize); - ret = grib_get_long_array_internal(grib_handle_of_accessor(a), self->pl, pl, &plSize); + pl = (long*)grib_context_malloc_clear(context_, sizeof(long) * plSize); + ret = grib_get_long_array_internal(grib_handle_of_accessor(this), pl_, pl, &plSize); if (ret) return ret; @@ -257,7 +248,7 @@ int grib_accessor_class_data_apply_boustrophedonic_t::pack_double(grib_accessor* } } - grib_context_free(a->context, pl); + grib_context_free(context_, pl); } else { for (j = 0; j < numberOfRows; j++) { @@ -273,16 +264,16 @@ int grib_accessor_class_data_apply_boustrophedonic_t::pack_double(grib_accessor* } } } - ret = grib_set_double_array_internal(grib_handle_of_accessor(a), self->values, values, valuesSize); + ret = grib_set_double_array_internal(grib_handle_of_accessor(this), values_, values, valuesSize); if (ret) return ret; - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } -int grib_accessor_class_data_apply_boustrophedonic_t::get_native_type(grib_accessor* a) +long grib_accessor_data_apply_boustrophedonic_t::get_native_type() { return GRIB_TYPE_DOUBLE; } diff --git a/src/accessor/grib_accessor_class_data_apply_boustrophedonic.h b/src/accessor/grib_accessor_class_data_apply_boustrophedonic.h index 97987d217..1c6b78799 100644 --- a/src/accessor/grib_accessor_class_data_apply_boustrophedonic.h +++ b/src/accessor/grib_accessor_class_data_apply_boustrophedonic.h @@ -15,26 +15,25 @@ class grib_accessor_data_apply_boustrophedonic_t : public grib_accessor_gen_t { public: - /* Members defined in data_apply_boustrophedonic */ - const char* values; - const char* numberOfRows; - const char* numberOfColumns; - const char* numberOfPoints; - const char* pl; -}; - -class grib_accessor_class_data_apply_boustrophedonic_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_data_apply_boustrophedonic_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_data_apply_boustrophedonic_t() : + grib_accessor_gen_t() { class_name_ = "data_apply_boustrophedonic"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_apply_boustrophedonic_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; + +private: + const char* values_ = nullptr; + const char* numberOfRows_ = nullptr; + const char* numberOfColumns_ = nullptr; + const char* numberOfPoints_ = nullptr; + const char* pl_ = nullptr; + + template int unpack(T* val, size_t* len); }; diff --git a/src/accessor/grib_accessor_class_data_apply_boustrophedonic_bitmap.cc b/src/accessor/grib_accessor_class_data_apply_boustrophedonic_bitmap.cc index 4ff1322d3..a0783f98b 100644 --- a/src/accessor/grib_accessor_class_data_apply_boustrophedonic_bitmap.cc +++ b/src/accessor/grib_accessor_class_data_apply_boustrophedonic_bitmap.cc @@ -10,54 +10,49 @@ #include "grib_accessor_class_data_apply_boustrophedonic_bitmap.h" -grib_accessor_class_data_apply_boustrophedonic_bitmap_t _grib_accessor_class_data_apply_boustrophedonic_bitmap{ "data_apply_boustrophedonic_bitmap" }; -grib_accessor_class* grib_accessor_class_data_apply_boustrophedonic_bitmap = &_grib_accessor_class_data_apply_boustrophedonic_bitmap; +grib_accessor_data_apply_boustrophedonic_bitmap_t _grib_accessor_data_apply_boustrophedonic_bitmap{}; +grib_accessor* grib_accessor_data_apply_boustrophedonic_bitmap = &_grib_accessor_data_apply_boustrophedonic_bitmap; - -void grib_accessor_class_data_apply_boustrophedonic_bitmap_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_apply_boustrophedonic_bitmap_t::init(const long v, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, v, args); - grib_accessor_data_apply_boustrophedonic_bitmap_t* self = (grib_accessor_data_apply_boustrophedonic_bitmap_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); + grib_accessor_gen_t::init(v, args); + int n = 0; + grib_handle* gh = grib_handle_of_accessor(this); - int n = 0; - self->coded_values = grib_arguments_get_name(gh, args, n++); - self->bitmap = grib_arguments_get_name(gh, args, n++); - self->missing_value = grib_arguments_get_name(gh, args, n++); - self->binary_scale_factor = grib_arguments_get_name(gh, args, n++); + coded_values_ = grib_arguments_get_name(gh, args, n++); + bitmap_ = grib_arguments_get_name(gh, args, n++); + missing_value_ = grib_arguments_get_name(gh, args, n++); + binary_scale_factor_ = grib_arguments_get_name(gh, args, n++); - self->numberOfRows = grib_arguments_get_name(gh, args, n++); - self->numberOfColumns = grib_arguments_get_name(gh, args, n++); - self->numberOfPoints = grib_arguments_get_name(gh, args, n++); + numberOfRows_ = grib_arguments_get_name(gh, args, n++); + numberOfColumns_ = grib_arguments_get_name(gh, args, n++); + numberOfPoints_ = grib_arguments_get_name(gh, args, n++); - a->length = 0; + length_ = 0; } -void grib_accessor_class_data_apply_boustrophedonic_bitmap_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_data_apply_boustrophedonic_bitmap_t::dump(grib_dumper* dumper) { - grib_dump_values(dumper, a); + grib_dump_values(dumper, this); } -int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::value_count(grib_accessor* a, long* count) +int grib_accessor_data_apply_boustrophedonic_bitmap_t::value_count(long* count) { - grib_accessor_data_apply_boustrophedonic_bitmap_t* self = (grib_accessor_data_apply_boustrophedonic_bitmap_t*)a; - - grib_handle* gh = grib_handle_of_accessor(a); + grib_handle* gh = grib_handle_of_accessor(this); size_t len = 0; int ret = 0; /* This accessor is for data with a bitmap after all */ - Assert(grib_find_accessor(gh, self->bitmap)); + Assert(grib_find_accessor(gh, bitmap_)); - ret = grib_get_size(gh, self->bitmap, &len); + ret = grib_get_size(gh, bitmap_, &len); *count = len; return ret; } -int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_apply_boustrophedonic_bitmap_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_apply_boustrophedonic_bitmap_t* self = (grib_accessor_data_apply_boustrophedonic_bitmap_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); + grib_handle* gh = grib_handle_of_accessor(this); size_t i = 0, j = 0, n_vals = 0, irow = 0; long nn = 0; @@ -67,29 +62,29 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double(grib_ double missing_value = 0; long numberOfPoints, numberOfRows, numberOfColumns; - err = a->value_count(&nn); + err = value_count(&nn); n_vals = nn; if (err) return err; - err = grib_get_long_internal(gh, self->numberOfRows, &numberOfRows); + err = grib_get_long_internal(gh, numberOfRows_, &numberOfRows); if (err) return err; - err = grib_get_long_internal(gh, self->numberOfColumns, &numberOfColumns); + err = grib_get_long_internal(gh, numberOfColumns_, &numberOfColumns); if (err) return err; - err = grib_get_long_internal(gh, self->numberOfPoints, &numberOfPoints); + err = grib_get_long_internal(gh, numberOfPoints_, &numberOfPoints); if (err) return err; Assert(nn == numberOfPoints); - if (!grib_find_accessor(gh, self->bitmap)) - return grib_get_double_array_internal(gh, self->coded_values, val, len); + if (!grib_find_accessor(gh, bitmap_)) + return grib_get_double_array_internal(gh, coded_values_, val, len); - if ((err = grib_get_size(gh, self->coded_values, &coded_n_vals)) != GRIB_SUCCESS) + if ((err = grib_get_size(gh, coded_values_, &coded_n_vals)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(gh, self->missing_value, &missing_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(gh, missing_value_, &missing_value)) != GRIB_SUCCESS) return err; if (*len < n_vals) { @@ -105,21 +100,21 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double(grib_ return GRIB_SUCCESS; } - if ((err = grib_get_double_array_internal(gh, self->bitmap, val, &n_vals)) != GRIB_SUCCESS) + if ((err = grib_get_double_array_internal(gh, bitmap_, val, &n_vals)) != GRIB_SUCCESS) return err; - coded_vals = (double*)grib_context_malloc(a->context, coded_n_vals * sizeof(double)); + coded_vals = (double*)grib_context_malloc(context_, coded_n_vals * sizeof(double)); if (coded_vals == NULL) return GRIB_OUT_OF_MEMORY; - if ((err = grib_get_double_array_internal(gh, self->coded_values, coded_vals, &coded_n_vals)) != GRIB_SUCCESS) { - grib_context_free(a->context, coded_vals); + if ((err = grib_get_double_array_internal(gh, coded_values_, coded_vals, &coded_n_vals)) != GRIB_SUCCESS) { + grib_context_free(context_, coded_vals); return err; } - grib_context_log(a->context, GRIB_LOG_DEBUG, - "grib_accessor_class_data_apply_boustrophedonic_bitmap: unpack_double : creating %s, %d values", - a->name, n_vals); + grib_context_log(context_, GRIB_LOG_DEBUG, + "grib_accessor_data_apply_boustrophedonic_bitmap: unpack_double : creating %s, %d values", + name_, n_vals); /* Boustrophedonic ordering (See GRIB-472): * Values on even rank lines (the initial line scanned having rank 1) are swapped @@ -147,11 +142,11 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double(grib_ else { val[i] = coded_vals[j++]; if (j > coded_n_vals) { - grib_context_free(a->context, coded_vals); - grib_context_log(a->context, GRIB_LOG_ERROR, - "grib_accessor_class_data_apply_boustrophedonic_bitmap [%s]:" + grib_context_free(context_, coded_vals); + grib_context_log(context_, GRIB_LOG_ERROR, + "grib_accessor_data_apply_boustrophedonic_bitmap [%s]:" " unpack_double : number of coded values does not match bitmap %ld %ld", - a->name, coded_n_vals, n_vals); + name_, coded_n_vals, n_vals); return GRIB_ARRAY_TOO_SMALL; } @@ -160,14 +155,13 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double(grib_ *len = n_vals; - grib_context_free(a->context, coded_vals); + grib_context_free(context_, coded_vals); return err; } -int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_apply_boustrophedonic_bitmap_t::unpack_double_element(size_t idx, double* val) { - grib_accessor_data_apply_boustrophedonic_bitmap_t* self = (grib_accessor_data_apply_boustrophedonic_bitmap_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); + grib_handle* gh = grib_handle_of_accessor(this); int err = 0, i = 0; size_t cidx = 0; double missing_value = 0; @@ -175,18 +169,18 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double_eleme size_t n_vals = 0; long nn = 0; - err = a->value_count(&nn); + err = value_count(&nn); n_vals = nn; if (err) return err; - if (!grib_find_accessor(gh, self->bitmap)) - return grib_get_double_element_internal(gh, self->coded_values, idx, val); + if (!grib_find_accessor(gh, bitmap_)) + return grib_get_double_element_internal(gh, coded_values_, idx, val); - if ((err = grib_get_double_internal(gh, self->missing_value, &missing_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(gh, missing_value_, &missing_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_element_internal(gh, self->bitmap, idx, val)) != GRIB_SUCCESS) + if ((err = grib_get_double_element_internal(gh, bitmap_, idx, val)) != GRIB_SUCCESS) return err; if (*val == 0) { @@ -194,11 +188,11 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double_eleme return GRIB_SUCCESS; } - bvals = (double*)grib_context_malloc(a->context, n_vals * sizeof(double)); + bvals = (double*)grib_context_malloc(context_, n_vals * sizeof(double)); if (bvals == NULL) return GRIB_OUT_OF_MEMORY; - if ((err = grib_get_double_array_internal(gh, self->bitmap, bvals, &n_vals)) != GRIB_SUCCESS) + if ((err = grib_get_double_array_internal(gh, bitmap_, bvals, &n_vals)) != GRIB_SUCCESS) return err; cidx = 0; @@ -206,15 +200,14 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double_eleme cidx += bvals[i]; } - grib_context_free(a->context, bvals); + grib_context_free(context_, bvals); - return grib_get_double_element_internal(gh, self->coded_values, cidx, val); + return grib_get_double_element_internal(gh, coded_values_, cidx, val); } -int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_apply_boustrophedonic_bitmap_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { - grib_accessor_data_apply_boustrophedonic_bitmap_t* self = (grib_accessor_data_apply_boustrophedonic_bitmap_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); + grib_handle* gh = grib_handle_of_accessor(this); int err = 0, all_missing = 1; size_t cidx = 0; /* index into the coded_values array */ size_t* cidx_array = NULL; /* array of indexes into the coded_values */ @@ -224,17 +217,17 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double_eleme size_t n_vals = 0, i = 0, j = 0, idx = 0, count_1s = 0, ci = 0; long nn = 0; - err = a->value_count(&nn); + err = value_count(&nn); n_vals = nn; if (err) return err; - if (!grib_find_accessor(gh, self->bitmap)) - return grib_get_double_element_set_internal(gh, self->coded_values, index_array, len, val_array); + if (!grib_find_accessor(gh, bitmap_)) + return grib_get_double_element_set_internal(gh, coded_values_, index_array, len, val_array); - if ((err = grib_get_double_internal(gh, self->missing_value, &missing_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(gh, missing_value_, &missing_value)) != GRIB_SUCCESS) return err; - err = grib_get_double_element_set_internal(gh, self->bitmap, index_array, len, val_array); + err = grib_get_double_element_set_internal(gh, bitmap_, index_array, len, val_array); if (err) return err; for (i = 0; i < len; i++) { if (val_array[i] == 0) { @@ -253,14 +246,14 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double_eleme /* At this point val_array contains entries which are either missing_value or 1 */ /* Now we need to dig into the codes values with index array of count_1s */ - bvals = (double*)grib_context_malloc(a->context, n_vals * sizeof(double)); + bvals = (double*)grib_context_malloc(context_, n_vals * sizeof(double)); if (!bvals) return GRIB_OUT_OF_MEMORY; - if ((err = grib_get_double_array_internal(gh, self->bitmap, bvals, &n_vals)) != GRIB_SUCCESS) + if ((err = grib_get_double_array_internal(gh, bitmap_, bvals, &n_vals)) != GRIB_SUCCESS) return err; - cidx_array = (size_t*)grib_context_malloc(a->context, count_1s * sizeof(size_t)); - cval_array = (double*)grib_context_malloc(a->context, count_1s * sizeof(double)); + cidx_array = (size_t*)grib_context_malloc(context_, count_1s * sizeof(size_t)); + cval_array = (double*)grib_context_malloc(context_, count_1s * sizeof(double)); ci = 0; for (i = 0; i < len; i++) { @@ -274,7 +267,7 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double_eleme cidx_array[ci++] = cidx; } } - err = grib_get_double_element_set_internal(gh, self->coded_values, cidx_array, count_1s, cval_array); + err = grib_get_double_element_set_internal(gh, coded_values_, cidx_array, count_1s, cval_array); if (err) return err; /* Transfer from cval_array to our result val_array */ @@ -285,18 +278,16 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::unpack_double_eleme } } - grib_context_free(a->context, bvals); - grib_context_free(a->context, cidx_array); - grib_context_free(a->context, cval_array); + grib_context_free(context_, bvals); + grib_context_free(context_, cidx_array); + grib_context_free(context_, cval_array); return GRIB_SUCCESS; } -int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_apply_boustrophedonic_bitmap_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_apply_boustrophedonic_bitmap_t* self = (grib_accessor_data_apply_boustrophedonic_bitmap_t*)a; - - grib_handle* gh = grib_handle_of_accessor(a); + grib_handle* gh = grib_handle_of_accessor(this); int err = 0; size_t bmaplen = *len; size_t irow = 0; @@ -311,30 +302,30 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::pack_double(grib_ac if (*len == 0) return GRIB_NO_VALUES; - if (!grib_find_accessor(gh, self->bitmap)) { - err = grib_set_double_array_internal(gh, self->coded_values, val, *len); - /*printf("SETTING TOTAL number_of_data_points %s %ld\n",self->number_of_data_points,*len);*/ - /*if(self->number_of_data_points) - grib_set_long_internal(gh,self->number_of_data_points,*len);*/ + if (!grib_find_accessor(gh, bitmap_)) { + err = grib_set_double_array_internal(gh, coded_values_, val, *len); + /*printf("SETTING TOTAL number_of_data_points %s %ld\n",number_of_data_points_ ,*len);*/ + /*if(number_of_data_points_ ) + grib_set_long_internal(gh,number_of_data_points_ ,*len);*/ return err; } - if ((err = grib_get_double_internal(gh, self->missing_value, &missing_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(gh, missing_value_, &missing_value)) != GRIB_SUCCESS) return err; - err = grib_get_long_internal(gh, self->numberOfRows, &numberOfRows); + err = grib_get_long_internal(gh, numberOfRows_, &numberOfRows); if (err) return err; - err = grib_get_long_internal(gh, self->numberOfColumns, &numberOfColumns); + err = grib_get_long_internal(gh, numberOfColumns_, &numberOfColumns); if (err) return err; - err = grib_get_long_internal(gh, self->numberOfPoints, &numberOfPoints); + err = grib_get_long_internal(gh, numberOfPoints_, &numberOfPoints); if (err) return err; Assert(numberOfPoints == bmaplen); /* Create a copy of the incoming 'val' array because we're going to change it */ - values = (double*)grib_context_malloc_clear(a->context, sizeof(double) * numberOfPoints); + values = (double*)grib_context_malloc_clear(context_, sizeof(double) * numberOfPoints); if (!values) return GRIB_OUT_OF_MEMORY; for (i = 0; i < numberOfPoints; ++i) { @@ -356,19 +347,19 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::pack_double(grib_ac } } /* Now set the bitmap based on the array with the boustrophedonic ordering */ - if ((err = grib_set_double_array_internal(gh, self->bitmap, values, bmaplen)) != GRIB_SUCCESS) + if ((err = grib_set_double_array_internal(gh, bitmap_, values, bmaplen)) != GRIB_SUCCESS) return err; - grib_context_free(a->context, values); + grib_context_free(context_, values); coded_n_vals = *len; if (coded_n_vals < 1) { - err = grib_set_double_array_internal(gh, self->coded_values, NULL, 0); + err = grib_set_double_array_internal(gh, coded_values_, NULL, 0); return err; } - coded_vals = (double*)grib_context_malloc_clear(a->context, coded_n_vals * sizeof(double)); + coded_vals = (double*)grib_context_malloc_clear(context_, coded_n_vals * sizeof(double)); if (!coded_vals) return GRIB_OUT_OF_MEMORY; @@ -380,23 +371,23 @@ int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::pack_double(grib_ac } } - err = grib_set_double_array_internal(gh, self->coded_values, coded_vals, j); + err = grib_set_double_array_internal(gh, coded_values_, coded_vals, j); if (j == 0) { - /*if (self->number_of_values) - err=grib_set_long_internal(gh,self->number_of_values,0);*/ - if (self->binary_scale_factor) - err = grib_set_long_internal(gh, self->binary_scale_factor, 0); + /*if (number_of_values_ ) + err=grib_set_long_internal(gh,number_of_values_ ,0);*/ + if (binary_scale_factor_) + err = grib_set_long_internal(gh, binary_scale_factor_, 0); } - grib_context_free(a->context, coded_vals); + grib_context_free(context_, coded_vals); return err; } -int grib_accessor_class_data_apply_boustrophedonic_bitmap_t::get_native_type(grib_accessor* a) +long grib_accessor_data_apply_boustrophedonic_bitmap_t::get_native_type() { // grib_accessor_data_apply_boustrophedonic_bitmap_t* self = (grib_accessor_data_apply_boustrophedonic_bitmap_t*)a; - // return grib_accessor_get_native_type(grib_find_accessor(grib_handle_of_accessor(a),self->coded_values)); + // return grib_accessor_get_native_type(grib_find_accessor(grib_handle_of_accessor(this),coded_values_ )); return GRIB_TYPE_DOUBLE; } diff --git a/src/accessor/grib_accessor_class_data_apply_boustrophedonic_bitmap.h b/src/accessor/grib_accessor_class_data_apply_boustrophedonic_bitmap.h index fee603876..21560f201 100644 --- a/src/accessor/grib_accessor_class_data_apply_boustrophedonic_bitmap.h +++ b/src/accessor/grib_accessor_class_data_apply_boustrophedonic_bitmap.h @@ -15,27 +15,24 @@ class grib_accessor_data_apply_boustrophedonic_bitmap_t : public grib_accessor_gen_t { public: - /* Members defined in data_apply_boustrophedonic_bitmap */ - const char* coded_values; - const char* bitmap; - const char* missing_value; - const char* binary_scale_factor; - const char* numberOfRows; - const char* numberOfColumns; - const char* numberOfPoints; -}; - -class grib_accessor_class_data_apply_boustrophedonic_bitmap_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_data_apply_boustrophedonic_bitmap_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_data_apply_boustrophedonic_bitmap_t() : + grib_accessor_gen_t() { class_name_ = "data_apply_boustrophedonic_bitmap"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_apply_boustrophedonic_bitmap_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; + +private: + const char* coded_values_ = nullptr; + const char* bitmap_ = nullptr; + const char* missing_value_ = nullptr; + const char* binary_scale_factor_ = nullptr; + const char* numberOfRows_ = nullptr; + const char* numberOfColumns_ = nullptr; + const char* numberOfPoints_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_ccsds_packing.cc b/src/accessor/grib_accessor_class_data_ccsds_packing.cc index 5b0813bfd..99fbd2dc3 100644 --- a/src/accessor/grib_accessor_class_data_ccsds_packing.cc +++ b/src/accessor/grib_accessor_class_data_ccsds_packing.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -18,37 +17,32 @@ #endif #endif +grib_accessor_data_ccsds_packing_t _grib_accessor_data_ccsds_packing{}; +grib_accessor* grib_accessor_data_ccsds_packing = &_grib_accessor_data_ccsds_packing; -grib_accessor_class_data_ccsds_packing_t _grib_accessor_class_data_ccsds_packing{ "data_ccsds_packing" }; -grib_accessor_class* grib_accessor_class_data_ccsds_packing = &_grib_accessor_class_data_ccsds_packing; - - -void grib_accessor_class_data_ccsds_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_ccsds_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_values_t::init(a, v, args); - grib_accessor_data_ccsds_packing_t* self = (grib_accessor_data_ccsds_packing_t*)a; + grib_accessor_values_t::init(v, args); - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); + number_of_values_ = grib_arguments_get_name(h, args, carg_++); + reference_value_ = grib_arguments_get_name(h, args, carg_++); + binary_scale_factor_ = grib_arguments_get_name(h, args, carg_++); + decimal_scale_factor_ = grib_arguments_get_name(h, args, carg_++); + optimize_scaling_factor_ = grib_arguments_get_name(h, args, carg_++); + bits_per_value_ = grib_arguments_get_name(h, args, carg_++); + number_of_data_points_ = grib_arguments_get_name(h, args, carg_++); + ccsds_flags_ = grib_arguments_get_name(h, args, carg_++); + ccsds_block_size_ = grib_arguments_get_name(h, args, carg_++); + ccsds_rsi_ = grib_arguments_get_name(h, args, carg_++); - self->number_of_values = grib_arguments_get_name(h, args, self->carg++); - self->reference_value = grib_arguments_get_name(h, args, self->carg++); - self->binary_scale_factor = grib_arguments_get_name(h, args, self->carg++); - self->decimal_scale_factor = grib_arguments_get_name(h, args, self->carg++); - self->optimize_scaling_factor = grib_arguments_get_name(h, args, self->carg++); - self->bits_per_value = grib_arguments_get_name(h, args, self->carg++); - self->number_of_data_points = grib_arguments_get_name(h, args, self->carg++); - self->ccsds_flags = grib_arguments_get_name(h, args, self->carg++); - self->ccsds_block_size = grib_arguments_get_name(h, args, self->carg++); - self->ccsds_rsi = grib_arguments_get_name(h, args, self->carg++); - - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_ccsds_packing_t::value_count(grib_accessor* a, long* count) +int grib_accessor_data_ccsds_packing_t::value_count(long* count) { - grib_accessor_data_ccsds_packing_t* self = (grib_accessor_data_ccsds_packing_t*)a; *count = 0; - return grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_values, count); + return grib_get_long_internal(grib_handle_of_accessor(this), number_of_values_, count); } #if defined(HAVE_LIBAEC) || defined(HAVE_AEC) @@ -90,12 +84,10 @@ static void print_aec_stream_info(struct aec_stream* strm, const char* func) fprintf(stderr, "ECCODES DEBUG CCSDS %s aec_stream.avail_in=%lu\n", func, strm->avail_in); } -int grib_accessor_class_data_ccsds_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +#define MAX_BITS_PER_VALUE 32 +int grib_accessor_data_ccsds_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_ccsds_packing_t* self = (grib_accessor_data_ccsds_packing_t*)a; - - grib_handle* hand = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; + grib_handle* hand = grib_handle_of_accessor(this); int err = GRIB_SUCCESS; size_t buflen = 0, i = 0; bool is_constant_field = false; @@ -119,34 +111,34 @@ int grib_accessor_class_data_ccsds_packing_t::pack_double(grib_accessor* a, cons struct aec_stream strm; - self->dirty = 1; + dirty_ = 1; n_vals = *len; - if ((err = grib_get_long_internal(hand, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(hand, reference_value_, &reference_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(hand, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(hand, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return err; - // if ((err = grib_get_long_internal(gh, self->optimize_scaling_factor, &optimize_scaling_factor)) != GRIB_SUCCESS) + // if ((err = grib_get_long_internal(gh, optimize_scaling_factor_ , &optimize_scaling_factor)) != GRIB_SUCCESS) // return err; - if ((err = grib_get_long_internal(hand, self->ccsds_flags, &ccsds_flags)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, ccsds_flags_, &ccsds_flags)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(hand, self->ccsds_block_size, &ccsds_block_size)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, ccsds_block_size_, &ccsds_block_size)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(hand, self->ccsds_rsi, &ccsds_rsi)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, ccsds_rsi_, &ccsds_rsi)) != GRIB_SUCCESS) return err; modify_aec_flags(&ccsds_flags); // Special case if (*len == 0) { - grib_buffer_replace(a, NULL, 0, 1, 1); + grib_buffer_replace(this, NULL, 0, 1, 1); return GRIB_SUCCESS; } @@ -174,31 +166,31 @@ int grib_accessor_class_data_ccsds_packing_t::pack_double(grib_accessor* a, cons } if (is_constant_field) { -#ifdef DEBUG + #ifdef DEBUG for (i = 1; i < n_vals; i++) { Assert(val[i] == val[0]); } -#endif - if (grib_get_nearest_smaller_value(hand, self->reference_value, val[0], &reference_value) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s %s: Unable to find nearest_smaller_value of %g for %s", cclass_name, __func__, min, self->reference_value); + #endif + if (grib_get_nearest_smaller_value(hand, reference_value_, val[0], &reference_value) != GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, + "%s %s: Unable to find nearest_smaller_value of %g for %s", class_name_, __func__, min, reference_value_); return GRIB_INTERNAL_ERROR; } - if ((err = grib_set_double_internal(hand, self->reference_value, reference_value)) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(hand, reference_value_, reference_value)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(hand, self->number_of_values, n_vals)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(hand, number_of_values_, n_vals)) != GRIB_SUCCESS) return err; bits_per_value = 0; // ECC-1387 - if ((err = grib_set_long_internal(hand, self->bits_per_value, bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(hand, bits_per_value_, bits_per_value)) != GRIB_SUCCESS) return err; - grib_buffer_replace(a, NULL, 0, 1, 1); + grib_buffer_replace(this, NULL, 0, 1, 1); return GRIB_SUCCESS; } - if ((err = grib_get_long_internal(hand, self->number_of_data_points, &number_of_data_points)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, number_of_data_points_, &number_of_data_points)) != GRIB_SUCCESS) return err; if (bits_per_value == 0 || (binary_scale_factor == 0 && decimal_scale_factor != 0)) { @@ -206,15 +198,15 @@ int grib_accessor_class_data_ccsds_packing_t::pack_double(grib_accessor* a, cons min *= d; max *= d; - if (grib_get_nearest_smaller_value(hand, self->reference_value, min, &reference_value) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s %s: Unable to find nearest_smaller_value of %g for %s", cclass_name, __func__, min, self->reference_value); + if (grib_get_nearest_smaller_value(hand, reference_value_, min, &reference_value) != GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, + "%s %s: Unable to find nearest_smaller_value of %g for %s", class_name_, __func__, min, reference_value_); return GRIB_INTERNAL_ERROR; } if (reference_value > min) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s %s: reference_value=%g min_value=%g diff=%g", cclass_name, __func__, reference_value, min, reference_value - min); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s %s: reference_value=%g min_value=%g diff=%g", class_name_, __func__, reference_value, min, reference_value - min); DEBUG_ASSERT(reference_value <= min); return GRIB_INTERNAL_ERROR; } @@ -251,23 +243,24 @@ int grib_accessor_class_data_ccsds_packing_t::pack_double(grib_accessor* a, cons range = (max - min); } - if (grib_get_nearest_smaller_value(hand, self->reference_value, min, &reference_value) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s %s: Unable to find nearest_smaller_value of %g for %s", cclass_name, __func__, min, self->reference_value); + if (grib_get_nearest_smaller_value(hand, reference_value_, min, &reference_value) != GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, + "%s %s: Unable to find nearest_smaller_value of %g for %s", class_name_, __func__, min, reference_value_); return GRIB_INTERNAL_ERROR; } d = codes_power(decimal_scale_factor, 10); } binary_scale_factor = grib_get_binary_scale_fact(max, reference_value, bits_per_value, &err); - divisor = codes_power(-binary_scale_factor, 2); + if (err) return err; + divisor = codes_power(-binary_scale_factor, 2); size_t nbytes = (bits_per_value + 7) / 8; // ECC-1602: use native a data type (4 bytes for uint32_t) for values that require only 3 bytes if (nbytes == 3) nbytes = 4; - encoded = reinterpret_cast(grib_context_buffer_malloc_clear(a->context, nbytes * n_vals)); + encoded = reinterpret_cast(grib_context_buffer_malloc_clear(context_, nbytes * n_vals)); if (!encoded) { err = GRIB_OUT_OF_MEMORY; @@ -309,40 +302,40 @@ int grib_accessor_class_data_ccsds_packing_t::pack_double(grib_accessor* a, cons } break; default: - grib_context_log(a->context, GRIB_LOG_ERROR, "%s pack_double: packing %s, bits_per_value=%ld (max 32)", - cclass_name, a->name, bits_per_value); + grib_context_log(context_, GRIB_LOG_ERROR, "%s pack_double: packing %s, bitsPerValue=%ld (max %ld)", + class_name_, name_, bits_per_value, MAX_BITS_PER_VALUE); err = GRIB_INVALID_BPV; goto cleanup; } - grib_context_log(a->context, GRIB_LOG_DEBUG, "%s pack_double: packing %s, %zu values", cclass_name, a->name, n_vals); + grib_context_log(context_, GRIB_LOG_DEBUG, "%s pack_double: packing %s, %zu values", class_name_, name_, n_vals); // ECC-1431: GRIB2: CCSDS encoding failure AEC_STREAM_ERROR buflen = (nbytes * n_vals) * 67 / 64 + 256; - buf = (unsigned char*)grib_context_buffer_malloc_clear(a->context, buflen); + buf = (unsigned char*)grib_context_buffer_malloc_clear(context_, buflen); if (!buf) { err = GRIB_OUT_OF_MEMORY; goto cleanup; } - if ((err = grib_set_double_internal(hand, self->reference_value, reference_value)) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(hand, reference_value_, reference_value)) != GRIB_SUCCESS) return err; { // Make sure we can decode it again double ref = 1e-100; - grib_get_double_internal(hand, self->reference_value, &ref); + grib_get_double_internal(hand, reference_value_, &ref); if (ref != reference_value) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s %s: %s (ref=%.10e != reference_value=%.10e)", - cclass_name, __func__, self->reference_value, ref, reference_value); + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: %s (ref=%.10e != reference_value=%.10e)", + class_name_, __func__, reference_value_, ref, reference_value); return GRIB_INTERNAL_ERROR; } } - if ((err = grib_set_long_internal(hand, self->binary_scale_factor, binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(hand, binary_scale_factor_, binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(hand, self->decimal_scale_factor, decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(hand, decimal_scale_factor_, decimal_scale_factor)) != GRIB_SUCCESS) return err; strm.flags = ccsds_flags; @@ -361,35 +354,33 @@ int grib_accessor_class_data_ccsds_packing_t::pack_double(grib_accessor* a, cons if (hand->context->debug) print_aec_stream_info(&strm, "pack_double"); if ((err = aec_buffer_encode(&strm)) != AEC_OK) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s %s: aec_buffer_encode error %d (%s)", - cclass_name, __func__, err, aec_get_error_message(err)); + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: aec_buffer_encode error %d (%s)", + class_name_, __func__, err, aec_get_error_message(err)); err = GRIB_ENCODING_ERROR; goto cleanup; } buflen = strm.total_out; - grib_buffer_replace(a, buf, buflen, 1, 1); + grib_buffer_replace(this, buf, buflen, 1, 1); cleanup: - grib_context_buffer_free(a->context, buf); - grib_context_buffer_free(a->context, encoded); + grib_context_buffer_free(context_, buf); + grib_context_buffer_free(context_, encoded); if (err == GRIB_SUCCESS) - err = grib_set_long_internal(hand, self->number_of_values, *len); + err = grib_set_long_internal(hand, number_of_values_, *len); if (err == GRIB_SUCCESS) - err = grib_set_long_internal(hand, self->bits_per_value, strm.bits_per_sample); + err = grib_set_long_internal(hand, bits_per_value_, strm.bits_per_sample); return err; } template -static int unpack(grib_accessor* a, T* val, size_t* len) +int grib_accessor_data_ccsds_packing_t::unpack(T* val, size_t* len) { static_assert(std::is_floating_point::value, "Requires floating point numbers"); - grib_accessor_data_ccsds_packing_t* self = (grib_accessor_data_ccsds_packing_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; + grib_handle* hand = grib_handle_of_accessor(this); int err = GRIB_SUCCESS, i = 0; size_t buflen = 0; @@ -413,28 +404,28 @@ static int unpack(grib_accessor* a, T* val, size_t* len) long ccsds_rsi; size_t nbytes; - self->dirty = 0; + dirty_ = 0; - if ((err = a->value_count(&nn)) != GRIB_SUCCESS) + if ((err = value_count(&nn)) != GRIB_SUCCESS) return err; n_vals = nn; - if ((err = grib_get_long_internal(hand, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(hand, reference_value_, &reference_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(hand, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(hand, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return err; // ECC-477: Don't call grib_get_long_internal to suppress error message being output - if ((err = grib_get_long(hand, self->ccsds_flags, &ccsds_flags)) != GRIB_SUCCESS) + if ((err = grib_get_long(hand, ccsds_flags_, &ccsds_flags)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(hand, self->ccsds_block_size, &ccsds_block_size)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, ccsds_block_size_, &ccsds_block_size)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(hand, self->ccsds_rsi, &ccsds_rsi)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, ccsds_rsi_, &ccsds_rsi)) != GRIB_SUCCESS) return err; modify_aec_flags(&ccsds_flags); @@ -454,9 +445,9 @@ static int unpack(grib_accessor* a, T* val, size_t* len) bscale = codes_power(binary_scale_factor, 2); dscale = codes_power(-decimal_scale_factor, 10); - buflen = a->byte_count(); + buflen = byte_count(); buf = (unsigned char*)hand->buffer->data; - buf += a->byte_offset(); + buf += byte_offset(); strm.flags = ccsds_flags; strm.bits_per_sample = bits_per_value; strm.block_size = ccsds_block_size; @@ -470,7 +461,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len) nbytes = 4; size = n_vals * nbytes; - decoded = (unsigned char*)grib_context_buffer_malloc_clear(a->context, size); + decoded = (unsigned char*)grib_context_buffer_malloc_clear(context_, size); if (!decoded) { err = GRIB_OUT_OF_MEMORY; goto cleanup; @@ -481,8 +472,8 @@ static int unpack(grib_accessor* a, T* val, size_t* len) if (hand->context->debug) print_aec_stream_info(&strm, "unpack_*"); if ((err = aec_buffer_decode(&strm)) != AEC_OK) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s %s: aec_buffer_decode error %d (%s)", - cclass_name, __func__, err, aec_get_error_message(err)); + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: aec_buffer_decode error %d (%s)", + class_name_, __func__, err, aec_get_error_message(err)); err = GRIB_DECODING_ERROR; goto cleanup; } @@ -508,8 +499,8 @@ static int unpack(grib_accessor* a, T* val, size_t* len) } break; default: - grib_context_log(a->context, GRIB_LOG_ERROR, "%s %s: unpacking %s, bits_per_value=%ld (max 32)", - cclass_name, __func__, a->name, bits_per_value); + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: unpacking %s, bitsPerValue=%ld (max %ld)", + class_name_, __func__, name_, bits_per_value, MAX_BITS_PER_VALUE); err = GRIB_INVALID_BPV; goto cleanup; } @@ -517,35 +508,33 @@ static int unpack(grib_accessor* a, T* val, size_t* len) *len = n_vals; cleanup: - grib_context_buffer_free(a->context, decoded); + grib_context_buffer_free(context_, decoded); return err; } -int grib_accessor_class_data_ccsds_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_ccsds_packing_t::unpack_double(double* val, size_t* len) { - return unpack(a, val, len); + return unpack(val, len); } -int grib_accessor_class_data_ccsds_packing_t::unpack_float(grib_accessor* a, float* val, size_t* len) +int grib_accessor_data_ccsds_packing_t::unpack_float(float* val, size_t* len) { - return unpack(a, val, len); + return unpack(val, len); } -int grib_accessor_class_data_ccsds_packing_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_ccsds_packing_t::unpack_double_element(size_t idx, double* val) { // The index idx relates to codedValues NOT values! - const grib_accessor_data_ccsds_packing_t* self = (grib_accessor_data_ccsds_packing_t*)a; - - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); int err = 0; size_t size = 0; long bits_per_value = 0; double reference_value = 0; double* values = NULL; - if ((err = grib_get_long_internal(hand, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(hand, reference_value_, &reference_value)) != GRIB_SUCCESS) return err; // Special case of constant field @@ -558,30 +547,29 @@ int grib_accessor_class_data_ccsds_packing_t::unpack_double_element(grib_accesso if (err) return err; if (idx > size) return GRIB_INVALID_ARGUMENT; - values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); + values = (double*)grib_context_malloc_clear(context_, size * sizeof(double)); err = grib_get_double_array(hand, "codedValues", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } *val = values[idx]; - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } -int grib_accessor_class_data_ccsds_packing_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_ccsds_packing_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { - const grib_accessor_data_ccsds_packing_t* self = (grib_accessor_data_ccsds_packing_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); size_t size = 0, i = 0; double* values = NULL; int err = 0; long bits_per_value = 0; double reference_value = 0; - if ((err = grib_get_long_internal(hand, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(hand, reference_value_, &reference_value)) != GRIB_SUCCESS) return err; // Special case of constant field @@ -593,7 +581,7 @@ int grib_accessor_class_data_ccsds_packing_t::unpack_double_element_set(grib_acc } // GRIB-564: The indexes in index_array relate to codedValues NOT values! - err = grib_get_size(grib_handle_of_accessor(a), "codedValues", &size); + err = grib_get_size(grib_handle_of_accessor(this), "codedValues", &size); if (err) return err; @@ -601,17 +589,17 @@ int grib_accessor_class_data_ccsds_packing_t::unpack_double_element_set(grib_acc if (index_array[i] > size) return GRIB_INVALID_ARGUMENT; } - values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); - err = grib_get_double_array(grib_handle_of_accessor(a), "codedValues", values, &size); + values = (double*)grib_context_malloc_clear(context_, size * sizeof(double)); + err = grib_get_double_array(grib_handle_of_accessor(this), "codedValues", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } for (i = 0; i < len; i++) { val_array[i] = values[index_array[i]]; } - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } @@ -623,29 +611,29 @@ static void print_error_feature_not_enabled(grib_context* c) "CCSDS support not enabled. " "Please rebuild with -DENABLE_AEC=ON (Adaptive Entropy Coding library)"); } -int grib_accessor_class_data_ccsds_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_ccsds_packing_t::pack_double(const double* val, size_t* len) { - print_error_feature_not_enabled(a->context); + print_error_feature_not_enabled(context_); return GRIB_FUNCTIONALITY_NOT_ENABLED; } -int grib_accessor_class_data_ccsds_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_ccsds_packing_t::unpack_double(double* val, size_t* len) { - print_error_feature_not_enabled(a->context); + print_error_feature_not_enabled(context_); return GRIB_FUNCTIONALITY_NOT_ENABLED; } -int grib_accessor_class_data_ccsds_packing_t::unpack_float(grib_accessor* a, float* val, size_t* len) +int grib_accessor_data_ccsds_packing_t::unpack_float(float* val, size_t* len) { - print_error_feature_not_enabled(a->context); + print_error_feature_not_enabled(context_); return GRIB_FUNCTIONALITY_NOT_ENABLED; } -int grib_accessor_class_data_ccsds_packing_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_ccsds_packing_t::unpack_double_element(size_t idx, double* val) { - print_error_feature_not_enabled(a->context); + print_error_feature_not_enabled(context_); return GRIB_FUNCTIONALITY_NOT_ENABLED; } -int grib_accessor_class_data_ccsds_packing_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_ccsds_packing_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { - print_error_feature_not_enabled(a->context); + print_error_feature_not_enabled(context_); return GRIB_FUNCTIONALITY_NOT_ENABLED; } diff --git a/src/accessor/grib_accessor_class_data_ccsds_packing.h b/src/accessor/grib_accessor_class_data_ccsds_packing.h index 0f9430232..be170db8f 100644 --- a/src/accessor/grib_accessor_class_data_ccsds_packing.h +++ b/src/accessor/grib_accessor_class_data_ccsds_packing.h @@ -16,30 +16,28 @@ class grib_accessor_data_ccsds_packing_t : public grib_accessor_values_t { public: - /* Members defined in data_ccsds_packing */ - const char* number_of_values; - const char* reference_value; - const char* binary_scale_factor; - const char* decimal_scale_factor; - const char* optimize_scaling_factor; - const char* bits_per_value; - const char* number_of_data_points; - const char* ccsds_flags; - const char* ccsds_block_size; - const char* ccsds_rsi; -}; - - -class grib_accessor_class_data_ccsds_packing_t : public grib_accessor_class_values_t -{ -public: - grib_accessor_class_data_ccsds_packing_t(const char* name) : grib_accessor_class_values_t(name) {} + grib_accessor_data_ccsds_packing_t() : + grib_accessor_values_t() { class_name_ = "data_ccsds_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_ccsds_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; + +private: + const char* number_of_values_ = nullptr; + const char* reference_value_ = nullptr; + const char* binary_scale_factor_ = nullptr; + const char* decimal_scale_factor_ = nullptr; + const char* optimize_scaling_factor_ = nullptr; + const char* bits_per_value_ = nullptr; + const char* number_of_data_points_ = nullptr; + const char* ccsds_flags_ = nullptr; + const char* ccsds_block_size_ = nullptr; + const char* ccsds_rsi_ = nullptr; + + template int unpack(T* val, size_t* len); }; diff --git a/src/accessor/grib_accessor_class_data_complex_packing.cc b/src/accessor/grib_accessor_class_data_complex_packing.cc index d3cf71a34..1b33fef30 100644 --- a/src/accessor/grib_accessor_class_data_complex_packing.cc +++ b/src/accessor/grib_accessor_class_data_complex_packing.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,53 +10,50 @@ #include "grib_accessor_class_data_complex_packing.h" -grib_accessor_class_data_complex_packing_t _grib_accessor_class_data_complex_packing{ "data_complex_packing" }; -grib_accessor_class* grib_accessor_class_data_complex_packing = &_grib_accessor_class_data_complex_packing; +grib_accessor_data_complex_packing_t _grib_accessor_data_complex_packing{}; +grib_accessor* grib_accessor_data_complex_packing = &_grib_accessor_data_complex_packing; -void grib_accessor_class_data_complex_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_complex_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_simple_packing_t::init(a, v, args); - grib_accessor_data_complex_packing_t* self = (grib_accessor_data_complex_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); + grib_accessor_data_simple_packing_t::init(v, args); + grib_handle* gh = grib_handle_of_accessor(this); - self->GRIBEX_sh_bug_present = grib_arguments_get_name(gh, args, self->carg++); - self->ieee_floats = grib_arguments_get_name(gh, args, self->carg++); - self->laplacianOperatorIsSet = grib_arguments_get_name(gh, args, self->carg++); - self->laplacianOperator = grib_arguments_get_name(gh, args, self->carg++); - self->sub_j = grib_arguments_get_name(gh, args, self->carg++); - self->sub_k = grib_arguments_get_name(gh, args, self->carg++); - self->sub_m = grib_arguments_get_name(gh, args, self->carg++); - self->pen_j = grib_arguments_get_name(gh, args, self->carg++); - self->pen_k = grib_arguments_get_name(gh, args, self->carg++); - self->pen_m = grib_arguments_get_name(gh, args, self->carg++); + GRIBEX_sh_bug_present_ = grib_arguments_get_name(gh, args, carg_++); + ieee_floats_ = grib_arguments_get_name(gh, args, carg_++); + laplacianOperatorIsSet_ = grib_arguments_get_name(gh, args, carg_++); + laplacianOperator_ = grib_arguments_get_name(gh, args, carg_++); + sub_j_ = grib_arguments_get_name(gh, args, carg_++); + sub_k_ = grib_arguments_get_name(gh, args, carg_++); + sub_m_ = grib_arguments_get_name(gh, args, carg_++); + pen_j_ = grib_arguments_get_name(gh, args, carg_++); + pen_k_ = grib_arguments_get_name(gh, args, carg_++); + pen_m_ = grib_arguments_get_name(gh, args, carg_++); - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_complex_packing_t::value_count(grib_accessor* a, long* count) +int grib_accessor_data_complex_packing_t::value_count(long* count) { - grib_accessor_data_complex_packing_t* self = (grib_accessor_data_complex_packing_t*)a; - int ret = GRIB_SUCCESS; - grib_handle* gh = grib_handle_of_accessor(a); + grib_handle* gh = grib_handle_of_accessor(this); long pen_j = 0; long pen_k = 0; long pen_m = 0; *count = 0; - if (a->length == 0) + if (length_ == 0) return 0; - if ((ret = grib_get_long_internal(gh, self->pen_j, &pen_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, pen_j_, &pen_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->pen_k, &pen_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, pen_k_, &pen_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->pen_m, &pen_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, pen_m_, &pen_m)) != GRIB_SUCCESS) return ret; if (pen_j != pen_k || pen_j != pen_m) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Invalid pentagonal resolution parameters"); - grib_context_log(a->context, GRIB_LOG_ERROR, "pen_j=%ld, pen_k=%ld, pen_m=%ld", pen_j, pen_k, pen_m); + grib_context_log(context_, GRIB_LOG_ERROR, "Invalid pentagonal resolution parameters"); + grib_context_log(context_, GRIB_LOG_ERROR, "pen_j=%ld, pen_k=%ld, pen_m=%ld", pen_j, pen_k, pen_m); return GRIB_DECODING_ERROR; } *count = (pen_j + 1) * (pen_j + 2); @@ -169,11 +165,9 @@ double calculate_pfactor(const grib_context* ctx, const double* spectralField, l return pFactor; } -int grib_accessor_class_data_complex_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_complex_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_complex_packing_t* self = (grib_accessor_data_complex_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; + grib_handle* gh = grib_handle_of_accessor(this); size_t i = 0; int ret = GRIB_SUCCESS; @@ -228,42 +222,42 @@ int grib_accessor_class_data_complex_packing_t::pack_double(grib_accessor* a, co if (*len == 0) return GRIB_NO_VALUES; - if ((ret = grib_get_long_internal(gh, self->offsetdata, &offsetdata)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, offsetdata_, &offsetdata)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->optimize_scaling_factor, &optimize_scaling_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, optimize_scaling_factor_, &optimize_scaling_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->GRIBEX_sh_bug_present, &GRIBEX_sh_bug_present)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, GRIBEX_sh_bug_present_, &GRIBEX_sh_bug_present)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->ieee_floats, &ieee_floats)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, ieee_floats_, &ieee_floats)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->laplacianOperatorIsSet, &laplacianOperatorIsSet)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, laplacianOperatorIsSet_, &laplacianOperatorIsSet)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(gh, self->laplacianOperator, &laplacianOperator)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(gh, laplacianOperator_, &laplacianOperator)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->sub_j, &sub_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, sub_j_, &sub_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->sub_k, &sub_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, sub_k_, &sub_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->sub_m, &sub_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, sub_m_, &sub_m)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->pen_j, &pen_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, pen_j_, &pen_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->pen_k, &pen_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, pen_k_, &pen_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->pen_m, &pen_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, pen_m_, &pen_m)) != GRIB_SUCCESS) return ret; - self->dirty = 1; + dirty_ = 1; switch (ieee_floats) { case 0: @@ -283,20 +277,20 @@ int grib_accessor_class_data_complex_packing_t::pack_double(grib_accessor* a, co } if (sub_j != sub_k || sub_j != sub_m || pen_j != pen_k || pen_j != pen_m) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Invalid pentagonal resolution parameters", cclass_name); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Invalid pentagonal resolution parameters", class_name_); return GRIB_ENCODING_ERROR; } n_vals = (pen_j + 1) * (pen_j + 2); if (*len != n_vals) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Wrong number of values, expected %ld - got %zu", - cclass_name, n_vals, *len); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Wrong number of values, expected %ld - got %zu", + class_name_, n_vals, *len); return GRIB_INTERNAL_ERROR; } /* Data Quality checks */ - if (a->context->grib_data_quality_checks) { + if (context_->grib_data_quality_checks) { /* First value is the field's average */ double min_val = val[0]; double max_val = min_val; @@ -308,7 +302,7 @@ int grib_accessor_class_data_complex_packing_t::pack_double(grib_accessor* a, co double* values; d = codes_power(decimal_scale_factor, 10); if (d) { - values = (double*)grib_context_malloc_clear(a->context, sizeof(double) * n_vals); + values = (double*)grib_context_malloc_clear(context_, sizeof(double) * n_vals); for (i = 0; i < n_vals; i++) values[i] = val[i] * d; } @@ -316,20 +310,20 @@ int grib_accessor_class_data_complex_packing_t::pack_double(grib_accessor* a, co values = (double*)val; } buflen = n_vals * bytes; - buf = (unsigned char*)grib_context_malloc_clear(a->context, buflen); - grib_ieee_encode_array(a->context, values, n_vals, bytes, buf); + buf = (unsigned char*)grib_context_malloc_clear(context_, buflen); + grib_ieee_encode_array(context_, values, n_vals, bytes, buf); if (d) - grib_context_free(a->context, values); - grib_buffer_replace(a, buf, buflen, 1, 1); - grib_context_free(a->context, buf); + grib_context_free(context_, values); + grib_buffer_replace(this, buf, buflen, 1, 1); + grib_context_free(context_, buf); return 0; } if (!laplacianOperatorIsSet) { - laplacianOperator = calculate_pfactor(a->context, val, pen_j, sub_j); - if ((ret = grib_set_double_internal(gh, self->laplacianOperator, laplacianOperator)) != GRIB_SUCCESS) + laplacianOperator = calculate_pfactor(context_, val, pen_j, sub_j); + if ((ret = grib_set_double_internal(gh, laplacianOperator_, laplacianOperator)) != GRIB_SUCCESS) return ret; - grib_get_double_internal(gh, self->laplacianOperator, &laplacianOperator); + grib_get_double_internal(gh, laplacianOperator_, &laplacianOperator); } hsize = bytes * (sub_k + 1) * (sub_k + 2); @@ -337,7 +331,7 @@ int grib_accessor_class_data_complex_packing_t::pack_double(grib_accessor* a, co buflen = hsize + lsize; - buf = (unsigned char*)grib_context_malloc(a->context, buflen); + buf = (unsigned char*)grib_context_malloc(context_, buflen); hres = buf; lres = buf + hsize; @@ -346,7 +340,7 @@ int grib_accessor_class_data_complex_packing_t::pack_double(grib_accessor* a, co lpos = 0; hpos = 0; - scals = (double*)grib_context_malloc(a->context, maxv * sizeof(double)); + scals = (double*)grib_context_malloc(context_, maxv * sizeof(double)); if (!scals) return GRIB_OUT_OF_MEMORY; scals[0] = 0; @@ -396,27 +390,26 @@ int grib_accessor_class_data_complex_packing_t::pack_double(grib_accessor* a, co } if (optimize_scaling_factor) { - ret = grib_optimize_decimal_factor(a, self->reference_value, + ret = grib_optimize_decimal_factor(this, reference_value_, max, min, bits_per_value, 0, 1, &decimal_scale_factor, &binary_scale_factor, &reference_value); if (ret != GRIB_SUCCESS) { grib_context_log(gh->context, GRIB_LOG_ERROR, - "%s: Unable to find nearest_smaller_value of %g for %s", cclass_name, min, self->reference_value); + "%s: Unable to find nearest_smaller_value of %g for %s", class_name_, min, reference_value_); return GRIB_INTERNAL_ERROR; } d = codes_power(+decimal_scale_factor, 10); } else { d = codes_power(+decimal_scale_factor, 10); - if (grib_get_nearest_smaller_value(gh, self->reference_value, d * min, &reference_value) != GRIB_SUCCESS) { + if (grib_get_nearest_smaller_value(gh, reference_value_, d * min, &reference_value) != GRIB_SUCCESS) { grib_context_log(gh->context, GRIB_LOG_ERROR, - "%s: Unable to find nearest_smaller_value of %g for %s", cclass_name, d * min, self->reference_value); + "%s: Unable to find nearest_smaller_value of %g for %s", class_name_, d * min, reference_value_); return GRIB_INTERNAL_ERROR; } binary_scale_factor = grib_get_binary_scale_fact(d * max, reference_value, bits_per_value, &ret); - if (ret == GRIB_UNDERFLOW) { d = 0; binary_scale_factor = 0; @@ -424,7 +417,7 @@ int grib_accessor_class_data_complex_packing_t::pack_double(grib_accessor* a, co } else { if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Cannot compute binary_scale_factor", cclass_name); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Cannot compute binary_scale_factor", class_name_); return ret; } } @@ -468,14 +461,14 @@ int grib_accessor_class_data_complex_packing_t::pack_double(grib_accessor* a, co for (lcount = hcount; lcount < maxv; lcount++) { current_val = (((((val[i++] * d) * scals[lup]) - reference_value) * s) + 0.5); if (current_val < 0) - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s: negative coput before packing (%g)", cclass_name, current_val); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s: negative coput before packing (%g)", class_name_, current_val); grib_encode_unsigned_longb(lres, current_val, &lpos, bits_per_value); current_val = (((((val[i++] * d) * scals[lup]) - reference_value) * s) + 0.5); if (current_val < 0) - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s: negative coput before packing (%g)", cclass_name, current_val); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s: negative coput before packing (%g)", class_name_, current_val); grib_encode_unsigned_longb(lres, current_val, &lpos, bits_per_value); lup++; } @@ -484,14 +477,14 @@ int grib_accessor_class_data_complex_packing_t::pack_double(grib_accessor* a, co for (lcount = hcount; lcount < maxv; lcount++) { current_val = (((((val[i++] * d) * scals[lup]) - reference_value) * s) + 0.5); if (current_val < 0) - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s: negative coput before packing (%g)", cclass_name, current_val); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s: negative coput before packing (%g)", class_name_, current_val); grib_encode_unsigned_long(lres, current_val, &lpos, bits_per_value); current_val = (((((val[i++] * d) * scals[lup]) - reference_value) * s) + 0.5); if (current_val < 0) - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s: negative coput before packing (%g)", cclass_name, current_val); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s: negative coput before packing (%g)", class_name_, current_val); grib_encode_unsigned_long(lres, current_val, &lpos, bits_per_value); lup++; } @@ -504,47 +497,45 @@ int grib_accessor_class_data_complex_packing_t::pack_double(grib_accessor* a, co } if (((hpos / 8) != hsize) && ((lpos / 8) != lsize)) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s: Mismatch in packing between high resolution and low resolution part", cclass_name); - grib_context_free(a->context, buf); - grib_context_free(a->context, scals); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s: Mismatch in packing between high resolution and low resolution part", class_name_); + grib_context_free(context_, buf); + grib_context_free(context_, scals); return GRIB_INTERNAL_ERROR; } buflen = ((hpos + lpos) / 8); - if ((ret = grib_set_double_internal(gh, self->reference_value, reference_value)) != GRIB_SUCCESS) + if ((ret = grib_set_double_internal(gh, reference_value_, reference_value)) != GRIB_SUCCESS) return ret; { // Make sure we can decode it again double ref = 1e-100; - grib_get_double_internal(gh, self->reference_value, &ref); + grib_get_double_internal(gh, reference_value_, &ref); if (ref != reference_value) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s %s: %s (ref=%.10e != reference_value=%.10e)", - cclass_name, __func__, self->reference_value, ref, reference_value); + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: %s (ref=%.10e != reference_value=%.10e)", + class_name_, __func__, reference_value_, ref, reference_value); return GRIB_INTERNAL_ERROR; } } - if ((ret = grib_set_long_internal(gh, self->binary_scale_factor, binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(gh, binary_scale_factor_, binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(gh, self->decimal_scale_factor, decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(gh, decimal_scale_factor_, decimal_scale_factor)) != GRIB_SUCCESS) return ret; - grib_buffer_replace(a, buf, buflen, 1, 1); - grib_context_free(a->context, buf); - grib_context_free(a->context, scals); + grib_buffer_replace(this, buf, buflen, 1, 1); + grib_context_free(context_, buf); + grib_context_free(context_, scals); return ret; } template -static int unpack_real(grib_accessor* a, T* val, size_t* len) +int grib_accessor_data_complex_packing_t::unpack_real(T* val, size_t* len) { static_assert(std::is_floating_point::value, "Requires floating point numbers"); - grib_accessor_data_complex_packing_t* self = (grib_accessor_data_complex_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; + grib_handle* gh = grib_handle_of_accessor(this); size_t i = 0; int ret = GRIB_SUCCESS; @@ -590,7 +581,7 @@ static int unpack_real(grib_accessor* a, T* val, size_t* len) decode_float_proc decode_float = NULL; - err = a->value_count(&n_vals); + err = value_count(&n_vals); if (err) return err; @@ -599,44 +590,44 @@ static int unpack_real(grib_accessor* a, T* val, size_t* len) return GRIB_ARRAY_TOO_SMALL; } - if ((ret = grib_get_long_internal(gh, self->offsetdata, &offsetdata)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, offsetdata_, &offsetdata)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(gh, self->reference_value, &tmp)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(gh, reference_value_, &tmp)) != GRIB_SUCCESS) return ret; reference_value = tmp; - if ((ret = grib_get_long_internal(gh, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->GRIBEX_sh_bug_present, &GRIBEX_sh_bug_present)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, GRIBEX_sh_bug_present_, &GRIBEX_sh_bug_present)) != GRIB_SUCCESS) return ret; /* ECC-774: don't use grib_get_long_internal */ - if ((ret = grib_get_long(gh, self->ieee_floats, &ieee_floats)) != GRIB_SUCCESS) + if ((ret = grib_get_long(gh, ieee_floats_, &ieee_floats)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(gh, self->laplacianOperator, &tmp)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(gh, laplacianOperator_, &tmp)) != GRIB_SUCCESS) return ret; laplacianOperator = tmp; - if ((ret = grib_get_long_internal(gh, self->sub_j, &sub_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, sub_j_, &sub_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->sub_k, &sub_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, sub_k_, &sub_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->sub_m, &sub_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, sub_m_, &sub_m)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->pen_j, &pen_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, pen_j_, &pen_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->pen_k, &pen_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, pen_k_, &pen_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->pen_m, &pen_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, pen_m_, &pen_m)) != GRIB_SUCCESS) return ret; - self->dirty = 0; + dirty_ = 0; switch (ieee_floats) { case 0: @@ -656,7 +647,7 @@ static int unpack_real(grib_accessor* a, T* val, size_t* len) } if (sub_j != sub_k || sub_j != sub_m || pen_j != pen_k || pen_j != pen_m) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Invalid pentagonal resolution parameters", cclass_name); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Invalid pentagonal resolution parameters", class_name_); return GRIB_DECODING_ERROR; } @@ -664,7 +655,7 @@ static int unpack_real(grib_accessor* a, T* val, size_t* len) maxv = pen_j + 1; - buf += a->byte_offset(); + buf += byte_offset(); hres = buf; lres = buf; @@ -672,7 +663,7 @@ static int unpack_real(grib_accessor* a, T* val, size_t* len) n_vals = (pen_j + 1) * (pen_j + 2); d = codes_power(-decimal_scale_factor, 10); - grib_ieee_decode_array(a->context, buf, n_vals, bytes, val); + grib_ieee_decode_array(context_, buf, n_vals, bytes, val); if (d) { for (i = 0; i < n_vals; i++) val[i] *= d; @@ -680,13 +671,13 @@ static int unpack_real(grib_accessor* a, T* val, size_t* len) return 0; } - packed_offset = a->byte_offset() + bytes * (sub_k + 1) * (sub_k + 2); + packed_offset = byte_offset() + bytes * (sub_k + 1) * (sub_k + 2); lpos = 8 * (packed_offset - offsetdata); s = codes_power(binary_scale_factor, 2); d = codes_power(-decimal_scale_factor, 10); - scals = (T*)grib_context_malloc(a->context, maxv * sizeof(T)); + scals = (T*)grib_context_malloc(context_, maxv * sizeof(T)); if (!scals) return GRIB_OUT_OF_MEMORY; scals[0] = 0; @@ -695,8 +686,8 @@ static int unpack_real(grib_accessor* a, T* val, size_t* len) if (operat != 0) scals[i] = (1.0 / operat); else { - grib_context_log(a->context, GRIB_LOG_WARNING, - "%s: Problem with operator div by zero at index %d of %d", cclass_name, i, maxv); + grib_context_log(context_, GRIB_LOG_WARNING, + "%s: Problem with operator div by zero at index %d of %d", class_name_, i, maxv); scals[i] = 0; } } @@ -754,25 +745,25 @@ static int unpack_real(grib_accessor* a, T* val, size_t* len) //Assert(*len >= i); if (*len < i) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s::%s: Invalid values *len=%zu and i=%zu.", - cclass_name, __func__, *len, i); - grib_context_log(a->context, GRIB_LOG_ERROR, "Make sure your array is large enough."); + grib_context_log(context_, GRIB_LOG_ERROR, "%s::%s: Invalid values *len=%zu and i=%zu.", + class_name_, __func__, *len, i); + grib_context_log(context_, GRIB_LOG_ERROR, "Make sure your array is large enough."); ret = GRIB_ARRAY_TOO_SMALL; } else { *len = i; } - grib_context_free(a->context, scals); + grib_context_free(context_, scals); return ret; } -int grib_accessor_class_data_complex_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_complex_packing_t::unpack_double(double* val, size_t* len) { - return unpack_real(a, val, len); + return unpack_real(val, len); } -int grib_accessor_class_data_complex_packing_t::unpack_float(grib_accessor* a, float* val, size_t* len) +int grib_accessor_data_complex_packing_t::unpack_float(float* val, size_t* len) { // TODO(maee): See ECC-1579 // Investigate why results are not bit-identical @@ -780,18 +771,18 @@ int grib_accessor_class_data_complex_packing_t::unpack_float(grib_accessor* a, f // return unpack(a, val, len); size_t size = *len; - double* val8 = (double*)grib_context_malloc(a->context, size * (sizeof(double))); + double* val8 = (double*)grib_context_malloc(context_, size * (sizeof(double))); if (!val8) return GRIB_OUT_OF_MEMORY; - int err = unpack_real(a, val8, len); + int err = unpack_real(val8, len); if (err) { - grib_context_free(a->context, val8); + grib_context_free(context_, val8); return err; } for (size_t i = 0; i < size; i++) val[i] = val8[i]; - grib_context_free(a->context, val8); + grib_context_free(context_, val8); return GRIB_SUCCESS; } diff --git a/src/accessor/grib_accessor_class_data_complex_packing.h b/src/accessor/grib_accessor_class_data_complex_packing.h index a809336c2..1124e5d5e 100644 --- a/src/accessor/grib_accessor_class_data_complex_packing.h +++ b/src/accessor/grib_accessor_class_data_complex_packing.h @@ -20,27 +20,28 @@ typedef double (*decode_float_proc)(unsigned long); class grib_accessor_data_complex_packing_t : public grib_accessor_data_simple_packing_t { public: - /* Members defined in data_complex_packing */ - const char* GRIBEX_sh_bug_present; - const char* ieee_floats; - const char* laplacianOperatorIsSet; - const char* laplacianOperator; - const char* sub_j; - const char* sub_k; - const char* sub_m; - const char* pen_j; - const char* pen_k; - const char* pen_m; -}; - -class grib_accessor_class_data_complex_packing_t : public grib_accessor_class_data_simple_packing_t -{ -public: - grib_accessor_class_data_complex_packing_t(const char* name) : grib_accessor_class_data_simple_packing_t(name) {} + grib_accessor_data_complex_packing_t() : + grib_accessor_data_simple_packing_t() { class_name_ = "data_complex_packing"; } // grib_accessor* create_empty_accessor() override { return new grib_accessor_data_complex_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +protected: + const char* sub_j_ = nullptr; + const char* sub_k_ = nullptr; + const char* sub_m_ = nullptr; + +private: + const char* GRIBEX_sh_bug_present_ = nullptr; + const char* ieee_floats_ = nullptr; + const char* laplacianOperatorIsSet_ = nullptr; + const char* laplacianOperator_ = nullptr; + const char* pen_j_ = nullptr; + const char* pen_k_ = nullptr; + const char* pen_m_ = nullptr; + + template int unpack_real(T* val, size_t* len); }; diff --git a/src/accessor/grib_accessor_class_data_dummy_field.cc b/src/accessor/grib_accessor_class_data_dummy_field.cc index 735ee6766..590fd9138 100644 --- a/src/accessor/grib_accessor_class_data_dummy_field.cc +++ b/src/accessor/grib_accessor_class_data_dummy_field.cc @@ -10,32 +10,29 @@ #include "grib_accessor_class_data_dummy_field.h" -grib_accessor_class_data_dummy_field_t _grib_accessor_class_data_dummy_field{ "data_dummy_field" }; -grib_accessor_class* grib_accessor_class_data_dummy_field = &_grib_accessor_class_data_dummy_field; +grib_accessor_data_dummy_field_t _grib_accessor_data_dummy_field{}; +grib_accessor* grib_accessor_data_dummy_field = &_grib_accessor_data_dummy_field; - -void grib_accessor_class_data_dummy_field_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_dummy_field_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_g1simple_packing_t::init(a, v, args); - grib_accessor_data_dummy_field_t* self = (grib_accessor_data_dummy_field_t*)a; - self->missing_value = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->numberOfPoints = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->bitmap = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); + grib_accessor_data_g1simple_packing_t::init(v, args); + missing_value_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + numberOfPoints_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + bitmap_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); } -int grib_accessor_class_data_dummy_field_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_dummy_field_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_dummy_field_t* self = (grib_accessor_data_dummy_field_t*)a; size_t i = 0, n_vals = 0; long numberOfPoints; double missing_value = 0; int err = 0; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints, &numberOfPoints)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), numberOfPoints_, &numberOfPoints)) != GRIB_SUCCESS) return err; n_vals = numberOfPoints; - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->missing_value, &missing_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(grib_handle_of_accessor(this), missing_value_, &missing_value)) != GRIB_SUCCESS) return err; if (*len < n_vals) { @@ -46,8 +43,8 @@ int grib_accessor_class_data_dummy_field_t::unpack_double(grib_accessor* a, doub for (i = 0; i < n_vals; i++) val[i] = missing_value; - if (grib_find_accessor(grib_handle_of_accessor(a), self->bitmap)) { - if ((err = grib_set_double_array_internal(grib_handle_of_accessor(a), self->bitmap, val, n_vals)) != GRIB_SUCCESS) + if (grib_find_accessor(grib_handle_of_accessor(this), bitmap_)) { + if ((err = grib_set_double_array_internal(grib_handle_of_accessor(this), bitmap_, val, n_vals)) != GRIB_SUCCESS) return err; } @@ -55,10 +52,8 @@ int grib_accessor_class_data_dummy_field_t::unpack_double(grib_accessor* a, doub return err; } -int grib_accessor_class_data_dummy_field_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_dummy_field_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_dummy_field_t* self = (grib_accessor_data_dummy_field_t*)a; - size_t n_vals = *len; int err = 0; long bits_per_value = 0; @@ -69,36 +64,35 @@ int grib_accessor_class_data_dummy_field_t::pack_double(grib_accessor* a, const if (*len == 0) return GRIB_NO_VALUES; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; buflen = (1 + ((bits_per_value * n_vals) / 8)) * sizeof(unsigned char); - buf = (unsigned char*)grib_context_malloc_clear(a->context, buflen); + buf = (unsigned char*)grib_context_malloc_clear(context_, buflen); if (!buf) return GRIB_OUT_OF_MEMORY; half_byte = (buflen * 8) - ((*len) * bits_per_value); - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), self->half_byte, half_byte)) != GRIB_SUCCESS) { - grib_context_free(a->context, buf); + if ((err = grib_set_long_internal(grib_handle_of_accessor(this), half_byte_, half_byte)) != GRIB_SUCCESS) { + grib_context_free(context_, buf); return err; } - grib_buffer_replace(a, buf, buflen, 1, 1); + grib_buffer_replace(this, buf, buflen, 1, 1); - grib_context_free(a->context, buf); + grib_context_free(context_, buf); return GRIB_SUCCESS; } -int grib_accessor_class_data_dummy_field_t::value_count(grib_accessor* a, long* numberOfPoints) +int grib_accessor_data_dummy_field_t::value_count(long* numberOfPoints) { - grib_accessor_data_dummy_field_t* self = (grib_accessor_data_dummy_field_t*)a; - int err = 0; + int err = 0; *numberOfPoints = 0; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints, numberOfPoints)) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to get count of %s (%s)", a->name, grib_get_error_message(err)); + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), numberOfPoints_, numberOfPoints)) != GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to get count of %s (%s)", name_, grib_get_error_message(err)); } return err; diff --git a/src/accessor/grib_accessor_class_data_dummy_field.h b/src/accessor/grib_accessor_class_data_dummy_field.h index c846abb98..4a22f904f 100644 --- a/src/accessor/grib_accessor_class_data_dummy_field.h +++ b/src/accessor/grib_accessor_class_data_dummy_field.h @@ -15,19 +15,16 @@ class grib_accessor_data_dummy_field_t : public grib_accessor_data_g1simple_packing_t { public: - /* Members defined in data_dummy_field */ - const char* missing_value; - const char* numberOfPoints; - const char* bitmap; -}; - -class grib_accessor_class_data_dummy_field_t : public grib_accessor_class_data_g1simple_packing_t -{ -public: - grib_accessor_class_data_dummy_field_t(const char* name) : grib_accessor_class_data_g1simple_packing_t(name) {} + grib_accessor_data_dummy_field_t() : + grib_accessor_data_g1simple_packing_t() { class_name_ = "data_dummy_field"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_dummy_field_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* missing_value_ = nullptr; + const char* numberOfPoints_ = nullptr; + const char* bitmap_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_g1complex_packing.cc b/src/accessor/grib_accessor_class_data_g1complex_packing.cc index e943d5a6e..c7795e5f1 100644 --- a/src/accessor/grib_accessor_class_data_g1complex_packing.cc +++ b/src/accessor/grib_accessor_class_data_g1complex_packing.cc @@ -10,28 +10,23 @@ #include "grib_accessor_class_data_g1complex_packing.h" -grib_accessor_class_data_g1complex_packing_t _grib_accessor_class_data_g1complex_packing{ "data_g1complex_packing" }; -grib_accessor_class* grib_accessor_class_data_g1complex_packing = &_grib_accessor_class_data_g1complex_packing; +grib_accessor_data_g1complex_packing_t _grib_accessor_data_g1complex_packing{}; +grib_accessor* grib_accessor_data_g1complex_packing = &_grib_accessor_data_g1complex_packing; - -void grib_accessor_class_data_g1complex_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g1complex_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_complex_packing_t::init(a, v, args); - grib_accessor_data_g1complex_packing_t* self = (grib_accessor_data_g1complex_packing_t*)a; - - self->half_byte = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->N = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->packingType = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->ieee_packing = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->precision = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->edition = 1; - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + grib_accessor_data_complex_packing_t::init(v, args); + half_byte_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + N_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + packingType_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + ieee_packing_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + precision_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + edition_ = 1; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_g1complex_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_g1complex_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_g1complex_packing_t* self = (grib_accessor_data_g1complex_packing_t*)a; - int ret = GRIB_SUCCESS; long seclen = 0; long sub_j = 0; @@ -46,17 +41,17 @@ int grib_accessor_class_data_g1complex_packing_t::pack_double(grib_accessor* a, return GRIB_NO_VALUES; // /* TODO: spectral_ieee does not work */ - // if (c->ieee_packing && self->ieee_packing) { - // grib_handle* h = grib_handle_of_accessor(a); - // grib_context* c = a->context; + // if (c->ieee_packing && ieee_packing_ ) { + // grib_handle* h = grib_handle_of_accessor(this); + // grib_context* c = context_ ; // char* packingType_s = NULL; // char* ieee_packing_s = NULL; // long precision = c->ieee_packing == 32 ? 1 : 2; - // size_t lenstr = strlen(self->ieee_packing); + // size_t lenstr = strlen(ieee_packing_ ); - // packingType_s = grib_context_strdup(c, self->packingType); - // ieee_packing_s = grib_context_strdup(c, self->ieee_packing); - // precision_s = grib_context_strdup(c, self->precision); + // packingType_s = grib_context_strdup(c, packingType_ ); + // ieee_packing_s = grib_context_strdup(c, ieee_packing_ ); + // precision_s = grib_context_strdup(c, precision_ ); // grib_set_string(h, packingType_s, ieee_packing_s, &lenstr); // grib_set_long(h, precision_s, precision); @@ -67,47 +62,47 @@ int grib_accessor_class_data_g1complex_packing_t::pack_double(grib_accessor* a, // return grib_set_double_array(h, "values", val, *len); // } - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_j, &sub_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), sub_j_, &sub_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_k, &sub_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), sub_k_, &sub_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_m, &sub_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), sub_m_, &sub_m)) != GRIB_SUCCESS) return ret; - self->dirty = 1; + dirty_ = 1; Assert((sub_j == sub_k) && (sub_m == sub_j)); - ret = grib_accessor_class_data_complex_packing_t::pack_double(a, val, len); + ret = grib_accessor_data_complex_packing_t::pack_double(val, len); if (ret == GRIB_SUCCESS) { - n = a->offset + 4 * ((sub_k + 1) * (sub_k + 2)); + n = offset_ + 4 * ((sub_k + 1) * (sub_k + 2)); /* Octet number starts from beginning of message but shouldn't */ - if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->N, n)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), N_, n)) != GRIB_SUCCESS) return ret; - // ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetsection, &offsetsection); + // ret = grib_get_long_internal(grib_handle_of_accessor(this), offsetsection_ , &offsetsection); // if (ret != GRIB_SUCCESS) // return ret; - // if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->N, n - offsetsection)) != GRIB_SUCCESS) + // if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), N_ , n - offsetsection)) != GRIB_SUCCESS) // return ret; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->bits_per_value, &bits_per_value); + ret = grib_get_long_internal(grib_handle_of_accessor(this), bits_per_value_, &bits_per_value); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->seclen, &seclen); + ret = grib_get_long_internal(grib_handle_of_accessor(this), seclen_, &seclen); if (ret != GRIB_SUCCESS) return ret; buflen = 32 * (sub_k + 1) * (sub_k + 2) + (*len - (sub_k + 1) * (sub_k + 2)) * bits_per_value + 18 * 8; half_byte = seclen * 8 - buflen; - if (a->context->debug == -1) { + if (context_->debug == -1) { fprintf(stderr, "ECCODES DEBUG: half_byte=%ld\n", half_byte); } - ret = grib_set_long_internal(grib_handle_of_accessor(a), self->half_byte, half_byte); + ret = grib_set_long_internal(grib_handle_of_accessor(this), half_byte_, half_byte); if (ret != GRIB_SUCCESS) return ret; } diff --git a/src/accessor/grib_accessor_class_data_g1complex_packing.h b/src/accessor/grib_accessor_class_data_g1complex_packing.h index 51457e40e..5b3a86b39 100644 --- a/src/accessor/grib_accessor_class_data_g1complex_packing.h +++ b/src/accessor/grib_accessor_class_data_g1complex_packing.h @@ -15,19 +15,16 @@ class grib_accessor_data_g1complex_packing_t : public grib_accessor_data_complex_packing_t { public: - /* Members defined in data_g1complex_packing */ - const char* N; - const char* half_byte; - const char* packingType; - const char* ieee_packing; - const char* precision; -}; - -class grib_accessor_class_data_g1complex_packing_t : public grib_accessor_class_data_complex_packing_t -{ -public: - grib_accessor_class_data_g1complex_packing_t(const char* name) : grib_accessor_class_data_complex_packing_t(name) {} + grib_accessor_data_g1complex_packing_t() : + grib_accessor_data_complex_packing_t() { class_name_ = "data_g1complex_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g1complex_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* N_ = nullptr; + const char* half_byte_ = nullptr; + const char* packingType_ = nullptr; + const char* ieee_packing_ = nullptr; + const char* precision_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_g1second_order_constant_width_packing.cc b/src/accessor/grib_accessor_class_data_g1second_order_constant_width_packing.cc index 7aac0e031..0d7cd7e45 100644 --- a/src/accessor/grib_accessor_class_data_g1second_order_constant_width_packing.cc +++ b/src/accessor/grib_accessor_class_data_g1second_order_constant_width_packing.cc @@ -11,55 +11,51 @@ #include "grib_accessor_class_data_g1second_order_constant_width_packing.h" #include "grib_scaling.h" -grib_accessor_class_data_g1second_order_constant_width_packing_t _grib_accessor_class_data_g1second_order_constant_width_packing{ "data_g1second_order_constant_width_packing" }; -grib_accessor_class* grib_accessor_class_data_g1second_order_constant_width_packing = &_grib_accessor_class_data_g1second_order_constant_width_packing; +grib_accessor_data_g1second_order_constant_width_packing_t _grib_accessor_data_g1second_order_constant_width_packing{}; +grib_accessor* grib_accessor_data_g1second_order_constant_width_packing = &_grib_accessor_data_g1second_order_constant_width_packing; - -void grib_accessor_class_data_g1second_order_constant_width_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g1second_order_constant_width_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_simple_packing_t::init(a, v, args); - grib_accessor_data_g1second_order_constant_width_packing_t* self = (grib_accessor_data_g1second_order_constant_width_packing_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_data_simple_packing_t::init(v, args); + grib_handle* hand = grib_handle_of_accessor(this); - self->half_byte = grib_arguments_get_name(hand, args, self->carg++); - self->packingType = grib_arguments_get_name(hand, args, self->carg++); - self->ieee_packing = grib_arguments_get_name(hand, args, self->carg++); - self->precision = grib_arguments_get_name(hand, args, self->carg++); - self->widthOfFirstOrderValues = grib_arguments_get_name(hand, args, self->carg++); - self->N1 = grib_arguments_get_name(hand, args, self->carg++); - self->N2 = grib_arguments_get_name(hand, args, self->carg++); - self->numberOfGroups = grib_arguments_get_name(hand, args, self->carg++); - self->numberOfSecondOrderPackedValues = grib_arguments_get_name(hand, args, self->carg++); - self->extraValues = grib_arguments_get_name(hand, args, self->carg++); - self->Ni = grib_arguments_get_name(hand, args, self->carg++); - self->Nj = grib_arguments_get_name(hand, args, self->carg++); - self->pl = grib_arguments_get_name(hand, args, self->carg++); - self->jPointsAreConsecutive = grib_arguments_get_name(hand, args, self->carg++); - self->bitmap = grib_arguments_get_name(hand, args, self->carg++); - self->groupWidth = grib_arguments_get_name(hand, args, self->carg++); - self->edition = 1; - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + half_byte_ = grib_arguments_get_name(hand, args, carg_++); + packingType_ = grib_arguments_get_name(hand, args, carg_++); + ieee_packing_ = grib_arguments_get_name(hand, args, carg_++); + precision_ = grib_arguments_get_name(hand, args, carg_++); + widthOfFirstOrderValues_ = grib_arguments_get_name(hand, args, carg_++); + N1_ = grib_arguments_get_name(hand, args, carg_++); + N2_ = grib_arguments_get_name(hand, args, carg_++); + numberOfGroups_ = grib_arguments_get_name(hand, args, carg_++); + numberOfSecondOrderPackedValues_ = grib_arguments_get_name(hand, args, carg_++); + extraValues_ = grib_arguments_get_name(hand, args, carg_++); + Ni_ = grib_arguments_get_name(hand, args, carg_++); + Nj_ = grib_arguments_get_name(hand, args, carg_++); + pl_ = grib_arguments_get_name(hand, args, carg_++); + jPointsAreConsecutive_ = grib_arguments_get_name(hand, args, carg_++); + bitmap_ = grib_arguments_get_name(hand, args, carg_++); + groupWidth_ = grib_arguments_get_name(hand, args, carg_++); + edition_ = 1; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_g1second_order_constant_width_packing_t::value_count(grib_accessor* a, long* numberOfSecondOrderPackedValues) +int grib_accessor_data_g1second_order_constant_width_packing_t::value_count(long* numberOfSecondOrderPackedValues) { - int err = 0; - grib_accessor_data_g1second_order_constant_width_packing_t* self = (grib_accessor_data_g1second_order_constant_width_packing_t*)a; + int err = 0; *numberOfSecondOrderPackedValues = 0; - err = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfSecondOrderPackedValues, numberOfSecondOrderPackedValues); + err = grib_get_long_internal(grib_handle_of_accessor(this), numberOfSecondOrderPackedValues_, numberOfSecondOrderPackedValues); return err; } -int grib_accessor_class_data_g1second_order_constant_width_packing_t::unpack_float(grib_accessor*, float* val, size_t* len) +int grib_accessor_data_g1second_order_constant_width_packing_t::unpack_float(float* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_data_g1second_order_constant_width_packing_t::unpack_double(grib_accessor* a, double* values, size_t* len) +int grib_accessor_data_g1second_order_constant_width_packing_t::unpack_double(double* values, size_t* len) { - grib_accessor_data_g1second_order_constant_width_packing_t* self = (grib_accessor_data_g1second_order_constant_width_packing_t*)a; int ret = 0; long numberOfGroups, numberOfSecondOrderPackedValues; long groupWidth = 0; @@ -69,68 +65,68 @@ int grib_accessor_class_data_g1second_order_constant_width_packing_t::unpack_dou long pos = 0; long widthOfFirstOrderValues = 0; long jPointsAreConsecutive; - unsigned char* buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data; + unsigned char* buf = (unsigned char*)grib_handle_of_accessor(this)->buffer->data; long i, n; double reference_value; long binary_scale_factor; long decimal_scale_factor; double s, d; long* secondaryBitmap; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); - buf += a->byte_offset(); - if ((ret = grib_get_long_internal(hand, self->numberOfGroups, &numberOfGroups)) != GRIB_SUCCESS) + buf += byte_offset(); + if ((ret = grib_get_long_internal(hand, numberOfGroups_, &numberOfGroups)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->jPointsAreConsecutive, &jPointsAreConsecutive)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, jPointsAreConsecutive_, &jPointsAreConsecutive)) != GRIB_SUCCESS) return ret; if (jPointsAreConsecutive) { - if ((ret = grib_get_long_internal(hand, self->Ni, &numberPerRow)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, Ni_, &numberPerRow)) != GRIB_SUCCESS) return ret; } else { - if ((ret = grib_get_long_internal(hand, self->Nj, &numberPerRow)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, Nj_, &numberPerRow)) != GRIB_SUCCESS) return ret; } - if ((ret = grib_get_long_internal(hand, self->widthOfFirstOrderValues, &widthOfFirstOrderValues)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, widthOfFirstOrderValues_, &widthOfFirstOrderValues)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(hand, reference_value_, &reference_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->numberOfSecondOrderPackedValues, + if ((ret = grib_get_long_internal(hand, numberOfSecondOrderPackedValues_, &numberOfSecondOrderPackedValues)) != GRIB_SUCCESS) return ret; if (*len < numberOfSecondOrderPackedValues) return GRIB_ARRAY_TOO_SMALL; - if ((ret = grib_get_long_internal(hand, self->groupWidth, &groupWidth)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, groupWidth_, &groupWidth)) != GRIB_SUCCESS) return ret; - secondaryBitmap = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfSecondOrderPackedValues); + secondaryBitmap = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfSecondOrderPackedValues); if (!secondaryBitmap) return GRIB_OUT_OF_MEMORY; grib_decode_long_array(buf, &pos, 1, numberOfSecondOrderPackedValues, secondaryBitmap); pos = 8 * ((pos + 7) / 8); - firstOrderValues = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfGroups); + firstOrderValues = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfGroups); if (!firstOrderValues) return GRIB_OUT_OF_MEMORY; grib_decode_long_array(buf, &pos, widthOfFirstOrderValues, numberOfGroups, firstOrderValues); pos = 8 * ((pos + 7) / 8); - X = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfSecondOrderPackedValues); + X = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfSecondOrderPackedValues); if (!X) return GRIB_OUT_OF_MEMORY; @@ -173,23 +169,22 @@ int grib_accessor_class_data_g1second_order_constant_width_packing_t::unpack_dou } *len = numberOfSecondOrderPackedValues; - grib_context_free(a->context, secondaryBitmap); - grib_context_free(a->context, firstOrderValues); - grib_context_free(a->context, X); + grib_context_free(context_, secondaryBitmap); + grib_context_free(context_, firstOrderValues); + grib_context_free(context_, X); return ret; } -int grib_accessor_class_data_g1second_order_constant_width_packing_t::pack_double(grib_accessor* a, const double* cval, size_t* len) +int grib_accessor_data_g1second_order_constant_width_packing_t::pack_double(const double* cval, size_t* len) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: %s: Not implemented", cclass_name, __func__); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: %s: Not implemented", class_name_, __func__); return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_data_g1second_order_constant_width_packing_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_g1second_order_constant_width_packing_t::unpack_double_element(size_t idx, double* val) { - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); size_t size = 0; double* values = NULL; int err = 0; @@ -202,20 +197,20 @@ int grib_accessor_class_data_g1second_order_constant_width_packing_t::unpack_dou if (idx > size) return GRIB_INVALID_ARGUMENT; - values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); + values = (double*)grib_context_malloc_clear(context_, size * sizeof(double)); err = grib_get_double_array(hand, "values", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } *val = values[idx]; - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } -int grib_accessor_class_data_g1second_order_constant_width_packing_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_g1second_order_constant_width_packing_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); size_t size = 0, i = 0; double* values = NULL; int err = 0; @@ -229,15 +224,15 @@ int grib_accessor_class_data_g1second_order_constant_width_packing_t::unpack_dou if (index_array[i] > size) return GRIB_INVALID_ARGUMENT; } - values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); + values = (double*)grib_context_malloc_clear(context_, size * sizeof(double)); err = grib_get_double_array(hand, "values", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } for (i = 0; i < len; i++) { val_array[i] = values[index_array[i]]; } - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } diff --git a/src/accessor/grib_accessor_class_data_g1second_order_constant_width_packing.h b/src/accessor/grib_accessor_class_data_g1second_order_constant_width_packing.h index 8d2d53f0a..4ba3822bc 100644 --- a/src/accessor/grib_accessor_class_data_g1second_order_constant_width_packing.h +++ b/src/accessor/grib_accessor_class_data_g1second_order_constant_width_packing.h @@ -15,35 +15,32 @@ class grib_accessor_data_g1second_order_constant_width_packing_t : public grib_accessor_data_simple_packing_t { public: - /* Members defined in data_g1second_order_constant_width_packing */ - const char* half_byte; - const char* packingType; - const char* ieee_packing; - const char* precision; - const char* widthOfFirstOrderValues; - const char* N1; - const char* N2; - const char* numberOfGroups; - const char* numberOfSecondOrderPackedValues; - const char* extraValues; - const char* pl; - const char* Ni; - const char* Nj; - const char* jPointsAreConsecutive; - const char* bitmap; - const char* groupWidth; -}; - -class grib_accessor_class_data_g1second_order_constant_width_packing_t : public grib_accessor_class_data_simple_packing_t -{ -public: - grib_accessor_class_data_g1second_order_constant_width_packing_t(const char* name) : grib_accessor_class_data_simple_packing_t(name) {} + grib_accessor_data_g1second_order_constant_width_packing_t() : + grib_accessor_data_simple_packing_t() { class_name_ = "data_g1second_order_constant_width_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g1second_order_constant_width_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; + +private: + const char* half_byte_ = nullptr; + const char* packingType_ = nullptr; + const char* ieee_packing_ = nullptr; + const char* precision_ = nullptr; + const char* widthOfFirstOrderValues_ = nullptr; + const char* N1_ = nullptr; + const char* N2_ = nullptr; + const char* numberOfGroups_ = nullptr; + const char* numberOfSecondOrderPackedValues_ = nullptr; + const char* extraValues_ = nullptr; + const char* pl_ = nullptr; + const char* Ni_ = nullptr; + const char* Nj_ = nullptr; + const char* jPointsAreConsecutive_ = nullptr; + const char* bitmap_ = nullptr; + const char* groupWidth_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_g1second_order_general_extended_packing.cc b/src/accessor/grib_accessor_class_data_g1second_order_general_extended_packing.cc index f78bb1806..2ee15e425 100644 --- a/src/accessor/grib_accessor_class_data_g1second_order_general_extended_packing.cc +++ b/src/accessor/grib_accessor_class_data_g1second_order_general_extended_packing.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -12,9 +11,8 @@ #include "grib_accessor_class_data_g1second_order_general_extended_packing.h" #include "grib_scaling.h" -grib_accessor_class_data_g1second_order_general_extended_packing_t _grib_accessor_class_data_g1second_order_general_extended_packing{ "data_g1second_order_general_extended_packing" }; -grib_accessor_class* grib_accessor_class_data_g1second_order_general_extended_packing = &_grib_accessor_class_data_g1second_order_general_extended_packing; - +grib_accessor_data_g1second_order_general_extended_packing_t _grib_accessor_data_g1second_order_general_extended_packing{}; +grib_accessor* grib_accessor_data_g1second_order_general_extended_packing = &_grib_accessor_data_g1second_order_general_extended_packing; #define MAX_NUMBER_OF_GROUPS 65534 #define EFDEBUG 0 @@ -49,54 +47,52 @@ long number_of_bits(grib_handle* h, unsigned long x) if (i >= count) { /*grib_dump_content(h, stdout,"debug", ~0, NULL);*/ grib_context_log(h->context, GRIB_LOG_FATAL, - "grib_accessor_class_data_g1second_order_general_extended_packing: Number out of range: %ld", x); + "grib_accessor_data_g1second_order_general_extended_packing: Number out of range: %ld", x); } } return i; } -void grib_accessor_class_data_g1second_order_general_extended_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g1second_order_general_extended_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_simple_packing_t::init(a, v, args); - grib_accessor_data_g1second_order_general_extended_packing_t* self = (grib_accessor_data_g1second_order_general_extended_packing_t*)a; - grib_handle* handle = grib_handle_of_accessor(a); + grib_accessor_data_simple_packing_t::init(v, args); + grib_handle* handle = grib_handle_of_accessor(this); - self->half_byte = grib_arguments_get_name(handle, args, self->carg++); - self->packingType = grib_arguments_get_name(handle, args, self->carg++); - self->ieee_packing = grib_arguments_get_name(handle, args, self->carg++); - self->precision = grib_arguments_get_name(handle, args, self->carg++); - self->widthOfFirstOrderValues = grib_arguments_get_name(handle, args, self->carg++); - self->firstOrderValues = grib_arguments_get_name(handle, args, self->carg++); - self->N1 = grib_arguments_get_name(handle, args, self->carg++); - self->N2 = grib_arguments_get_name(handle, args, self->carg++); - self->numberOfGroups = grib_arguments_get_name(handle, args, self->carg++); - self->codedNumberOfGroups = grib_arguments_get_name(handle, args, self->carg++); - self->numberOfSecondOrderPackedValues = grib_arguments_get_name(handle, args, self->carg++); - self->extraValues = grib_arguments_get_name(handle, args, self->carg++); - self->groupWidths = grib_arguments_get_name(handle, args, self->carg++); - self->widthOfWidths = grib_arguments_get_name(handle, args, self->carg++); - self->groupLengths = grib_arguments_get_name(handle, args, self->carg++); - self->widthOfLengths = grib_arguments_get_name(handle, args, self->carg++); - self->NL = grib_arguments_get_name(handle, args, self->carg++); - self->SPD = grib_arguments_get_name(handle, args, self->carg++); - self->widthOfSPD = grib_arguments_get_name(handle, args, self->carg++); - self->orderOfSPD = grib_arguments_get_name(handle, args, self->carg++); - self->numberOfPoints = grib_arguments_get_name(handle, args, self->carg++); - self->dataFlag = grib_arguments_get_name(handle, args, self->carg++); - self->edition = 1; - self->dirty = 1; - self->dvalues = NULL; - self->fvalues = NULL; - self->double_dirty = self->float_dirty = 1; - self->size = 0; - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + half_byte_ = grib_arguments_get_name(handle, args, carg_++); + packingType_ = grib_arguments_get_name(handle, args, carg_++); + ieee_packing_ = grib_arguments_get_name(handle, args, carg_++); + precision_ = grib_arguments_get_name(handle, args, carg_++); + widthOfFirstOrderValues_ = grib_arguments_get_name(handle, args, carg_++); + firstOrderValues_ = grib_arguments_get_name(handle, args, carg_++); + N1_ = grib_arguments_get_name(handle, args, carg_++); + N2_ = grib_arguments_get_name(handle, args, carg_++); + numberOfGroups_ = grib_arguments_get_name(handle, args, carg_++); + codedNumberOfGroups_ = grib_arguments_get_name(handle, args, carg_++); + numberOfSecondOrderPackedValues_ = grib_arguments_get_name(handle, args, carg_++); + extraValues_ = grib_arguments_get_name(handle, args, carg_++); + groupWidths_ = grib_arguments_get_name(handle, args, carg_++); + widthOfWidths_ = grib_arguments_get_name(handle, args, carg_++); + groupLengths_ = grib_arguments_get_name(handle, args, carg_++); + widthOfLengths_ = grib_arguments_get_name(handle, args, carg_++); + NL_ = grib_arguments_get_name(handle, args, carg_++); + SPD_ = grib_arguments_get_name(handle, args, carg_++); + widthOfSPD_ = grib_arguments_get_name(handle, args, carg_++); + orderOfSPD_ = grib_arguments_get_name(handle, args, carg_++); + numberOfPoints_ = grib_arguments_get_name(handle, args, carg_++); + dataFlag_ = grib_arguments_get_name(handle, args, carg_++); + edition_ = 1; + dirty_ = 1; + dvalues_ = NULL; + fvalues_ = NULL; + double_dirty_ = float_dirty_ = 1; + size_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_g1second_order_general_extended_packing_t::value_count(grib_accessor* a, long* count) +int grib_accessor_data_g1second_order_general_extended_packing_t::value_count(long* count) { - grib_accessor_data_g1second_order_general_extended_packing_t* self = (grib_accessor_data_g1second_order_general_extended_packing_t*)a; - long numberOfCodedValues = 0; - long numberOfGroups = 0; + long numberOfCodedValues = 0; + long numberOfGroups = 0; size_t ngroups; long* groupLengths; long orderOfSPD = 0; @@ -105,62 +101,62 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::value_co *count = 0; - err = grib_get_long(grib_handle_of_accessor(a), self->numberOfGroups, &numberOfGroups); + err = grib_get_long(grib_handle_of_accessor(this), numberOfGroups_, &numberOfGroups); if (err) return err; if (numberOfGroups == 0) return 0; - groupLengths = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfGroups); + groupLengths = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfGroups); ngroups = numberOfGroups; - err = grib_get_long_array(grib_handle_of_accessor(a), self->groupLengths, groupLengths, &ngroups); + err = grib_get_long_array(grib_handle_of_accessor(this), groupLengths_, groupLengths, &ngroups); if (err) return err; for (i = 0; i < numberOfGroups; i++) numberOfCodedValues += groupLengths[i]; - grib_context_free(a->context, groupLengths); + grib_context_free(context_, groupLengths); - err = grib_get_long(grib_handle_of_accessor(a), self->orderOfSPD, &orderOfSPD); + err = grib_get_long(grib_handle_of_accessor(this), orderOfSPD_, &orderOfSPD); *count = numberOfCodedValues + orderOfSPD; return err; } -int grib_accessor_class_data_g1second_order_general_extended_packing_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_g1second_order_general_extended_packing_t::unpack_double_element(size_t idx, double* val) { size_t size; double* values; int err = 0; /* GRIB-564: The index idx relates to codedValues NOT values! */ - err = grib_get_size(grib_handle_of_accessor(a), "codedValues", &size); + err = grib_get_size(grib_handle_of_accessor(this), "codedValues", &size); if (err) return err; if (idx >= size) return GRIB_INVALID_ARGUMENT; - values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); - err = grib_get_double_array(grib_handle_of_accessor(a), "codedValues", values, &size); + values = (double*)grib_context_malloc_clear(context_, size * sizeof(double)); + err = grib_get_double_array(grib_handle_of_accessor(this), "codedValues", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } *val = values[idx]; - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } -int grib_accessor_class_data_g1second_order_general_extended_packing_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_g1second_order_general_extended_packing_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { size_t size = 0, i = 0; double* values; int err = 0; /* GRIB-564: The indexes in index_array relate to codedValues NOT values! */ - err = grib_get_size(grib_handle_of_accessor(a), "codedValues", &size); + err = grib_get_size(grib_handle_of_accessor(this), "codedValues", &size); if (err) return err; @@ -168,28 +164,27 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::unpack_d if (index_array[i] > size) return GRIB_INVALID_ARGUMENT; } - values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); - err = grib_get_double_array(grib_handle_of_accessor(a), "codedValues", values, &size); + values = (double*)grib_context_malloc_clear(context_, size * sizeof(double)); + err = grib_get_double_array(grib_handle_of_accessor(this), "codedValues", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } for (i = 0; i < len; i++) { val_array[i] = values[index_array[i]]; } - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } -int grib_accessor_class_data_g1second_order_general_extended_packing_t::unpack(grib_accessor* a, double* dvalues, float* fvalues, size_t* len) +int grib_accessor_data_g1second_order_general_extended_packing_t::unpack(double* dvalues, float* fvalues, size_t* len) { - grib_accessor_data_g1second_order_general_extended_packing_t* self = (grib_accessor_data_g1second_order_general_extended_packing_t*)a; - int ret = 0; + int ret = 0; long numberOfGroups, numberOfSecondOrderPackedValues; long* firstOrderValues = 0; long* X = 0; long pos = 0; - grib_handle* handle = grib_handle_of_accessor(a); + grib_handle* handle = grib_handle_of_accessor(this); unsigned char* buf = (unsigned char*)handle->buffer->data; long i, n; double reference_value; @@ -207,33 +202,33 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::unpack(g Assert(!(dvalues && fvalues)); if (dvalues) { - if (!self->double_dirty) { - if (*len < self->size) { + if (!double_dirty_) { + if (*len < size_) { return GRIB_ARRAY_TOO_SMALL; } - for (k = 0; k < self->size; k++) - dvalues[k] = self->dvalues[k]; - *len = self->size; + for (k = 0; k < size_; k++) + dvalues[k] = dvalues_[k]; + *len = size_; return GRIB_SUCCESS; } - self->double_dirty = 0; + double_dirty_ = 0; } if (fvalues) { - if (!self->float_dirty) { - if (*len < self->size) { + if (!float_dirty_) { + if (*len < size_) { return GRIB_ARRAY_TOO_SMALL; } - for (k = 0; k < self->size; k++) - fvalues[k] = self->fvalues[k]; - *len = self->size; + for (k = 0; k < size_; k++) + fvalues[k] = fvalues_[k]; + *len = size_; return GRIB_SUCCESS; } - self->float_dirty = 0; + float_dirty_ = 0; } - buf += a->byte_offset(); - ret = a->value_count(&numberOfValues); + buf += byte_offset(); + ret = value_count(&numberOfValues); if (ret) return ret; @@ -241,51 +236,51 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::unpack(g if (*len < (size_t)numberOfValues) return GRIB_ARRAY_TOO_SMALL; - if ((ret = grib_get_long_internal(handle, self->numberOfGroups, &numberOfGroups)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(handle, numberOfGroups_, &numberOfGroups)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(handle, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(handle, binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return ret; ngroups = numberOfGroups; - groupWidths = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfGroups); - ret = grib_get_long_array(handle, self->groupWidths, groupWidths, &ngroups); + groupWidths = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfGroups); + ret = grib_get_long_array(handle, groupWidths_, groupWidths, &ngroups); if (ret != GRIB_SUCCESS) return ret; - groupLengths = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfGroups); - ret = grib_get_long_array(handle, self->groupLengths, groupLengths, &ngroups); + groupLengths = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfGroups); + ret = grib_get_long_array(handle, groupLengths_, groupLengths, &ngroups); if (ret != GRIB_SUCCESS) return ret; - firstOrderValues = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfGroups); - ret = grib_get_long_array(handle, self->firstOrderValues, firstOrderValues, &ngroups); + firstOrderValues = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfGroups); + ret = grib_get_long_array(handle, firstOrderValues_, firstOrderValues, &ngroups); if (ret != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(handle, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(handle, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(handle, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(handle, reference_value_, &reference_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(handle, self->numberOfSecondOrderPackedValues, + if ((ret = grib_get_long_internal(handle, numberOfSecondOrderPackedValues_, &numberOfSecondOrderPackedValues)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(handle, self->orderOfSPD, &orderOfSPD)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(handle, orderOfSPD_, &orderOfSPD)) != GRIB_SUCCESS) return ret; if (orderOfSPD) { size_t nSPD = orderOfSPD + 1; - SPD = (long*)grib_context_malloc_clear(a->context, sizeof(long) * nSPD); - ret = grib_get_long_array(handle, self->SPD, SPD, &nSPD); + SPD = (long*)grib_context_malloc_clear(context_, sizeof(long) * nSPD); + ret = grib_get_long_array(handle, SPD_, SPD, &nSPD); bias = SPD[orderOfSPD]; if (ret != GRIB_SUCCESS) return ret; } - X = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfValues); + X = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfValues); n = orderOfSPD; for (i = 0; i < numberOfGroups; i++) { @@ -351,64 +346,64 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::unpack(g } if (dvalues) { // double-precision - if (self->dvalues) { - if (numberOfValues != self->size) { - grib_context_free(a->context, self->dvalues); - self->dvalues = (double*)grib_context_malloc_clear(a->context, sizeof(double) * numberOfValues); + if (dvalues_) { + if (numberOfValues != size_) { + grib_context_free(context_, dvalues_); + dvalues_ = (double*)grib_context_malloc_clear(context_, sizeof(double) * numberOfValues); } } else { - self->dvalues = (double*)grib_context_malloc_clear(a->context, sizeof(double) * numberOfValues); + dvalues_ = (double*)grib_context_malloc_clear(context_, sizeof(double) * numberOfValues); } double s = codes_power(binary_scale_factor, 2); double d = codes_power(-decimal_scale_factor, 10); for (i = 0; i < numberOfValues; i++) { - dvalues[i] = (double)(((X[i] * s) + reference_value) * d); - self->dvalues[i] = dvalues[i]; + dvalues[i] = (double)(((X[i] * s) + reference_value) * d); + dvalues_[i] = dvalues[i]; } } else { // single-precision - if (self->fvalues) { - if (numberOfValues != self->size) { - grib_context_free(a->context, self->fvalues); - self->fvalues = (float*)grib_context_malloc_clear(a->context, sizeof(float) * numberOfValues); + if (fvalues_) { + if (numberOfValues != size_) { + grib_context_free(context_, fvalues_); + fvalues_ = (float*)grib_context_malloc_clear(context_, sizeof(float) * numberOfValues); } } else { - self->fvalues = (float*)grib_context_malloc_clear(a->context, sizeof(float) * numberOfValues); + fvalues_ = (float*)grib_context_malloc_clear(context_, sizeof(float) * numberOfValues); } float s = codes_power(binary_scale_factor, 2); float d = codes_power(-decimal_scale_factor, 10); for (i = 0; i < numberOfValues; i++) { - fvalues[i] = (float)(((X[i] * s) + reference_value) * d); - self->fvalues[i] = fvalues[i]; + fvalues[i] = (float)(((X[i] * s) + reference_value) * d); + fvalues_[i] = fvalues[i]; } } - *len = numberOfValues; - self->size = numberOfValues; + *len = numberOfValues; + size_ = numberOfValues; - grib_context_free(a->context, X); - grib_context_free(a->context, groupWidths); - grib_context_free(a->context, groupLengths); - grib_context_free(a->context, firstOrderValues); + grib_context_free(context_, X); + grib_context_free(context_, groupWidths); + grib_context_free(context_, groupLengths); + grib_context_free(context_, firstOrderValues); if (orderOfSPD) - grib_context_free(a->context, SPD); + grib_context_free(context_, SPD); return ret; } -int grib_accessor_class_data_g1second_order_general_extended_packing_t::unpack_float(grib_accessor* a, float* values, size_t* len) +int grib_accessor_data_g1second_order_general_extended_packing_t::unpack_float(float* values, size_t* len) { - return unpack(a, NULL, values, len); + return unpack(NULL, values, len); } -int grib_accessor_class_data_g1second_order_general_extended_packing_t::unpack_double(grib_accessor* a, double* values, size_t* len) +int grib_accessor_data_g1second_order_general_extended_packing_t::unpack_double(double* values, size_t* len) { - return unpack(a, values, NULL, len); + return unpack(values, NULL, len); } static void grib_split_long_groups(grib_handle* hand, grib_context* c, long* numberOfGroups, long* lengthOfSecondOrderValues, @@ -543,13 +538,12 @@ static int get_bits_per_value(grib_handle* h, const char* bits_per_value_str, lo } // For the old implementation of pack_double, see -// src/deprecated/grib_accessor_class_data_g1second_order_general_extended_packing.pack_double.cc +// src/deprecated/grib_accessor_data_g1second_order_general_extended_packing.pack_double.cc // See ECC-441 and ECC-261 -int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_g1second_order_general_extended_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_g1second_order_general_extended_packing_t* self = (grib_accessor_data_g1second_order_general_extended_packing_t*)a; - int ret = 0; - int grib2 = 0; + int ret = 0; + int grib2 = 0; long bits_per_value, orderOfSPD, binary_scale_factor; long numberOfValues; double max, min; @@ -587,10 +581,10 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou int computeGroupA = 1; long dataHeadersLength, widthsLength, lengthsLength, firstOrderValuesLength; long decimal_scale_factor; - grib_handle* handle = grib_handle_of_accessor(a); + grib_handle* handle = grib_handle_of_accessor(this); long optimize_scaling_factor = 0; - self->double_dirty = 1; + double_dirty_ = 1; numberOfValues = *len; @@ -601,18 +595,21 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou else if (val[i] < min) min = val[i]; } + if ((ret = grib_check_data_values_minmax(handle, min, max)) != GRIB_SUCCESS) { + return ret; + } /* ECC-1219: packingType conversion from grid_ieee to grid_second_order */ - if ((ret = get_bits_per_value(handle, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((ret = get_bits_per_value(handle, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(handle, self->optimize_scaling_factor, &optimize_scaling_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(handle, optimize_scaling_factor_, &optimize_scaling_factor)) != GRIB_SUCCESS) return ret; if (optimize_scaling_factor) { - const int compat_gribex = handle->context->gribex_mode_on && self->edition == 1; + const int compat_gribex = handle->context->gribex_mode_on && edition_ == 1; const int compat_32bit = 1; - if ((ret = grib_optimize_decimal_factor(a, self->reference_value, + if ((ret = grib_optimize_decimal_factor(this, reference_value_, max, min, bits_per_value, compat_gribex, compat_32bit, &decimal_scale_factor, &binary_scale_factor, &reference_value)) != GRIB_SUCCESS) @@ -623,58 +620,59 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou /*min = min * decimal;*/ /*max = max * decimal;*/ - if ((ret = grib_set_long_internal(handle, self->decimal_scale_factor, decimal_scale_factor)) != + if ((ret = grib_set_long_internal(handle, decimal_scale_factor_, decimal_scale_factor)) != GRIB_SUCCESS) return ret; } else { /* For constant fields set decimal scale factor to 0 (See GRIB-165) */ if (min == max) { - grib_set_long_internal(handle, self->decimal_scale_factor, 0); + grib_set_long_internal(handle, decimal_scale_factor_, 0); } - if ((ret = grib_get_long_internal(handle, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(handle, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return ret; decimal = codes_power(decimal_scale_factor, 10); min = min * decimal; max = max * decimal; - if (grib_get_nearest_smaller_value(handle, self->reference_value, min, &reference_value) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Unable to find nearest_smaller_value of %g for %s", min, self->reference_value); + if (grib_get_nearest_smaller_value(handle, reference_value_, min, &reference_value) != GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, + "Unable to find nearest_smaller_value of %g for %s", min, reference_value_); return GRIB_INTERNAL_ERROR; } binary_scale_factor = grib_get_binary_scale_fact(max, reference_value, bits_per_value, &ret); + if (ret != GRIB_SUCCESS) return ret; divisor = codes_power(-binary_scale_factor, 2); } - if ((ret = grib_set_long_internal(handle, self->binary_scale_factor, binary_scale_factor)) != + if ((ret = grib_set_long_internal(handle, binary_scale_factor_, binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_double_internal(handle, self->reference_value, reference_value)) != + if ((ret = grib_set_double_internal(handle, reference_value_, reference_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(handle, self->offsetdata, &offsetBeforeData)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(handle, offsetdata_, &offsetBeforeData)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(handle, self->offsetsection, &offsetSection4)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(handle, offsetsection_, &offsetSection4)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(handle, self->orderOfSPD, &orderOfSPD)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(handle, orderOfSPD_, &orderOfSPD)) != GRIB_SUCCESS) return ret; - X = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfValues); + X = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfValues); for (i = 0; i < numberOfValues; i++) { X[i] = (((val[i] * decimal) - reference_value) * divisor) + 0.5; } - groupLengths = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfValues); - groupWidths = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfValues); - firstOrderValues = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfValues); + groupLengths = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfValues); + groupWidths = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfValues); + firstOrderValues = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfValues); /* spatial differencing */ switch (orderOfSPD) { @@ -951,7 +949,7 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou Focus on groups which have been shrank as left groups of an A group taking some of their elements. */ - offsets = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfGroups); + offsets = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfGroups); offsets[0] = orderOfSPD; for (i = 1; i < numberOfGroups; i++) offsets[i] = offsets[i - 1] + groupLengths[i - 1]; @@ -1013,7 +1011,7 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou } } } - grib_context_free(a->context, offsets); + grib_context_free(context_, offsets); } maxWidth = groupWidths[0]; @@ -1026,7 +1024,7 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou } if (maxWidth < 0 || maxLength < 0) { - grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Cannot compute parameters for second order packing."); + grib_context_log(parent_->h->context, GRIB_LOG_ERROR, "Cannot compute parameters for second order packing."); return GRIB_ENCODING_ERROR; } widthOfWidths = number_of_bits(handle, maxWidth); @@ -1037,8 +1035,8 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou lengthOfSecondOrderValues += groupLengths[i] * groupWidths[i]; } - if (!a->context->no_big_group_split) { - grib_split_long_groups(handle, a->context, &numberOfGroups, &lengthOfSecondOrderValues, + if (!context_->no_big_group_split) { + grib_split_long_groups(handle, context_, &numberOfGroups, &lengthOfSecondOrderValues, groupLengths, &widthOfLengths, groupWidths, widthOfWidths, firstOrderValues, widthOfFirstOrderValues); } @@ -1054,12 +1052,12 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou /* writing SPD */ if (orderOfSPD) { - if ((ret = grib_set_long_internal(handle, self->widthOfSPD, widthOfSPD)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(handle, widthOfSPD_, widthOfSPD)) != GRIB_SUCCESS) return ret; } /* end writing SPD */ - if ((ret = grib_set_long_internal(handle, self->widthOfFirstOrderValues, widthOfFirstOrderValues)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(handle, widthOfFirstOrderValues_, widthOfFirstOrderValues)) != GRIB_SUCCESS) return ret; dataHeadersLength = 25; @@ -1077,9 +1075,9 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou N2 = N2 > 65535 ? 65535 : N2; N1 = N1 > 65535 ? 65535 : N1; - grib_set_long(handle, self->NL, NL); - grib_set_long(handle, self->N1, N1); - grib_set_long(handle, self->N2, N2); + grib_set_long(handle, NL_, NL); + grib_set_long(handle, N1_, N1); + grib_set_long(handle, N2_, N2); if (numberOfGroups > 65535) { extraValues = numberOfGroups / 65536; @@ -1092,34 +1090,34 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou /* if no extraValues key present it is a GRIB2*/ grib2 = 0; - if ((ret = grib_set_long(handle, self->extraValues, extraValues)) != GRIB_SUCCESS) { + if ((ret = grib_set_long(handle, extraValues_, extraValues)) != GRIB_SUCCESS) { codedNumberOfGroups = numberOfGroups; grib2 = 1; } - if ((ret = grib_set_long_internal(handle, self->codedNumberOfGroups, codedNumberOfGroups)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(handle, codedNumberOfGroups_, codedNumberOfGroups)) != GRIB_SUCCESS) return ret; numberOfSecondOrderPackedValues = numberOfValues - orderOfSPD; if (!grib2 && numberOfSecondOrderPackedValues > 65535) numberOfSecondOrderPackedValues = 65535; - if ((ret = grib_set_long_internal(handle, self->numberOfSecondOrderPackedValues, numberOfSecondOrderPackedValues)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(handle, numberOfSecondOrderPackedValues_, numberOfSecondOrderPackedValues)) != GRIB_SUCCESS) return ret; if (grib2) { - if ((ret = grib_set_long_internal(handle, self->bits_per_value, bits_per_value)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(handle, bits_per_value_, bits_per_value)) != GRIB_SUCCESS) return ret; } else { - if ((ret = grib_set_long_internal(handle, self->bits_per_value, 0)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(handle, bits_per_value_, 0)) != GRIB_SUCCESS) return ret; } - if ((ret = grib_set_long_internal(handle, self->widthOfWidths, widthOfWidths)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(handle, widthOfWidths_, widthOfWidths)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(handle, self->widthOfLengths, widthOfLengths)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(handle, widthOfLengths_, widthOfLengths)) != GRIB_SUCCESS) return ret; lengthOfSecondOrderValues = 0; @@ -1133,10 +1131,10 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou /* padding section 4 to an even number of octets */ size = ((size + offsetBeforeData - offsetSection4) % 2) ? size + 1 : size; half_byte = 8 * size - sizebits; - if ((ret = grib_set_long_internal(handle, self->half_byte, half_byte)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(handle, half_byte_, half_byte)) != GRIB_SUCCESS) return ret; - buffer = (unsigned char*)grib_context_malloc_clear(a->context, size); + buffer = (unsigned char*)grib_context_malloc_clear(context_, size); pos = 0; if (orderOfSPD) { @@ -1148,20 +1146,20 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou for (i = 0; i < orderOfSPD; i++) SPD[i] = X[i]; SPD[orderOfSPD] = bias; - ret = grib_set_long_array_internal(handle, self->SPD, SPD, nSPD); + ret = grib_set_long_array_internal(handle, SPD_, SPD, nSPD); if (ret) return ret; } - ret = grib_set_long_array_internal(handle, self->groupWidths, groupWidths, (size_t)numberOfGroups); + ret = grib_set_long_array_internal(handle, groupWidths_, groupWidths, (size_t)numberOfGroups); if (ret) return ret; - ret = grib_set_long_array_internal(handle, self->groupLengths, groupLengths, (size_t)numberOfGroups); + ret = grib_set_long_array_internal(handle, groupLengths_, groupLengths, (size_t)numberOfGroups); if (ret) return ret; - ret = grib_set_long_array_internal(handle, self->firstOrderValues, firstOrderValues, (size_t)numberOfGroups); + ret = grib_set_long_array_internal(handle, firstOrderValues_, firstOrderValues, (size_t)numberOfGroups); if (ret) return ret; @@ -1189,31 +1187,30 @@ int grib_accessor_class_data_g1second_order_general_extended_packing_t::pack_dou } /* ECC-259: Set correct number of values */ - ret = grib_set_long_internal(a->parent->h, self->number_of_values, *len); + ret = grib_set_long_internal(parent_->h, number_of_values_, *len); if (ret) return ret; - ret = grib_buffer_replace(a, buffer, size, 1, 1); + ret = grib_buffer_replace(this, buffer, size, 1, 1); if (ret) return ret; - grib_context_free(a->context, buffer); - grib_context_free(a->context, X); - grib_context_free(a->context, groupLengths); - grib_context_free(a->context, groupWidths); - grib_context_free(a->context, firstOrderValues); + grib_context_free(context_, buffer); + grib_context_free(context_, X); + grib_context_free(context_, groupLengths); + grib_context_free(context_, groupWidths); + grib_context_free(context_, firstOrderValues); return GRIB_SUCCESS; } -void grib_accessor_class_data_g1second_order_general_extended_packing_t::destroy(grib_context* context, grib_accessor* a) +void grib_accessor_data_g1second_order_general_extended_packing_t::destroy(grib_context* context) { - grib_accessor_data_g1second_order_general_extended_packing_t* self = (grib_accessor_data_g1second_order_general_extended_packing_t*)a; - if (self->dvalues != NULL) { - grib_context_free(context, self->dvalues); - self->dvalues = NULL; + if (dvalues_ != NULL) { + grib_context_free(context, dvalues_); + dvalues_ = NULL; } - if (self->fvalues != NULL) { - grib_context_free(context, self->fvalues); - self->fvalues = NULL; + if (fvalues_ != NULL) { + grib_context_free(context, fvalues_); + fvalues_ = NULL; } - grib_accessor_class_data_simple_packing_t::destroy(context, a); + grib_accessor_data_simple_packing_t::destroy(context); } diff --git a/src/accessor/grib_accessor_class_data_g1second_order_general_extended_packing.h b/src/accessor/grib_accessor_class_data_g1second_order_general_extended_packing.h index 4bb50ae34..0f155ba92 100644 --- a/src/accessor/grib_accessor_class_data_g1second_order_general_extended_packing.h +++ b/src/accessor/grib_accessor_class_data_g1second_order_general_extended_packing.h @@ -15,50 +15,47 @@ class grib_accessor_data_g1second_order_general_extended_packing_t : public grib_accessor_data_simple_packing_t { public: - /* Members defined in data_g1second_order_general_extended_packing */ - const char* half_byte; - const char* packingType; - const char* ieee_packing; - const char* precision; - const char* widthOfFirstOrderValues; - const char* firstOrderValues; - const char* N1; - const char* N2; - const char* numberOfGroups; - const char* codedNumberOfGroups; - const char* numberOfSecondOrderPackedValues; - const char* extraValues; - const char* groupWidths; - const char* widthOfWidths; - const char* groupLengths; - const char* widthOfLengths; - const char* NL; - const char* SPD; - const char* widthOfSPD; - const char* orderOfSPD; - const char* numberOfPoints; - const char* dataFlag; - double* dvalues; - float* fvalues; - int double_dirty; - int float_dirty; - size_t size; -}; - -class grib_accessor_class_data_g1second_order_general_extended_packing_t : public grib_accessor_class_data_simple_packing_t -{ -public: - grib_accessor_class_data_g1second_order_general_extended_packing_t(const char* name) : grib_accessor_class_data_simple_packing_t(name) {} + grib_accessor_data_g1second_order_general_extended_packing_t() : + grib_accessor_data_simple_packing_t() { class_name_ = "data_g1second_order_general_extended_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g1second_order_general_extended_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void init(const long, grib_arguments*) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; private: - int unpack(grib_accessor* a, double*, float*, size_t*); + int unpack(double*, float*, size_t*); + +private: + const char* half_byte_ = nullptr; + const char* packingType_ = nullptr; + const char* ieee_packing_ = nullptr; + const char* precision_ = nullptr; + const char* widthOfFirstOrderValues_ = nullptr; + const char* firstOrderValues_ = nullptr; + const char* N1_ = nullptr; + const char* N2_ = nullptr; + const char* numberOfGroups_ = nullptr; + const char* codedNumberOfGroups_ = nullptr; + const char* numberOfSecondOrderPackedValues_ = nullptr; + const char* extraValues_ = nullptr; + const char* groupWidths_ = nullptr; + const char* widthOfWidths_ = nullptr; + const char* groupLengths_ = nullptr; + const char* widthOfLengths_ = nullptr; + const char* NL_ = nullptr; + const char* SPD_ = nullptr; + const char* widthOfSPD_ = nullptr; + const char* orderOfSPD_ = nullptr; + const char* numberOfPoints_ = nullptr; + const char* dataFlag_ = nullptr; + double* dvalues_ = nullptr; + float* fvalues_ = nullptr; + int double_dirty_ = 0; + int float_dirty_ = 0; + size_t size_ = 0; }; diff --git a/src/accessor/grib_accessor_class_data_g1second_order_general_packing.cc b/src/accessor/grib_accessor_class_data_g1second_order_general_packing.cc index 3ee5f6a4f..ac9622b64 100644 --- a/src/accessor/grib_accessor_class_data_g1second_order_general_packing.cc +++ b/src/accessor/grib_accessor_class_data_g1second_order_general_packing.cc @@ -10,51 +10,47 @@ #include "grib_accessor_class_data_g1second_order_general_packing.h" -grib_accessor_class_data_g1second_order_general_packing_t _grib_accessor_class_data_g1second_order_general_packing{ "data_g1second_order_general_packing" }; -grib_accessor_class* grib_accessor_class_data_g1second_order_general_packing = &_grib_accessor_class_data_g1second_order_general_packing; +grib_accessor_data_g1second_order_general_packing_t _grib_accessor_data_g1second_order_general_packing{}; +grib_accessor* grib_accessor_data_g1second_order_general_packing = &_grib_accessor_data_g1second_order_general_packing; - -void grib_accessor_class_data_g1second_order_general_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g1second_order_general_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_simple_packing_t::init(a, v, args); - grib_accessor_data_g1second_order_general_packing_t* self = (grib_accessor_data_g1second_order_general_packing_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_data_simple_packing_t::init(v, args); + grib_handle* hand = grib_handle_of_accessor(this); - self->half_byte = grib_arguments_get_name(hand, args, self->carg++); - self->packingType = grib_arguments_get_name(hand, args, self->carg++); - self->ieee_packing = grib_arguments_get_name(hand, args, self->carg++); - self->precision = grib_arguments_get_name(hand, args, self->carg++); - self->widthOfFirstOrderValues = grib_arguments_get_name(hand, args, self->carg++); - self->N1 = grib_arguments_get_name(hand, args, self->carg++); - self->N2 = grib_arguments_get_name(hand, args, self->carg++); - self->numberOfGroups = grib_arguments_get_name(hand, args, self->carg++); - self->numberOfSecondOrderPackedValues = grib_arguments_get_name(hand, args, self->carg++); - self->extraValues = grib_arguments_get_name(hand, args, self->carg++); - self->Ni = grib_arguments_get_name(hand, args, self->carg++); - self->Nj = grib_arguments_get_name(hand, args, self->carg++); - self->pl = grib_arguments_get_name(hand, args, self->carg++); - self->jPointsAreConsecutive = grib_arguments_get_name(hand, args, self->carg++); - self->bitmap = grib_arguments_get_name(hand, args, self->carg++); - self->groupWidths = grib_arguments_get_name(hand, args, self->carg++); - self->edition = 1; - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + half_byte_ = grib_arguments_get_name(hand, args, carg_++); + packingType_ = grib_arguments_get_name(hand, args, carg_++); + ieee_packing_ = grib_arguments_get_name(hand, args, carg_++); + precision_ = grib_arguments_get_name(hand, args, carg_++); + widthOfFirstOrderValues_ = grib_arguments_get_name(hand, args, carg_++); + N1_ = grib_arguments_get_name(hand, args, carg_++); + N2_ = grib_arguments_get_name(hand, args, carg_++); + numberOfGroups_ = grib_arguments_get_name(hand, args, carg_++); + numberOfSecondOrderPackedValues_ = grib_arguments_get_name(hand, args, carg_++); + extraValues_ = grib_arguments_get_name(hand, args, carg_++); + Ni_ = grib_arguments_get_name(hand, args, carg_++); + Nj_ = grib_arguments_get_name(hand, args, carg_++); + pl_ = grib_arguments_get_name(hand, args, carg_++); + jPointsAreConsecutive_ = grib_arguments_get_name(hand, args, carg_++); + bitmap_ = grib_arguments_get_name(hand, args, carg_++); + groupWidths_ = grib_arguments_get_name(hand, args, carg_++); + edition_ = 1; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_g1second_order_general_packing_t::value_count(grib_accessor* a, long* numberOfSecondOrderPackedValues) +int grib_accessor_data_g1second_order_general_packing_t::value_count(long* numberOfSecondOrderPackedValues) { - grib_accessor_data_g1second_order_general_packing_t* self = (grib_accessor_data_g1second_order_general_packing_t*)a; *numberOfSecondOrderPackedValues = 0; - int err = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfSecondOrderPackedValues, numberOfSecondOrderPackedValues); + int err = grib_get_long_internal(grib_handle_of_accessor(this), numberOfSecondOrderPackedValues_, numberOfSecondOrderPackedValues); return err; } template -static int unpack_real(grib_accessor* a, T* values, size_t* len) +int grib_accessor_data_g1second_order_general_packing_t::unpack_real(T* values, size_t* len) { static_assert(std::is_floating_point::value, "Requires floating point numbers"); - grib_accessor_data_g1second_order_general_packing_t* self = (grib_accessor_data_g1second_order_general_packing_t*)a; int ret = 0; long numberOfGroups, numberOfSecondOrderPackedValues; long* groupWidths = 0; @@ -62,7 +58,7 @@ static int unpack_real(grib_accessor* a, T* values, size_t* len) long* X = 0; long pos = 0; long widthOfFirstOrderValues = 0; - unsigned char* buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data; + unsigned char* buf = (unsigned char*)grib_handle_of_accessor(this)->buffer->data; long i, n; double reference_value; long binary_scale_factor; @@ -72,44 +68,44 @@ static int unpack_real(grib_accessor* a, T* values, size_t* len) long groupLength, j; size_t groupWidthsSize; - buf += a->byte_offset(); - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfGroups, &numberOfGroups)) != GRIB_SUCCESS) + buf += byte_offset(); + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), numberOfGroups_, &numberOfGroups)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->widthOfFirstOrderValues, &widthOfFirstOrderValues)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), widthOfFirstOrderValues_, &widthOfFirstOrderValues)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(grib_handle_of_accessor(this), reference_value_, &reference_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfSecondOrderPackedValues, + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), numberOfSecondOrderPackedValues_, &numberOfSecondOrderPackedValues)) != GRIB_SUCCESS) return ret; if (*len < (size_t)numberOfSecondOrderPackedValues) return GRIB_ARRAY_TOO_SMALL; - groupWidths = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfGroups); + groupWidths = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfGroups); groupWidthsSize = numberOfGroups; - if ((ret = grib_get_long_array_internal(grib_handle_of_accessor(a), self->groupWidths, groupWidths, &groupWidthsSize)) != GRIB_SUCCESS) + if ((ret = grib_get_long_array_internal(grib_handle_of_accessor(this), groupWidths_, groupWidths, &groupWidthsSize)) != GRIB_SUCCESS) return ret; - secondaryBitmap = (long*)grib_context_malloc_clear(a->context, sizeof(long) * (numberOfSecondOrderPackedValues + 1)); + secondaryBitmap = (long*)grib_context_malloc_clear(context_, sizeof(long) * (numberOfSecondOrderPackedValues + 1)); secondaryBitmap[numberOfSecondOrderPackedValues] = 1; grib_decode_long_array(buf, &pos, 1, numberOfSecondOrderPackedValues, secondaryBitmap); pos = 8 * ((pos + 7) / 8); - firstOrderValues = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfGroups); + firstOrderValues = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfGroups); grib_decode_long_array(buf, &pos, widthOfFirstOrderValues, numberOfGroups, firstOrderValues); pos = 8 * ((pos + 7) / 8); - X = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfSecondOrderPackedValues); + X = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfSecondOrderPackedValues); n = 0; i = -1; @@ -146,30 +142,30 @@ static int unpack_real(grib_accessor* a, T* values, size_t* len) } *len = numberOfSecondOrderPackedValues; - grib_context_free(a->context, secondaryBitmap); - grib_context_free(a->context, firstOrderValues); - grib_context_free(a->context, X); - grib_context_free(a->context, groupWidths); + grib_context_free(context_, secondaryBitmap); + grib_context_free(context_, firstOrderValues); + grib_context_free(context_, X); + grib_context_free(context_, groupWidths); return ret; } -int grib_accessor_class_data_g1second_order_general_packing_t::unpack_float(grib_accessor* a, float* values, size_t* len) +int grib_accessor_data_g1second_order_general_packing_t::unpack_float(float* values, size_t* len) { - return unpack_real(a, values, len); + return unpack_real(values, len); } -int grib_accessor_class_data_g1second_order_general_packing_t::unpack_double(grib_accessor* a, double* values, size_t* len) +int grib_accessor_data_g1second_order_general_packing_t::unpack_double(double* values, size_t* len) { - return unpack_real(a, values, len); + return unpack_real(values, len); } -int grib_accessor_class_data_g1second_order_general_packing_t::pack_double(grib_accessor* a, const double* cval, size_t* len) +int grib_accessor_data_g1second_order_general_packing_t::pack_double(const double* cval, size_t* len) { /* return GRIB_NOT_IMPLEMENTED; */ char type[] = "grid_second_order"; size_t size = strlen(type); - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); int err = grib_set_string(hand, "packingType", type, &size); if (err) diff --git a/src/accessor/grib_accessor_class_data_g1second_order_general_packing.h b/src/accessor/grib_accessor_class_data_g1second_order_general_packing.h index 95295dae1..174c63fd0 100644 --- a/src/accessor/grib_accessor_class_data_g1second_order_general_packing.h +++ b/src/accessor/grib_accessor_class_data_g1second_order_general_packing.h @@ -16,33 +16,32 @@ class grib_accessor_data_g1second_order_general_packing_t : public grib_accessor_data_simple_packing_t { public: - /* Members defined in data_g1second_order_general_packing */ - const char* half_byte; - const char* packingType; - const char* ieee_packing; - const char* precision; - const char* widthOfFirstOrderValues; - const char* N1; - const char* N2; - const char* numberOfGroups; - const char* numberOfSecondOrderPackedValues; - const char* extraValues; - const char* pl; - const char* Ni; - const char* Nj; - const char* jPointsAreConsecutive; - const char* bitmap; - const char* groupWidths; -}; - -class grib_accessor_class_data_g1second_order_general_packing_t : public grib_accessor_class_data_simple_packing_t -{ -public: - grib_accessor_class_data_g1second_order_general_packing_t(const char* name) : grib_accessor_class_data_simple_packing_t(name) {} + grib_accessor_data_g1second_order_general_packing_t() : + grib_accessor_data_simple_packing_t() { class_name_ = "data_g1second_order_general_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g1second_order_general_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* half_byte_ = nullptr; + const char* packingType_ = nullptr; + const char* ieee_packing_ = nullptr; + const char* precision_ = nullptr; + const char* widthOfFirstOrderValues_ = nullptr; + const char* N1_ = nullptr; + const char* N2_ = nullptr; + const char* numberOfGroups_ = nullptr; + const char* numberOfSecondOrderPackedValues_ = nullptr; + const char* extraValues_ = nullptr; + const char* pl_ = nullptr; + const char* Ni_ = nullptr; + const char* Nj_ = nullptr; + const char* jPointsAreConsecutive_ = nullptr; + const char* bitmap_ = nullptr; + const char* groupWidths_ = nullptr; + + template int unpack_real(T* values, size_t* len); }; diff --git a/src/accessor/grib_accessor_class_data_g1second_order_row_by_row_packing.cc b/src/accessor/grib_accessor_class_data_g1second_order_row_by_row_packing.cc index 7697a3a69..49c8550c2 100644 --- a/src/accessor/grib_accessor_class_data_g1second_order_row_by_row_packing.cc +++ b/src/accessor/grib_accessor_class_data_g1second_order_row_by_row_packing.cc @@ -10,58 +10,54 @@ #include "grib_accessor_class_data_g1second_order_row_by_row_packing.h" -grib_accessor_class_data_g1second_order_row_by_row_packing_t _grib_accessor_class_data_g1second_order_row_by_row_packing{ "data_g1second_order_row_by_row_packing" }; -grib_accessor_class* grib_accessor_class_data_g1second_order_row_by_row_packing = &_grib_accessor_class_data_g1second_order_row_by_row_packing; +grib_accessor_data_g1second_order_row_by_row_packing_t _grib_accessor_data_g1second_order_row_by_row_packing{}; +grib_accessor* grib_accessor_data_g1second_order_row_by_row_packing = &_grib_accessor_data_g1second_order_row_by_row_packing; - -void grib_accessor_class_data_g1second_order_row_by_row_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g1second_order_row_by_row_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_simple_packing_t::init(a, v, args); - grib_accessor_data_g1second_order_row_by_row_packing_t* self = (grib_accessor_data_g1second_order_row_by_row_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); + grib_accessor_data_simple_packing_t::init(v, args); + grib_handle* gh = grib_handle_of_accessor(this); - self->half_byte = grib_arguments_get_name(gh, args, self->carg++); - self->packingType = grib_arguments_get_name(gh, args, self->carg++); - self->ieee_packing = grib_arguments_get_name(gh, args, self->carg++); - self->precision = grib_arguments_get_name(gh, args, self->carg++); - self->widthOfFirstOrderValues = grib_arguments_get_name(gh, args, self->carg++); - self->N1 = grib_arguments_get_name(gh, args, self->carg++); - self->N2 = grib_arguments_get_name(gh, args, self->carg++); - self->numberOfGroups = grib_arguments_get_name(gh, args, self->carg++); - self->numberOfSecondOrderPackedValues = grib_arguments_get_name(gh, args, self->carg++); - self->extraValues = grib_arguments_get_name(gh, args, self->carg++); - self->Ni = grib_arguments_get_name(gh, args, self->carg++); - self->Nj = grib_arguments_get_name(gh, args, self->carg++); - self->pl = grib_arguments_get_name(gh, args, self->carg++); - self->jPointsAreConsecutive = grib_arguments_get_name(gh, args, self->carg++); - self->groupWidths = grib_arguments_get_name(gh, args, self->carg++); - self->bitmap = grib_arguments_get_name(gh, args, self->carg++); - self->edition = 1; - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + half_byte_ = grib_arguments_get_name(gh, args, carg_++); + packingType_ = grib_arguments_get_name(gh, args, carg_++); + ieee_packing_ = grib_arguments_get_name(gh, args, carg_++); + precision_ = grib_arguments_get_name(gh, args, carg_++); + widthOfFirstOrderValues_ = grib_arguments_get_name(gh, args, carg_++); + N1_ = grib_arguments_get_name(gh, args, carg_++); + N2_ = grib_arguments_get_name(gh, args, carg_++); + numberOfGroups_ = grib_arguments_get_name(gh, args, carg_++); + numberOfSecondOrderPackedValues_ = grib_arguments_get_name(gh, args, carg_++); + extraValues_ = grib_arguments_get_name(gh, args, carg_++); + Ni_ = grib_arguments_get_name(gh, args, carg_++); + Nj_ = grib_arguments_get_name(gh, args, carg_++); + pl_ = grib_arguments_get_name(gh, args, carg_++); + jPointsAreConsecutive_ = grib_arguments_get_name(gh, args, carg_++); + groupWidths_ = grib_arguments_get_name(gh, args, carg_++); + bitmap_ = grib_arguments_get_name(gh, args, carg_++); + edition_ = 1; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_g1second_order_row_by_row_packing_t::value_count(grib_accessor* a, long* count) +int grib_accessor_data_g1second_order_row_by_row_packing_t::value_count(long* count) { - grib_accessor_data_g1second_order_row_by_row_packing_t* self = (grib_accessor_data_g1second_order_row_by_row_packing_t*)a; - - grib_handle* gh = grib_handle_of_accessor(a); + grib_handle* gh = grib_handle_of_accessor(this); long n = 0, i = 0; - long numberOfRows = 0; + long numberOfRows = 0; long jPointsAreConsecutive = 0; long Ni = 0, Nj = 0; int bitmapPresent = 0; size_t plSize = 0; long* pl = 0; int ret = 0; - grib_context* c = a->context; + grib_context* c = context_; - if (self->bitmap) + if (bitmap_) bitmapPresent = 1; - if ((ret = grib_get_long_internal(gh, self->jPointsAreConsecutive, &jPointsAreConsecutive)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, jPointsAreConsecutive_, &jPointsAreConsecutive)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->Ni, &Ni)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, Ni_, &Ni)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->Nj, &Nj)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, Nj_, &Nj)) != GRIB_SUCCESS) return ret; if (jPointsAreConsecutive) { numberOfRows = Ni; @@ -71,10 +67,10 @@ int grib_accessor_class_data_g1second_order_row_by_row_packing_t::value_count(gr } plSize = 0; - ret = grib_get_size(gh, self->pl, &plSize); + ret = grib_get_size(gh, pl_, &plSize); if (ret == GRIB_SUCCESS) { - pl = (long*)grib_context_malloc_clear(a->context, sizeof(long) * plSize); - if ((ret = grib_get_long_array(gh, self->pl, pl, &plSize)) != GRIB_SUCCESS) + pl = (long*)grib_context_malloc_clear(context_, sizeof(long) * plSize); + if ((ret = grib_get_long_array(gh, pl_, pl, &plSize)) != GRIB_SUCCESS) return ret; } ret = 0; @@ -92,13 +88,13 @@ int grib_accessor_class_data_g1second_order_row_by_row_packing_t::value_count(gr else { numberOfPoints = Ni * Nj; } - bitmap = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfPoints); + bitmap = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfPoints); pbitmap = bitmap; - grib_get_long_array(gh, self->bitmap, bitmap, &numberOfPoints); + grib_get_long_array(gh, bitmap_, bitmap, &numberOfPoints); for (i = 0; i < numberOfPoints; i++) n += *(bitmap++); - grib_context_free(a->context, pbitmap); + grib_context_free(context_, pbitmap); } else { if (plSize) { @@ -117,12 +113,10 @@ int grib_accessor_class_data_g1second_order_row_by_row_packing_t::value_count(gr } template -static int unpack_real(grib_accessor* a, T* values, size_t* len) +int grib_accessor_data_g1second_order_row_by_row_packing_t::unpack_real(T* values, size_t* len) { - grib_accessor_data_g1second_order_row_by_row_packing_t* self = (grib_accessor_data_g1second_order_row_by_row_packing_t*)a; - - grib_handle* gh = grib_handle_of_accessor(a); - int ret = 0; + grib_handle* gh = grib_handle_of_accessor(this); + int ret = 0; long numberOfGroups, numberOfSecondOrderPackedValues; long* groupWidths = 0; long* firstOrderValues = 0; @@ -143,25 +137,25 @@ static int unpack_real(grib_accessor* a, T* values, size_t* len) size_t plSize = 0; long* pl = 0; - buf += a->byte_offset(); - if ((ret = grib_get_long_internal(gh, self->numberOfGroups, &numberOfGroups)) != GRIB_SUCCESS) + buf += byte_offset(); + if ((ret = grib_get_long_internal(gh, numberOfGroups_, &numberOfGroups)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->jPointsAreConsecutive, &jPointsAreConsecutive)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, jPointsAreConsecutive_, &jPointsAreConsecutive)) != GRIB_SUCCESS) return ret; - if (self->bitmap) + if (bitmap_) bitmapPresent = 1; - ret = grib_get_size(gh, self->pl, &plSize); + ret = grib_get_size(gh, pl_, &plSize); if (ret == GRIB_SUCCESS) { - pl = (long*)grib_context_malloc_clear(a->context, sizeof(long) * plSize); - if ((ret = grib_get_long_array(gh, self->pl, pl, &plSize)) != GRIB_SUCCESS) + pl = (long*)grib_context_malloc_clear(context_, sizeof(long) * plSize); + if ((ret = grib_get_long_array(gh, pl_, pl, &plSize)) != GRIB_SUCCESS) return ret; } - if ((ret = grib_get_long_internal(gh, self->Ni, &Ni)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, Ni_, &Ni)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->Nj, &Nj)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, Nj_, &Nj)) != GRIB_SUCCESS) return ret; if (jPointsAreConsecutive) { numberOfRows = Ni; @@ -172,7 +166,7 @@ static int unpack_real(grib_accessor* a, T* values, size_t* len) numberOfColumns = Ni; } - numbersPerRow = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfRows); + numbersPerRow = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfRows); if (!numbersPerRow) return GRIB_OUT_OF_MEMORY; if (bitmapPresent) { @@ -184,9 +178,9 @@ static int unpack_real(grib_accessor* a, T* values, size_t* len) for (i = 0; i < numberOfRows; i++) numberOfPoints += pl[i]; } - bitmap = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfPoints); + bitmap = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfPoints); pbitmap = bitmap; - grib_get_long_array(gh, self->bitmap, bitmap, &numberOfPoints); + grib_get_long_array(gh, bitmap_, bitmap, &numberOfPoints); if (plSize && pl) { for (i = 0; i < numberOfRows; i++) { for (j = 0; j < pl[i]; j++) { @@ -203,7 +197,7 @@ static int unpack_real(grib_accessor* a, T* values, size_t* len) } } - grib_context_free(a->context, pbitmap); + grib_context_free(context_, pbitmap); } else { if (plSize && pl) { @@ -216,28 +210,28 @@ static int unpack_real(grib_accessor* a, T* values, size_t* len) } } - if ((ret = grib_get_long_internal(gh, self->widthOfFirstOrderValues, &widthOfFirstOrderValues)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, widthOfFirstOrderValues_, &widthOfFirstOrderValues)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(gh, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(gh, reference_value_, &reference_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(gh, self->numberOfSecondOrderPackedValues, + if ((ret = grib_get_long_internal(gh, numberOfSecondOrderPackedValues_, &numberOfSecondOrderPackedValues)) != GRIB_SUCCESS) return ret; - groupWidths = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfGroups); + groupWidths = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfGroups); groupWidthsSize = numberOfGroups; - if ((ret = grib_get_long_array_internal(gh, self->groupWidths, groupWidths, &groupWidthsSize)) != GRIB_SUCCESS) + if ((ret = grib_get_long_array_internal(gh, groupWidths_, groupWidths, &groupWidthsSize)) != GRIB_SUCCESS) return ret; - firstOrderValues = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfGroups); + firstOrderValues = (long*)grib_context_malloc_clear(context_, sizeof(long) * numberOfGroups); grib_decode_long_array(buf, &pos, widthOfFirstOrderValues, numberOfGroups, firstOrderValues); pos = 8 * ((pos + 7) / 8); @@ -248,7 +242,7 @@ static int unpack_real(grib_accessor* a, T* values, size_t* len) if (*len < (size_t)n) return GRIB_ARRAY_TOO_SMALL; - X = (long*)grib_context_malloc_clear(a->context, sizeof(long) * n); + X = (long*)grib_context_malloc_clear(context_, sizeof(long) * n); n = 0; k = 0; for (i = 0; i < numberOfGroups; i++) { @@ -273,31 +267,31 @@ static int unpack_real(grib_accessor* a, T* values, size_t* len) for (i = 0; i < n; i++) { values[i] = (T)(((X[i] * s) + reference_value) * d); } - grib_context_free(a->context, firstOrderValues); - grib_context_free(a->context, X); - grib_context_free(a->context, groupWidths); + grib_context_free(context_, firstOrderValues); + grib_context_free(context_, X); + grib_context_free(context_, groupWidths); if (plSize) - grib_context_free(a->context, pl); + grib_context_free(context_, pl); if (numbersPerRow) - grib_context_free(a->context, numbersPerRow); + grib_context_free(context_, numbersPerRow); return ret; } -int grib_accessor_class_data_g1second_order_row_by_row_packing_t::unpack_float(grib_accessor* a, float* values, size_t* len) +int grib_accessor_data_g1second_order_row_by_row_packing_t::unpack_float(float* values, size_t* len) { - return unpack_real(a, values, len); + return unpack_real(values, len); } -int grib_accessor_class_data_g1second_order_row_by_row_packing_t::unpack_double(grib_accessor* a, double* values, size_t* len) +int grib_accessor_data_g1second_order_row_by_row_packing_t::unpack_double(double* values, size_t* len) { - return unpack_real(a, values, len); + return unpack_real(values, len); } -int grib_accessor_class_data_g1second_order_row_by_row_packing_t::pack_double(grib_accessor* a, const double* cval, size_t* len) +int grib_accessor_data_g1second_order_row_by_row_packing_t::pack_double(const double* cval, size_t* len) { int err = 0; - grib_handle* gh = grib_handle_of_accessor(a); + grib_handle* gh = grib_handle_of_accessor(this); char type[] = "grid_second_order"; size_t size = strlen(type); diff --git a/src/accessor/grib_accessor_class_data_g1second_order_row_by_row_packing.h b/src/accessor/grib_accessor_class_data_g1second_order_row_by_row_packing.h index eca551669..adde49272 100644 --- a/src/accessor/grib_accessor_class_data_g1second_order_row_by_row_packing.h +++ b/src/accessor/grib_accessor_class_data_g1second_order_row_by_row_packing.h @@ -16,33 +16,32 @@ class grib_accessor_data_g1second_order_row_by_row_packing_t : public grib_accessor_data_simple_packing_t { public: - /* Members defined in data_g1second_order_row_by_row_packing */ - const char* half_byte; - const char* packingType; - const char* ieee_packing; - const char* precision; - const char* widthOfFirstOrderValues; - const char* N1; - const char* N2; - const char* numberOfGroups; - const char* numberOfSecondOrderPackedValues; - const char* extraValues; - const char* pl; - const char* Ni; - const char* Nj; - const char* jPointsAreConsecutive; - const char* bitmap; - const char* groupWidths; -}; - -class grib_accessor_class_data_g1second_order_row_by_row_packing_t : public grib_accessor_class_data_simple_packing_t -{ -public: - grib_accessor_class_data_g1second_order_row_by_row_packing_t(const char* name) : grib_accessor_class_data_simple_packing_t(name) {} + grib_accessor_data_g1second_order_row_by_row_packing_t() : + grib_accessor_data_simple_packing_t() { class_name_ = "data_g1second_order_row_by_row_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g1second_order_row_by_row_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* half_byte_ = nullptr; + const char* packingType_ = nullptr; + const char* ieee_packing_ = nullptr; + const char* precision_ = nullptr; + const char* widthOfFirstOrderValues_ = nullptr; + const char* N1_ = nullptr; + const char* N2_ = nullptr; + const char* numberOfGroups_ = nullptr; + const char* numberOfSecondOrderPackedValues_ = nullptr; + const char* extraValues_ = nullptr; + const char* pl_ = nullptr; + const char* Ni_ = nullptr; + const char* Nj_ = nullptr; + const char* jPointsAreConsecutive_ = nullptr; + const char* bitmap_ = nullptr; + const char* groupWidths_ = nullptr; + + template int unpack_real(T* values, size_t* len); }; diff --git a/src/accessor/grib_accessor_class_data_g1secondary_bitmap.cc b/src/accessor/grib_accessor_class_data_g1secondary_bitmap.cc index 7b80a1891..289c403ca 100644 --- a/src/accessor/grib_accessor_class_data_g1secondary_bitmap.cc +++ b/src/accessor/grib_accessor_class_data_g1secondary_bitmap.cc @@ -10,30 +10,27 @@ #include "grib_accessor_class_data_g1secondary_bitmap.h" -grib_accessor_class_data_g1secondary_bitmap_t _grib_accessor_class_data_g1secondary_bitmap{ "data_g1secondary_bitmap" }; -grib_accessor_class* grib_accessor_class_data_g1secondary_bitmap = &_grib_accessor_class_data_g1secondary_bitmap; +grib_accessor_data_g1secondary_bitmap_t _grib_accessor_data_g1secondary_bitmap{}; +grib_accessor* grib_accessor_data_g1secondary_bitmap = &_grib_accessor_data_g1secondary_bitmap; - -void grib_accessor_class_data_g1secondary_bitmap_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g1secondary_bitmap_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_secondary_bitmap_t::init(a, v, args); - grib_accessor_data_g1secondary_bitmap_t* self = (grib_accessor_data_g1secondary_bitmap_t*)a; - self->number_of_ones = grib_arguments_get_name(grib_handle_of_accessor(a), args, 4); + grib_accessor_data_secondary_bitmap_t::init(v, args); + number_of_ones_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 4); } -int grib_accessor_class_data_g1secondary_bitmap_t::value_count(grib_accessor* a, long* count) +int grib_accessor_data_g1secondary_bitmap_t::value_count(long* count) { - grib_accessor_data_g1secondary_bitmap_t* self = (grib_accessor_data_g1secondary_bitmap_t*)a; size_t len = 0; - int err = 0; + int err = 0; long expand_by; *count = 0; - err = grib_get_long_internal(grib_handle_of_accessor(a), self->expand_by, &expand_by); + err = grib_get_long_internal(grib_handle_of_accessor(this), expand_by_, &expand_by); if (err) return err; - err = grib_get_size(grib_handle_of_accessor(a), self->primary_bitmap, &len); + err = grib_get_size(grib_handle_of_accessor(this), primary_bitmap_, &len); if (err) return err; @@ -41,10 +38,8 @@ int grib_accessor_class_data_g1secondary_bitmap_t::value_count(grib_accessor* a, return GRIB_SUCCESS; } -int grib_accessor_class_data_g1secondary_bitmap_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_g1secondary_bitmap_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_g1secondary_bitmap_t* self = (grib_accessor_data_g1secondary_bitmap_t*)a; - int err = 0; long primary_len = 0; long secondary_len = 0; @@ -62,12 +57,12 @@ int grib_accessor_class_data_g1secondary_bitmap_t::pack_double(grib_accessor* a, if (*len == 0) return GRIB_NO_VALUES; - if ((err = grib_get_long(grib_handle_of_accessor(a), self->expand_by, &expand_by)) != GRIB_SUCCESS) + if ((err = grib_get_long(grib_handle_of_accessor(this), expand_by_, &expand_by)) != GRIB_SUCCESS) return err; if (expand_by <= 0) return GRIB_ENCODING_ERROR; - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->missing_value, &missing_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(grib_handle_of_accessor(this), missing_value_, &missing_value)) != GRIB_SUCCESS) return err; if (*len % expand_by) { @@ -76,14 +71,14 @@ int grib_accessor_class_data_g1secondary_bitmap_t::pack_double(grib_accessor* a, } primary_len = *len / expand_by; - primary_bitmap = (double*)grib_context_malloc_clear(a->context, primary_len * sizeof(double)); + primary_bitmap = (double*)grib_context_malloc_clear(context_, primary_len * sizeof(double)); if (!primary_bitmap) return GRIB_OUT_OF_MEMORY; secondary_len = *len; - secondary_bitmap = (double*)grib_context_malloc_clear(a->context, secondary_len * sizeof(double)); + secondary_bitmap = (double*)grib_context_malloc_clear(context_, secondary_len * sizeof(double)); if (!secondary_bitmap) { - grib_context_free(a->context, primary_bitmap); + grib_context_free(context_, primary_bitmap); return GRIB_OUT_OF_MEMORY; } @@ -115,15 +110,15 @@ int grib_accessor_class_data_g1secondary_bitmap_t::pack_double(grib_accessor* a, /*printf("QQQQQQQ %ld %ld second=%ld\n",primary_len,on,m);*/ Assert(k == primary_len); - err = grib_set_double_array_internal(grib_handle_of_accessor(a), self->primary_bitmap, primary_bitmap, k); + err = grib_set_double_array_internal(grib_handle_of_accessor(this), primary_bitmap_, primary_bitmap, k); if (err == GRIB_SUCCESS) - err = grib_set_double_array_internal(grib_handle_of_accessor(a), self->secondary_bitmap, secondary_bitmap, m); + err = grib_set_double_array_internal(grib_handle_of_accessor(this), secondary_bitmap_, secondary_bitmap, m); - grib_context_free(a->context, primary_bitmap); - grib_context_free(a->context, secondary_bitmap); + grib_context_free(context_, primary_bitmap); + grib_context_free(context_, secondary_bitmap); if (err == GRIB_SUCCESS) - err = grib_set_long_internal(grib_handle_of_accessor(a), self->number_of_ones, on); + err = grib_set_long_internal(grib_handle_of_accessor(this), number_of_ones_, on); return err; } diff --git a/src/accessor/grib_accessor_class_data_g1secondary_bitmap.h b/src/accessor/grib_accessor_class_data_g1secondary_bitmap.h index 63ee792ae..c93897d7e 100644 --- a/src/accessor/grib_accessor_class_data_g1secondary_bitmap.h +++ b/src/accessor/grib_accessor_class_data_g1secondary_bitmap.h @@ -15,16 +15,13 @@ class grib_accessor_data_g1secondary_bitmap_t : public grib_accessor_data_secondary_bitmap_t { public: - /* Members defined in data_g1secondary_bitmap */ - const char* number_of_ones; -}; - -class grib_accessor_class_data_g1secondary_bitmap_t : public grib_accessor_class_data_secondary_bitmap_t -{ -public: - grib_accessor_class_data_g1secondary_bitmap_t(const char* name) : grib_accessor_class_data_secondary_bitmap_t(name) {} + grib_accessor_data_g1secondary_bitmap_t() : + grib_accessor_data_secondary_bitmap_t() { class_name_ = "data_g1secondary_bitmap"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g1secondary_bitmap_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* number_of_ones_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_g1shsimple_packing.cc b/src/accessor/grib_accessor_class_data_g1shsimple_packing.cc index 0cf00e74c..9243cad52 100644 --- a/src/accessor/grib_accessor_class_data_g1shsimple_packing.cc +++ b/src/accessor/grib_accessor_class_data_g1shsimple_packing.cc @@ -10,32 +10,29 @@ #include "grib_accessor_class_data_g1shsimple_packing.h" -grib_accessor_class_data_g1shsimple_packing_t _grib_accessor_class_data_g1shsimple_packing{ "data_g1shsimple_packing" }; -grib_accessor_class* grib_accessor_class_data_g1shsimple_packing = &_grib_accessor_class_data_g1shsimple_packing; +grib_accessor_data_g1shsimple_packing_t _grib_accessor_data_g1shsimple_packing{}; +grib_accessor* grib_accessor_data_g1shsimple_packing = &_grib_accessor_data_g1shsimple_packing; - -int grib_accessor_class_data_g1shsimple_packing_t::value_count(grib_accessor* a, long* count) +int grib_accessor_data_g1shsimple_packing_t::value_count(long* count) { - grib_accessor_data_g1shsimple_packing_t* self = (grib_accessor_data_g1shsimple_packing_t*)a; - size_t len = 0; - int err = 0; + size_t len = 0; + int err = 0; - err = grib_get_size(grib_handle_of_accessor(a), self->coded_values, &len); + err = grib_get_size(grib_handle_of_accessor(this), coded_values_, &len); len += 1; *count = len; return err; } -int grib_accessor_class_data_g1shsimple_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_g1shsimple_packing_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_g1shsimple_packing_t* self = (grib_accessor_data_g1shsimple_packing_t*)a; - int err = GRIB_SUCCESS; + int err = GRIB_SUCCESS; size_t coded_n_vals = 0; size_t n_vals = 0; - if ((err = grib_get_size(grib_handle_of_accessor(a), self->coded_values, &coded_n_vals)) != GRIB_SUCCESS) + if ((err = grib_get_size(grib_handle_of_accessor(this), coded_values_, &coded_n_vals)) != GRIB_SUCCESS) return err; n_vals = coded_n_vals + 1; @@ -45,17 +42,17 @@ int grib_accessor_class_data_g1shsimple_packing_t::unpack_double(grib_accessor* return GRIB_ARRAY_TOO_SMALL; } - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->real_part, val)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(grib_handle_of_accessor(this), real_part_, val)) != GRIB_SUCCESS) return err; val++; - if ((err = grib_get_double_array_internal(grib_handle_of_accessor(a), self->coded_values, val, &coded_n_vals)) != GRIB_SUCCESS) + if ((err = grib_get_double_array_internal(grib_handle_of_accessor(this), coded_values_, val, &coded_n_vals)) != GRIB_SUCCESS) return err; - grib_context_log(a->context, GRIB_LOG_DEBUG, + grib_context_log(context_, GRIB_LOG_DEBUG, "grib_accessor_data_g1shsimple_packing_t_bitmap : unpack_double : creating %s, %d values", - a->name, n_vals); + name_, n_vals); *len = n_vals; diff --git a/src/accessor/grib_accessor_class_data_g1shsimple_packing.h b/src/accessor/grib_accessor_class_data_g1shsimple_packing.h index c852c7213..54f3c99ad 100644 --- a/src/accessor/grib_accessor_class_data_g1shsimple_packing.h +++ b/src/accessor/grib_accessor_class_data_g1shsimple_packing.h @@ -15,14 +15,9 @@ class grib_accessor_data_g1shsimple_packing_t : public grib_accessor_data_shsimple_packing_t { public: - /* Members defined in data_g1shsimple_packing */ -}; - -class grib_accessor_class_data_g1shsimple_packing_t : public grib_accessor_class_data_shsimple_packing_t -{ -public: - grib_accessor_class_data_g1shsimple_packing_t(const char* name) : grib_accessor_class_data_shsimple_packing_t(name) {} + grib_accessor_data_g1shsimple_packing_t() : + grib_accessor_data_shsimple_packing_t() { class_name_ = "data_g1shsimple_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g1shsimple_packing_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; }; diff --git a/src/accessor/grib_accessor_class_data_g1simple_packing.cc b/src/accessor/grib_accessor_class_data_g1simple_packing.cc index 63b403da0..2f0b64134 100644 --- a/src/accessor/grib_accessor_class_data_g1simple_packing.cc +++ b/src/accessor/grib_accessor_class_data_g1simple_packing.cc @@ -11,39 +11,34 @@ #include "grib_accessor_class_data_g1simple_packing.h" #include "grib_scaling.h" -grib_accessor_class_data_g1simple_packing_t _grib_accessor_class_data_g1simple_packing{ "data_g1simple_packing" }; -grib_accessor_class* grib_accessor_class_data_g1simple_packing = &_grib_accessor_class_data_g1simple_packing; +grib_accessor_data_g1simple_packing_t _grib_accessor_data_g1simple_packing{}; +grib_accessor* grib_accessor_data_g1simple_packing = &_grib_accessor_data_g1simple_packing; - -void grib_accessor_class_data_g1simple_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g1simple_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_simple_packing_t::init(a, v, args); - grib_accessor_data_g1simple_packing_t* self = (grib_accessor_data_g1simple_packing_t*)a; + grib_accessor_data_simple_packing_t::init(v, args); - self->half_byte = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->packingType = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->ieee_packing = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->precision = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->edition = 1; - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + half_byte_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + packingType_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + ieee_packing_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + precision_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + edition_ = 1; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_g1simple_packing_t::value_count(grib_accessor* a, long* number_of_values) +int grib_accessor_data_g1simple_packing_t::value_count(long* number_of_values) { - grib_accessor_data_g1simple_packing_t* self = (grib_accessor_data_g1simple_packing_t*)a; *number_of_values = 0; /* Special case for when values are cleared */ - /*if(a->length == 0) + /*if(length_ == 0) return 0;*/ - return grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_values, number_of_values); + return grib_get_long_internal(grib_handle_of_accessor(this), number_of_values_, number_of_values); } -int grib_accessor_class_data_g1simple_packing_t::pack_double(grib_accessor* a, const double* cval, size_t* len) +int grib_accessor_data_g1simple_packing_t::pack_double(const double* cval, size_t* len) { - grib_accessor_data_g1simple_packing_t* self = (grib_accessor_data_g1simple_packing_t*)a; - size_t n_vals = *len; long half_byte = 0; int ret = 0; @@ -60,8 +55,8 @@ int grib_accessor_class_data_g1simple_packing_t::pack_double(grib_accessor* a, c double divisor = 1; int i; long off = 0; - grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + grib_context* c = context_; + grib_handle* h = grib_handle_of_accessor(this); char* ieee_packing_s = NULL; char* packingType_s = NULL; char* precision_s = NULL; @@ -73,14 +68,14 @@ int grib_accessor_class_data_g1simple_packing_t::pack_double(grib_accessor* a, c int err = 0; if (*len != 0) { - if (self->units_factor && - (grib_get_double_internal(grib_handle_of_accessor(a), self->units_factor, &units_factor) == GRIB_SUCCESS)) { - grib_set_double_internal(grib_handle_of_accessor(a), self->units_factor, 1.0); + if (units_factor_ && + (grib_get_double_internal(grib_handle_of_accessor(this), units_factor_, &units_factor) == GRIB_SUCCESS)) { + grib_set_double_internal(grib_handle_of_accessor(this), units_factor_, 1.0); } - if (self->units_bias && - (grib_get_double_internal(grib_handle_of_accessor(a), self->units_bias, &units_bias) == GRIB_SUCCESS)) { - grib_set_double_internal(grib_handle_of_accessor(a), self->units_bias, 0.0); + if (units_bias_ && + (grib_get_double_internal(grib_handle_of_accessor(this), units_bias_, &units_bias) == GRIB_SUCCESS)) { + grib_set_double_internal(grib_handle_of_accessor(this), units_bias_, 0.0); } if (units_factor != 1.0) { @@ -101,15 +96,15 @@ int grib_accessor_class_data_g1simple_packing_t::pack_double(grib_accessor* a, c } } - if (c->ieee_packing && self->ieee_packing) { + if (c->ieee_packing && ieee_packing_) { long precision = 0; /* Either 1(=32 bits) or 2(=64 bits) */ - size_t lenstr = strlen(self->ieee_packing); + size_t lenstr = strlen(ieee_packing_); if ((ret = codes_check_grib_ieee_packing_value(c->ieee_packing)) != GRIB_SUCCESS) return ret; - packingType_s = grib_context_strdup(c, self->packingType); - ieee_packing_s = grib_context_strdup(c, self->ieee_packing); - precision_s = grib_context_strdup(c, self->precision); + packingType_s = grib_context_strdup(c, packingType_); + ieee_packing_s = grib_context_strdup(c, ieee_packing_); + precision_s = grib_context_strdup(c, precision_); precision = c->ieee_packing == 32 ? 1 : 2; if ((ret = grib_set_string(h, packingType_s, ieee_packing_s, &lenstr)) != GRIB_SUCCESS) @@ -124,62 +119,62 @@ int grib_accessor_class_data_g1simple_packing_t::pack_double(grib_accessor* a, c } } - ret = grib_accessor_class_data_simple_packing_t::pack_double(a, val, len); + ret = grib_accessor_data_simple_packing_t::pack_double(val, len); switch (ret) { case GRIB_CONSTANT_FIELD: - ret = grib_get_long(grib_handle_of_accessor(a), "constantFieldHalfByte", &constantFieldHalfByte); + ret = grib_get_long(grib_handle_of_accessor(this), "constantFieldHalfByte", &constantFieldHalfByte); if (ret) constantFieldHalfByte = 0; - if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->half_byte, constantFieldHalfByte)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), half_byte_, constantFieldHalfByte)) != GRIB_SUCCESS) return ret; - ret = grib_buffer_replace(a, NULL, 0, 1, 1); + ret = grib_buffer_replace(this, NULL, 0, 1, 1); if (ret != GRIB_SUCCESS) return ret; return GRIB_SUCCESS; case GRIB_NO_VALUES: - ret = grib_get_long(grib_handle_of_accessor(a), "constantFieldHalfByte", &constantFieldHalfByte); + ret = grib_get_long(grib_handle_of_accessor(this), "constantFieldHalfByte", &constantFieldHalfByte); if (ret) constantFieldHalfByte = 0; /* TODO move to def file */ - grib_get_double(grib_handle_of_accessor(a), "missingValue", &missingValue); - if ((err = grib_set_double_internal(grib_handle_of_accessor(a), self->reference_value, missingValue)) != + grib_get_double(grib_handle_of_accessor(this), "missingValue", &missingValue); + if ((err = grib_set_double_internal(grib_handle_of_accessor(this), reference_value_, missingValue)) != GRIB_SUCCESS) return err; - if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), binary_scale_factor_, binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->half_byte, constantFieldHalfByte)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), half_byte_, constantFieldHalfByte)) != GRIB_SUCCESS) return ret; - ret = grib_buffer_replace(a, NULL, 0, 1, 1); + ret = grib_buffer_replace(this, NULL, 0, 1, 1); if (ret != GRIB_SUCCESS) return ret; return GRIB_SUCCESS; case GRIB_INVALID_BPV: - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to compute packing parameters. Invalid bits per value"); + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to compute packing parameters. Invalid bits per value"); return ret; case GRIB_SUCCESS: break; default: - grib_context_log(a->context, GRIB_LOG_ERROR, "GRIB1 simple packing: unable to set values (%s)", grib_get_error_message(ret)); + grib_context_log(context_, GRIB_LOG_ERROR, "GRIB1 simple packing: unable to set values (%s)", grib_get_error_message(ret)); return ret; } - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(grib_handle_of_accessor(this), reference_value_, &reference_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->bits_per_value, &bits_per_value)) != + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetdata, &offsetdata)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), offsetdata_, &offsetdata)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetsection, &offsetsection)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), offsetsection_, &offsetsection)) != GRIB_SUCCESS) return ret; decimal = codes_power(decimal_scale_factor, 10); @@ -189,32 +184,32 @@ int grib_accessor_class_data_g1simple_packing_t::pack_double(grib_accessor* a, c if ((buflen + (offsetdata - offsetsection)) % 2) { buflen++; /* - a->length++; - grib_handle_of_accessor(a)->buffer->ulength++; + length_ ++; + grib_handle_of_accessor(this)->buffer->ulength++; */ } half_byte = (buflen * 8) - ((*len) * bits_per_value); - grib_context_log(a->context, GRIB_LOG_DEBUG, + grib_context_log(context_, GRIB_LOG_DEBUG, "HALF byte: buflen=%d bits_per_value=%ld len=%d half_byte=%ld\n", buflen, bits_per_value, *len, half_byte); Assert(half_byte <= 0x0f); - if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->half_byte, half_byte)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), half_byte_, half_byte)) != GRIB_SUCCESS) return ret; - buf = (unsigned char*)grib_context_buffer_malloc_clear(a->context, buflen); + buf = (unsigned char*)grib_context_buffer_malloc_clear(context_, buflen); encoded = buf; grib_encode_double_array(n_vals, val, bits_per_value, reference_value, decimal, divisor, encoded, &off); - grib_context_log(a->context, GRIB_LOG_DEBUG, - "grib_accessor_data_g1simple_packing_t : pack_double : packing %s, %d values", a->name, n_vals); + grib_context_log(context_, GRIB_LOG_DEBUG, + "grib_accessor_data_g1simple_packing_t : pack_double : packing %s, %d values", name_, n_vals); - ret = grib_buffer_replace(a, buf, buflen, 1, 1); + ret = grib_buffer_replace(this, buf, buflen, 1, 1); if (ret != GRIB_SUCCESS) return ret; - grib_context_buffer_free(a->context, buf); + grib_context_buffer_free(context_, buf); return GRIB_SUCCESS; } diff --git a/src/accessor/grib_accessor_class_data_g1simple_packing.h b/src/accessor/grib_accessor_class_data_g1simple_packing.h index c82532361..2df6c49fe 100644 --- a/src/accessor/grib_accessor_class_data_g1simple_packing.h +++ b/src/accessor/grib_accessor_class_data_g1simple_packing.h @@ -15,19 +15,16 @@ class grib_accessor_data_g1simple_packing_t : public grib_accessor_data_simple_packing_t { public: - /* Members defined in data_g1simple_packing */ - const char* half_byte; - const char* packingType; - const char* ieee_packing; - const char* precision; -}; - -class grib_accessor_class_data_g1simple_packing_t : public grib_accessor_class_data_simple_packing_t -{ -public: - grib_accessor_class_data_g1simple_packing_t(const char* name) : grib_accessor_class_data_simple_packing_t(name) {} + grib_accessor_data_g1simple_packing_t() : + grib_accessor_data_simple_packing_t() { class_name_ = "data_g1simple_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g1simple_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +protected: + const char* half_byte_ = nullptr; + const char* packingType_ = nullptr; + const char* ieee_packing_ = nullptr; + const char* precision_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_g22order_packing.cc b/src/accessor/grib_accessor_class_data_g22order_packing.cc index c4949e89e..bd1c2abd1 100644 --- a/src/accessor/grib_accessor_class_data_g22order_packing.cc +++ b/src/accessor/grib_accessor_class_data_g22order_packing.cc @@ -10,39 +10,37 @@ #include "grib_accessor_class_data_g22order_packing.h" -grib_accessor_class_data_g22order_packing_t _grib_accessor_class_data_g22order_packing{ "data_g22order_packing" }; -grib_accessor_class* grib_accessor_class_data_g22order_packing = &_grib_accessor_class_data_g22order_packing; +grib_accessor_data_g22order_packing_t _grib_accessor_data_g22order_packing{}; +grib_accessor* grib_accessor_data_g22order_packing = &_grib_accessor_data_g22order_packing; - -void grib_accessor_class_data_g22order_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g22order_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_values_t::init(a, v, args); - grib_accessor_data_g22order_packing_t* self = reinterpret_cast(a); - grib_handle* gh = grib_handle_of_accessor(a); + grib_accessor_values_t::init(v, args); + grib_handle* gh = grib_handle_of_accessor(this); - self->numberOfValues = grib_arguments_get_name(gh, args, self->carg++); - self->bits_per_value = grib_arguments_get_name(gh, args, self->carg++); - self->reference_value = grib_arguments_get_name(gh, args, self->carg++); - self->binary_scale_factor = grib_arguments_get_name(gh, args, self->carg++); - self->decimal_scale_factor = grib_arguments_get_name(gh, args, self->carg++); - self->optimize_scale_factor = grib_arguments_get_name(gh, args, self->carg++); + numberOfValues_ = grib_arguments_get_name(gh, args, carg_++); + bits_per_value_ = grib_arguments_get_name(gh, args, carg_++); + reference_value_ = grib_arguments_get_name(gh, args, carg_++); + binary_scale_factor_ = grib_arguments_get_name(gh, args, carg_++); + decimal_scale_factor_ = grib_arguments_get_name(gh, args, carg_++); + optimize_scale_factor_ = grib_arguments_get_name(gh, args, carg_++); - self->typeOfOriginalFieldValues = grib_arguments_get_name(gh, args, self->carg++); - self->groupSplittingMethodUsed = grib_arguments_get_name(gh, args, self->carg++); - self->missingValueManagementUsed = grib_arguments_get_name(gh, args, self->carg++); - self->primaryMissingValueSubstitute = grib_arguments_get_name(gh, args, self->carg++); - self->secondaryMissingValueSubstitute = grib_arguments_get_name(gh, args, self->carg++); - self->numberOfGroupsOfDataValues = grib_arguments_get_name(gh, args, self->carg++); - self->referenceForGroupWidths = grib_arguments_get_name(gh, args, self->carg++); - self->numberOfBitsUsedForTheGroupWidths = grib_arguments_get_name(gh, args, self->carg++); - self->referenceForGroupLengths = grib_arguments_get_name(gh, args, self->carg++); - self->lengthIncrementForTheGroupLengths = grib_arguments_get_name(gh, args, self->carg++); - self->trueLengthOfLastGroup = grib_arguments_get_name(gh, args, self->carg++); - self->numberOfBitsUsedForTheScaledGroupLengths = grib_arguments_get_name(gh, args, self->carg++); + typeOfOriginalFieldValues_ = grib_arguments_get_name(gh, args, carg_++); + groupSplittingMethodUsed_ = grib_arguments_get_name(gh, args, carg_++); + missingValueManagementUsed_ = grib_arguments_get_name(gh, args, carg_++); + primaryMissingValueSubstitute_ = grib_arguments_get_name(gh, args, carg_++); + secondaryMissingValueSubstitute_ = grib_arguments_get_name(gh, args, carg_++); + numberOfGroupsOfDataValues_ = grib_arguments_get_name(gh, args, carg_++); + referenceForGroupWidths_ = grib_arguments_get_name(gh, args, carg_++); + numberOfBitsUsedForTheGroupWidths_ = grib_arguments_get_name(gh, args, carg_++); + referenceForGroupLengths_ = grib_arguments_get_name(gh, args, carg_++); + lengthIncrementForTheGroupLengths_ = grib_arguments_get_name(gh, args, carg_++); + trueLengthOfLastGroup_ = grib_arguments_get_name(gh, args, carg_++); + numberOfBitsUsedForTheScaledGroupLengths_ = grib_arguments_get_name(gh, args, carg_++); - self->orderOfSpatialDifferencing = grib_arguments_get_name(gh, args, self->carg++); - self->numberOfOctetsExtraDescriptors = grib_arguments_get_name(gh, args, self->carg++); - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + orderOfSpatialDifferencing_ = grib_arguments_get_name(gh, args, carg_++); + numberOfOctetsExtraDescriptors_ = grib_arguments_get_name(gh, args, carg_++); + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } #define ONES (~(int)0) @@ -87,7 +85,7 @@ void add_many_bitstream(bitstream_context* ctx, grib_accessor* a, int* t, int n, const int max_numbits = 25; if (n_bits > max_numbits) { - grib_context_log(a->context, GRIB_LOG_FATAL, "grid_complex packing: n_bits=%d exceeds the maximum=%d", n_bits, max_numbits); + grib_context_log(a->context_, GRIB_LOG_FATAL, "grid_complex packing: n_bits=%d exceeds the maximum=%d", n_bits, max_numbits); } jmask = (1 << n_bits) - 1; @@ -114,7 +112,7 @@ void add_bitstream(bitstream_context* ctx, grib_accessor* a, int t, int n_bits) n_bits = 16; } if (n_bits > max_numbits) { - grib_context_log(a->context, GRIB_LOG_FATAL, "grid_complex packing: n_bits=%d exceeds the maximum=%d", n_bits, max_numbits); + grib_context_log(a->context_, GRIB_LOG_FATAL, "grid_complex packing: n_bits=%d exceeds the maximum=%d", n_bits, max_numbits); } jmask = (1 << n_bits) - 1; ctx->rbits += n_bits; @@ -256,9 +254,9 @@ static int min_max_array(double* data, unsigned int n, double* min, double* max) // } // if (i == nn) { /* all defined values, no need for bms */ -// bms = reinterpret_cast(grib_context_malloc(a->context, 6)); +// bms = reinterpret_cast(grib_context_malloc(context_ , 6)); // if (bms == NULL) -// grib_context_log(a->context, GRIB_LOG_ERROR, "mk_bms: memory allocation problem", ""); +// grib_context_log(context_ , GRIB_LOG_ERROR, "mk_bms: memory allocation problem", ""); // uint_char(6, bms); // length of section 6 // bms[4] = 6; // section 6 // bms[5] = 255; // no bitmap @@ -266,9 +264,9 @@ static int min_max_array(double* data, unsigned int n, double* min, double* max) // } // bms_size = 6 + (nn + 7) / 8; -// bms = reinterpret_cast(grib_context_malloc(a->context, bms_size)); +// bms = reinterpret_cast(grib_context_malloc(context_ , bms_size)); // if (bms == NULL) -// grib_context_log(a->context, GRIB_LOG_ERROR, "mk_bms: memory allocation problem", ""); +// grib_context_log(context_ , GRIB_LOG_ERROR, "mk_bms: memory allocation problem", ""); // uint_char(bms_size, bms); // length of section 6 // bms[4] = 6; // section 6 @@ -774,11 +772,9 @@ static void merge_j(struct section* h, int ref_bits, int width_bits, int has_und } } -int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_g22order_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_g22order_packing_t* self = reinterpret_cast(a); - grib_handle* gh = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; + grib_handle* gh = grib_handle_of_accessor(this); int err = 0; @@ -810,33 +806,33 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c if (*len == 0) return GRIB_NO_VALUES; - if ((err = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->optimize_scale_factor, &optimize_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, optimize_scale_factor_, &optimize_scale_factor)) != GRIB_SUCCESS) return err; int use_scale = !optimize_scale_factor; - if ((err = grib_get_long_internal(gh, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->typeOfOriginalFieldValues, &typeOfOriginalFieldValues)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, typeOfOriginalFieldValues_, &typeOfOriginalFieldValues)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->missingValueManagementUsed, &missingValueManagementUsed)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, missingValueManagementUsed_, &missingValueManagementUsed)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->primaryMissingValueSubstitute, &primaryMissingValueSubstitute)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, primaryMissingValueSubstitute_, &primaryMissingValueSubstitute)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->secondaryMissingValueSubstitute, &secondaryMissingValueSubstitute)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, secondaryMissingValueSubstitute_, &secondaryMissingValueSubstitute)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->numberOfBitsUsedForTheGroupWidths, &numberOfBitsUsedForTheGroupWidths)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, numberOfBitsUsedForTheGroupWidths_, &numberOfBitsUsedForTheGroupWidths)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->numberOfBitsUsedForTheScaledGroupLengths, &numberOfBitsUsedForTheScaledGroupLengths)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, numberOfBitsUsedForTheScaledGroupLengths_, &numberOfBitsUsedForTheScaledGroupLengths)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->orderOfSpatialDifferencing, &orderOfSpatialDifferencing)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, orderOfSpatialDifferencing_, &orderOfSpatialDifferencing)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->numberOfOctetsExtraDescriptors, &numberOfOctetsExtraDescriptors)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, numberOfOctetsExtraDescriptors_, &numberOfOctetsExtraDescriptors)) != GRIB_SUCCESS) return err; if ((err = grib_get_long_internal(gh, "bitmapPresent", &bitmap_present)) != GRIB_SUCCESS) return err; @@ -863,37 +859,37 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c size_t packing_type_len = strlen(packing_type); grib_set_string_internal(gh, "packingType", packing_type, &packing_type_len); - if ((err = grib_set_double_internal(gh, self->reference_value, grib_ieee_to_long(0.0))) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(gh, reference_value_, grib_ieee_to_long(0.0))) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->binary_scale_factor, 0)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, binary_scale_factor_, 0)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->decimal_scale_factor, 0)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, decimal_scale_factor_, 0)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->bits_per_value, 8)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, bits_per_value_, 8)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->typeOfOriginalFieldValues, 0)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, typeOfOriginalFieldValues_, 0)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->groupSplittingMethodUsed, 1)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, groupSplittingMethodUsed_, 1)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->missingValueManagementUsed, 1)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, missingValueManagementUsed_, 1)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->primaryMissingValueSubstitute, grib_ieee_to_long(static_cast(9.999e20)))) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, primaryMissingValueSubstitute_, grib_ieee_to_long(static_cast(9.999e20)))) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->secondaryMissingValueSubstitute, 0xFFFFFFFF)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, secondaryMissingValueSubstitute_, 0xFFFFFFFF)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->numberOfGroupsOfDataValues, 1)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, numberOfGroupsOfDataValues_, 1)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->referenceForGroupWidths, grib_ieee_to_long(0.0))) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, referenceForGroupWidths_, grib_ieee_to_long(0.0))) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->numberOfBitsUsedForTheGroupWidths, 8)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, numberOfBitsUsedForTheGroupWidths_, 8)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->referenceForGroupLengths, *len)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, referenceForGroupLengths_, *len)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->lengthIncrementForTheGroupLengths, 1)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, lengthIncrementForTheGroupLengths_, 1)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->trueLengthOfLastGroup, *len)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, trueLengthOfLastGroup_, *len)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->numberOfBitsUsedForTheScaledGroupLengths, 8)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, numberOfBitsUsedForTheScaledGroupLengths_, 8)) != GRIB_SUCCESS) return err; // Section 6 @@ -902,14 +898,14 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c // Section 7 constexpr size_t sec7_size = 3; unsigned char empty_sec7[sec7_size] = { 255, 0, 0 }; // group reference, group width, group length - grib_buffer_replace(a, empty_sec7, sec7_size, 1, 1); + grib_buffer_replace(this, empty_sec7, sec7_size, 1, 1); return GRIB_SUCCESS; } size_t ndata = *len; - double* data = reinterpret_cast(grib_context_malloc_clear(a->context, ndata * sizeof(double))); + double* data = reinterpret_cast(grib_context_malloc_clear(context_, ndata * sizeof(double))); if (data == NULL) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: unable to allocate %zu bytes", cclass_name, ndata * sizeof(double)); + grib_context_log(context_, GRIB_LOG_ERROR, "%s packing: unable to allocate %zu bytes", class_name_, ndata * sizeof(double)); return GRIB_OUT_OF_MEMORY; } memcpy(data, val, sizeof(*data) * ndata); @@ -927,13 +923,13 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c nndata = use_bitmap ? ndef : ndata; has_undef = use_bitmap ? 0 : ndata != ndef; - v = reinterpret_cast(grib_context_malloc(a->context, nndata * sizeof(int))); + v = reinterpret_cast(grib_context_malloc(context_, nndata * sizeof(int))); if (v == NULL) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: unable to allocate %zu bytes", cclass_name, nndata * sizeof(int)); + grib_context_log(context_, GRIB_LOG_ERROR, "%s packing: unable to allocate %zu bytes", class_name_, nndata * sizeof(int)); return GRIB_OUT_OF_MEMORY; } if (min_max_array(data, ndata, &mn, &mx) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: failed to get min max of data", cclass_name); + grib_context_log(context_, GRIB_LOG_ERROR, "%s packing: failed to get min max of data", class_name_); return GRIB_ENCODING_ERROR; } min_val = mn; @@ -1090,7 +1086,7 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c } #ifdef DEBUG - grib_context_log(a->context, GRIB_LOG_DEBUG, "COMPLEX: 2: vmx %d vmn %d nbits %d", vmx, vmn, + grib_context_log(context_, GRIB_LOG_DEBUG, "COMPLEX: 2: vmx %d vmn %d nbits %d", vmx, vmn, find_nbits(vmx - vmn + has_undef)); #endif @@ -1110,9 +1106,9 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c } } - list = reinterpret_cast(grib_context_malloc_clear(a->context, nstruct * sizeof(section))); + list = reinterpret_cast(grib_context_malloc_clear(context_, nstruct * sizeof(section))); if (list == NULL) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: memory allocation of list failed", cclass_name); + grib_context_log(context_, GRIB_LOG_ERROR, "%s packing: memory allocation of list failed", class_name_); return GRIB_OUT_OF_MEMORY; } @@ -1142,7 +1138,7 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c start.tail = &list[0]; if (nstruct != ii + 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: nstruct=%zu wanted %zu", cclass_name, nstruct, ii + 1); + grib_context_log(context_, GRIB_LOG_ERROR, "%s packing: nstruct=%zu wanted %zu", class_name_, nstruct, ii + 1); return GRIB_ENCODING_ERROR; } for (i = 1; i < nstruct; i++) { @@ -1160,7 +1156,7 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c LEN_SEC_MAX); #ifdef DEBUG j = size_all(start.tail, vbits, LEN_BITS + est_group_width, has_undef); - grib_context_log(a->context, GRIB_LOG_DEBUG, "COMPLEX: complex start %d %d bytes", k, j); + grib_context_log(context_, GRIB_LOG_DEBUG, "COMPLEX: complex start %d %d bytes", k, j); #endif k = 2 * k + 1 + has_undef; } @@ -1168,16 +1164,16 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c // try making segment sizes larger // 12/2015 need to segment size less 25 bits, bitstream software limitation - list_backup = reinterpret_cast(grib_context_malloc(a->context, nstruct * sizeof(section))); + list_backup = reinterpret_cast(grib_context_malloc(context_, nstruct * sizeof(section))); if (list_backup == NULL) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: memory allocation of list_backup failed", cclass_name); + grib_context_log(context_, GRIB_LOG_ERROR, "%s packing: memory allocation of list_backup failed", class_name_); return GRIB_OUT_OF_MEMORY; } j = size_all(start.tail, vbits, LEN_BITS + est_group_width, has_undef); j0 = j + 1; #ifdef DEBUG - grib_context_log(a->context, GRIB_LOG_DEBUG, "COMPLEX: complex start inc segments size0 %d segsize %d", j, LEN_SEC_MAX); + grib_context_log(context_, GRIB_LOG_DEBUG, "COMPLEX: complex start inc segments size0 %d segsize %d", j, LEN_SEC_MAX); #endif while (j < j0 && LEN_BITS < 25) { j0 = j; @@ -1188,7 +1184,7 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c LEN_SEC_MAX); j = size_all(start.tail, vbits, LEN_BITS + est_group_width, has_undef); #ifdef DEBUG - grib_context_log(a->context, GRIB_LOG_DEBUG, + grib_context_log(context_, GRIB_LOG_DEBUG, "COMPLEX: complex inc segments size size0 %d size1 %d segsize %d " "LEN_BITS=%d", j0, j, LEN_SEC_MAX, LEN_BITS); @@ -1199,19 +1195,19 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c LEN_SEC_MAX = (LEN_SEC_MAX - 1) / 2; } } - grib_context_free(a->context, list_backup); + grib_context_free(context_, list_backup); exchange(start.tail, v, has_undef, LEN_SEC_MAX); #ifdef DEBUG j = size_all(start.tail, vbits, LEN_BITS + est_group_width, has_undef); - grib_context_log(a->context, GRIB_LOG_DEBUG, "COMPLEX: exchange %d bytes", j); + grib_context_log(context_, GRIB_LOG_DEBUG, "COMPLEX: exchange %d bytes", j); #endif merge_j(start.tail, vbits, LEN_BITS + est_group_width, has_undef, vmx, LEN_SEC_MAX); #ifdef DEBUG j = size_all(start.tail, vbits, LEN_BITS + est_group_width, has_undef); - grib_context_log(a->context, GRIB_LOG_DEBUG, "COMPLEX: complex start %d %d bytes", vmx, j); + grib_context_log(context_, GRIB_LOG_DEBUG, "COMPLEX: complex start %d %d bytes", vmx, j); #endif // finished making segments @@ -1243,14 +1239,14 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c s = s->tail; } - lens = reinterpret_cast(grib_context_malloc(a->context, ngroups * sizeof(int))); - widths = reinterpret_cast(grib_context_malloc(a->context, ngroups * sizeof(int))); - refs = reinterpret_cast(grib_context_malloc(a->context, ngroups * sizeof(int))); - itmp = reinterpret_cast(grib_context_malloc(a->context, ngroups * sizeof(int))); - itmp2 = reinterpret_cast(grib_context_malloc(a->context, ngroups * sizeof(int))); + lens = reinterpret_cast(grib_context_malloc(context_, ngroups * sizeof(int))); + widths = reinterpret_cast(grib_context_malloc(context_, ngroups * sizeof(int))); + refs = reinterpret_cast(grib_context_malloc(context_, ngroups * sizeof(int))); + itmp = reinterpret_cast(grib_context_malloc(context_, ngroups * sizeof(int))); + itmp2 = reinterpret_cast(grib_context_malloc(context_, ngroups * sizeof(int))); if (lens == NULL || widths == NULL || refs == NULL || itmp == NULL || itmp2 == NULL) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: memory alloc of lens/widths/refs/itmp/itmp2 failed", cclass_name); + grib_context_log(context_, GRIB_LOG_ERROR, "%s packing: memory alloc of lens/widths/refs/itmp/itmp2 failed", class_name_); return GRIB_OUT_OF_MEMORY; } @@ -1310,38 +1306,38 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c bits_per_value = find_nbits(grefmx + has_undef); numberOfBitsUsedForTheGroupWidths = find_nbits(gwidmx - gwidmn + has_undef); - if ((err = grib_set_long_internal(gh, self->bits_per_value, bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, bits_per_value_, bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_set_double_internal(gh, self->reference_value, static_cast(ref))) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(gh, reference_value_, static_cast(ref))) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->binary_scale_factor, binary_scale)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, binary_scale_factor_, binary_scale)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->decimal_scale_factor, -dec_scale)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, decimal_scale_factor_, -dec_scale)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->typeOfOriginalFieldValues, 0)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, typeOfOriginalFieldValues_, 0)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->groupSplittingMethodUsed, 1)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, groupSplittingMethodUsed_, 1)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->missingValueManagementUsed, has_undef)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, missingValueManagementUsed_, has_undef)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->primaryMissingValueSubstitute, grib_ieee_to_long(static_cast(9.999e20)))) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, primaryMissingValueSubstitute_, grib_ieee_to_long(static_cast(9.999e20)))) != GRIB_SUCCESS) return err; - // if ((err = grib_set_long_internal(gh, self->secondaryMissingValueSubstitute, 0xFFFFFFFF)) != GRIB_SUCCESS) return err; + // if ((err = grib_set_long_internal(gh, secondaryMissingValueSubstitute_ , 0xFFFFFFFF)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->numberOfGroupsOfDataValues, ngroups)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, numberOfGroupsOfDataValues_, ngroups)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->referenceForGroupWidths, gwidmn)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, referenceForGroupWidths_, gwidmn)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->numberOfBitsUsedForTheGroupWidths, find_nbits(gwidmx - gwidmn + has_undef))) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, numberOfBitsUsedForTheGroupWidths_, find_nbits(gwidmx - gwidmn + has_undef))) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->referenceForGroupLengths, glenmn)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, referenceForGroupLengths_, glenmn)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->lengthIncrementForTheGroupLengths, 1)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, lengthIncrementForTheGroupLengths_, 1)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->trueLengthOfLastGroup, len_last)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, trueLengthOfLastGroup_, len_last)) != GRIB_SUCCESS) return err; numberOfBitsUsedForTheScaledGroupLengths = find_nbits(glenmx - glenmn); - if ((err = grib_set_long_internal(gh, self->numberOfBitsUsedForTheScaledGroupLengths, numberOfBitsUsedForTheScaledGroupLengths)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, numberOfBitsUsedForTheScaledGroupLengths_, numberOfBitsUsedForTheScaledGroupLengths)) != GRIB_SUCCESS) return err; size_sec7 = 5; @@ -1353,9 +1349,9 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c size_sec7 += 3 * numberOfOctetsExtraDescriptors; } if (orderOfSpatialDifferencing > 0) { - if ((err = grib_set_long_internal(gh, self->orderOfSpatialDifferencing, orderOfSpatialDifferencing)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, orderOfSpatialDifferencing_, orderOfSpatialDifferencing)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->numberOfOctetsExtraDescriptors, numberOfOctetsExtraDescriptors)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, numberOfOctetsExtraDescriptors_, numberOfOctetsExtraDescriptors)) != GRIB_SUCCESS) return err; } @@ -1383,9 +1379,9 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c } size_sec7 += (k >> 3) + ((k & 7) ? 1 : 0); - unsigned char* sec7 = reinterpret_cast(grib_context_malloc(a->context, size_sec7)); + unsigned char* sec7 = reinterpret_cast(grib_context_malloc(context_, size_sec7)); if (sec7 == NULL) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Unable to allocate %d bytes", cclass_name, size_sec7); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Unable to allocate %d bytes", class_name_, size_sec7); return GRIB_OUT_OF_MEMORY; } @@ -1393,32 +1389,32 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c bitstream_context ctx; init_bitstream(&ctx, sec7); - add_bitstream(&ctx, a, size_sec7 >> 16, 16); - add_bitstream(&ctx, a, size_sec7, 16); - add_bitstream(&ctx, a, 7, 8); + add_bitstream(&ctx, this, size_sec7 >> 16, 16); + add_bitstream(&ctx, this, size_sec7, 16); + add_bitstream(&ctx, this, 7, 8); // write extra octets if (orderOfSpatialDifferencing == 1 || orderOfSpatialDifferencing == 2) { - add_bitstream(&ctx, a, extra_0, 8 * numberOfOctetsExtraDescriptors); - if (orderOfSpatialDifferencing == 2) add_bitstream(&ctx, a, extra_1, 8 * numberOfOctetsExtraDescriptors); + add_bitstream(&ctx, this, extra_0, 8 * numberOfOctetsExtraDescriptors); + if (orderOfSpatialDifferencing == 2) add_bitstream(&ctx, this, extra_1, 8 * numberOfOctetsExtraDescriptors); k = vmn; if (k < 0) { k = -vmn | (1 << (8 * numberOfOctetsExtraDescriptors - 1)); } - add_bitstream(&ctx, a, k, 8 * numberOfOctetsExtraDescriptors); + add_bitstream(&ctx, this, k, 8 * numberOfOctetsExtraDescriptors); finish_bitstream(&ctx); } // write the group reference values - add_many_bitstream(&ctx, a, refs, ngroups, bits_per_value); + add_many_bitstream(&ctx, this, refs, ngroups, bits_per_value); finish_bitstream(&ctx); // write the group widths - add_many_bitstream(&ctx, a, itmp, ngroups, numberOfBitsUsedForTheGroupWidths); + add_many_bitstream(&ctx, this, itmp, ngroups, numberOfBitsUsedForTheGroupWidths); finish_bitstream(&ctx); // write the group lengths - add_many_bitstream(&ctx, a, itmp2, ngroups, numberOfBitsUsedForTheScaledGroupLengths); + add_many_bitstream(&ctx, this, itmp2, ngroups, numberOfBitsUsedForTheScaledGroupLengths); finish_bitstream(&ctx); s = start.tail; @@ -1438,38 +1434,36 @@ int grib_accessor_class_data_g22order_packing_t::pack_double(grib_accessor* a, c } for (i = 0; i < ngroups; i++) { if (widths[i]) { - add_many_bitstream(&ctx, a, v + itmp[i], lens[i], widths[i]); + add_many_bitstream(&ctx, this, v + itmp[i], lens[i], widths[i]); } } finish_bitstream(&ctx); - grib_buffer_replace(a, sec7 + 5, size_sec7 - 5, 1, 1); + grib_buffer_replace(this, sec7 + 5, size_sec7 - 5, 1, 1); - grib_context_free(a->context, sec7); - grib_context_free(a->context, list); - grib_context_free(a->context, v); - grib_context_free(a->context, lens); - grib_context_free(a->context, widths); - grib_context_free(a->context, refs); - grib_context_free(a->context, itmp); - grib_context_free(a->context, itmp2); - grib_context_free(a->context, data); + grib_context_free(context_, sec7); + grib_context_free(context_, list); + grib_context_free(context_, v); + grib_context_free(context_, lens); + grib_context_free(context_, widths); + grib_context_free(context_, refs); + grib_context_free(context_, itmp); + grib_context_free(context_, itmp2); + grib_context_free(context_, data); // ECC-259: Set correct number of values - if ((err = grib_set_long_internal(gh, self->numberOfValues, *len)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, numberOfValues_, *len)) != GRIB_SUCCESS) return err; return GRIB_SUCCESS; } template -static int unpack(grib_accessor* a, T* val, const size_t* len) +int grib_accessor_data_g22order_packing_t::unpack(T* val, size_t* len) { static_assert(std::is_floating_point::value, "Requires floating points numbers"); - grib_accessor_data_g22order_packing_t* self = reinterpret_cast(a); - const char* cclass_name = a->cclass->name; - grib_handle* gh = grib_handle_of_accessor(a); + grib_handle* gh = grib_handle_of_accessor(this); size_t i = 0; size_t j = 0; @@ -1514,63 +1508,71 @@ static int unpack(grib_accessor* a, T* val, const size_t* len) long numberOfOctetsExtraDescriptors = 0; double missingValue = 0; - err = a->value_count(&n_vals); + err = value_count(&n_vals); if (err) return err; if (*len < static_cast(n_vals)) return GRIB_ARRAY_TOO_SMALL; - if ((err = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(gh, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(gh, reference_value_, &reference_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->typeOfOriginalFieldValues, &typeOfOriginalFieldValues)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, typeOfOriginalFieldValues_, &typeOfOriginalFieldValues)) != GRIB_SUCCESS) return err; // Don't call grib_get_long_internal to suppress error message being output - if ((err = grib_get_long(gh, self->groupSplittingMethodUsed, &groupSplittingMethodUsed)) != GRIB_SUCCESS) + if ((err = grib_get_long(gh, groupSplittingMethodUsed_, &groupSplittingMethodUsed)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->missingValueManagementUsed, &missingValueManagementUsed)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, missingValueManagementUsed_, &missingValueManagementUsed)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->primaryMissingValueSubstitute, &primaryMissingValueSubstitute)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, primaryMissingValueSubstitute_, &primaryMissingValueSubstitute)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->secondaryMissingValueSubstitute, &secondaryMissingValueSubstitute)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, secondaryMissingValueSubstitute_, &secondaryMissingValueSubstitute)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->numberOfGroupsOfDataValues, &numberOfGroupsOfDataValues)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, numberOfGroupsOfDataValues_, &numberOfGroupsOfDataValues)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->referenceForGroupWidths, &referenceForGroupWidths)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, referenceForGroupWidths_, &referenceForGroupWidths)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->numberOfBitsUsedForTheGroupWidths, &numberOfBitsUsedForTheGroupWidths)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, numberOfBitsUsedForTheGroupWidths_, &numberOfBitsUsedForTheGroupWidths)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->referenceForGroupLengths, &referenceForGroupLengths)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, referenceForGroupLengths_, &referenceForGroupLengths)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->lengthIncrementForTheGroupLengths, &lengthIncrementForTheGroupLengths)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, lengthIncrementForTheGroupLengths_, &lengthIncrementForTheGroupLengths)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->trueLengthOfLastGroup, &trueLengthOfLastGroup)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, trueLengthOfLastGroup_, &trueLengthOfLastGroup)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->numberOfBitsUsedForTheScaledGroupLengths, &numberOfBitsUsedForTheScaledGroupLengths)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, numberOfBitsUsedForTheScaledGroupLengths_, &numberOfBitsUsedForTheScaledGroupLengths)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->orderOfSpatialDifferencing, &orderOfSpatialDifferencing)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, orderOfSpatialDifferencing_, &orderOfSpatialDifferencing)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->numberOfOctetsExtraDescriptors, &numberOfOctetsExtraDescriptors)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, numberOfOctetsExtraDescriptors_, &numberOfOctetsExtraDescriptors)) != GRIB_SUCCESS) return err; if ((err = grib_get_double_internal(gh, "missingValue", &missingValue)) != GRIB_SUCCESS) return err; - self->dirty = 0; + dirty_ = 0; - sec_val = (long*)grib_context_malloc(a->context, (n_vals) * sizeof(long)); + if (bits_per_value == 0) { + for (i = 0; i < n_vals; i++) { + val[i] = reference_value; + } + *len = n_vals; + return GRIB_SUCCESS; + } + + sec_val = (long*)grib_context_malloc(context_, (n_vals) * sizeof(long)); if (!sec_val) return GRIB_OUT_OF_MEMORY; memset(sec_val, 0, (n_vals) * sizeof(long)); // See SUP-718 - buf_ref = buf + a->offset; + buf_ref = buf + offset_; ref_p = (numberOfGroupsOfDataValues * bits_per_value); @@ -1683,8 +1685,8 @@ static int unpack(grib_accessor* a, T* val, const size_t* len) // For Complex packing, order == 0 // For Complex packing and spatial differencing, order == 1 or 2 (code table 5.6) if (orderOfSpatialDifferencing != 1 && orderOfSpatialDifferencing != 2) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s unpacking: Unsupported order of spatial differencing %ld", cclass_name, orderOfSpatialDifferencing); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s unpacking: Unsupported order of spatial differencing %ld", class_name_, orderOfSpatialDifferencing); return GRIB_INTERNAL_ERROR; } @@ -1694,8 +1696,8 @@ static int unpack(grib_accessor* a, T* val, const size_t* len) bias = grib_decode_signed_longb(buf_ref, &ref_p, numberOfOctetsExtraDescriptors * 8); - post_process(a->context, sec_val, n_vals, orderOfSpatialDifferencing, bias, extras); - // de_spatial_difference (a->context, sec_val, n_vals, orderOfSpatialDifferencing, bias); + post_process(context_, sec_val, n_vals, orderOfSpatialDifferencing, bias, extras); + // de_spatial_difference (context_ , sec_val, n_vals, orderOfSpatialDifferencing, bias); } binary_s = (T)codes_power(binary_scale_factor, 2); @@ -1710,49 +1712,49 @@ static int unpack(grib_accessor* a, T* val, const size_t* len) } } - grib_context_free(a->context, sec_val); + grib_context_free(context_, sec_val); return err; } -int grib_accessor_class_data_g22order_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_g22order_packing_t::unpack_double(double* val, size_t* len) { - return unpack(a, val, len); + return unpack(val, len); } -int grib_accessor_class_data_g22order_packing_t::unpack_float(grib_accessor* a, float* val, size_t* len) +int grib_accessor_data_g22order_packing_t::unpack_float(float* val, size_t* len) { - return unpack(a, val, len); + return unpack(val, len); } -int grib_accessor_class_data_g22order_packing_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_g22order_packing_t::unpack_double_element(size_t idx, double* val) { size_t size = 0; double* values = NULL; - int err = grib_get_size(grib_handle_of_accessor(a), "codedValues", &size); + int err = grib_get_size(grib_handle_of_accessor(this), "codedValues", &size); if (err) return err; if (idx > size) return GRIB_INVALID_ARGUMENT; - values = reinterpret_cast(grib_context_malloc_clear(a->context, size * sizeof(double))); - err = grib_get_double_array(grib_handle_of_accessor(a), "codedValues", values, &size); + values = reinterpret_cast(grib_context_malloc_clear(context_, size * sizeof(double))); + err = grib_get_double_array(grib_handle_of_accessor(this), "codedValues", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } *val = values[idx]; - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } -int grib_accessor_class_data_g22order_packing_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_g22order_packing_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { size_t size = 0, i = 0; double* values; int err = 0; // GRIB-564: The indexes in index_array relate to codedValues NOT values! - err = grib_get_size(grib_handle_of_accessor(a), "codedValues", &size); + err = grib_get_size(grib_handle_of_accessor(this), "codedValues", &size); if (err) return err; @@ -1760,22 +1762,21 @@ int grib_accessor_class_data_g22order_packing_t::unpack_double_element_set(grib_ if (index_array[i] > size) return GRIB_INVALID_ARGUMENT; } - values = reinterpret_cast(grib_context_malloc_clear(a->context, size * sizeof(double))); - err = grib_get_double_array(grib_handle_of_accessor(a), "codedValues", values, &size); + values = reinterpret_cast(grib_context_malloc_clear(context_, size * sizeof(double))); + err = grib_get_double_array(grib_handle_of_accessor(this), "codedValues", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } for (i = 0; i < len; i++) { val_array[i] = values[index_array[i]]; } - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } -int grib_accessor_class_data_g22order_packing_t::value_count(grib_accessor* a, long* count) +int grib_accessor_data_g22order_packing_t::value_count(long* count) { - grib_accessor_data_g22order_packing_t* self = reinterpret_cast(a); *count = 0; - return grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfValues, count); + return grib_get_long_internal(grib_handle_of_accessor(this), numberOfValues_, count); } diff --git a/src/accessor/grib_accessor_class_data_g22order_packing.h b/src/accessor/grib_accessor_class_data_g22order_packing.h index 329823633..a21c0206e 100644 --- a/src/accessor/grib_accessor_class_data_g22order_packing.h +++ b/src/accessor/grib_accessor_class_data_g22order_packing.h @@ -16,39 +16,38 @@ class grib_accessor_data_g22order_packing_t : public grib_accessor_values_t { public: - /* Members defined in data_g22order_packing */ - const char* numberOfValues; - const char* bits_per_value; - const char* reference_value; - const char* binary_scale_factor; - const char* decimal_scale_factor; - const char* optimize_scale_factor; - const char* typeOfOriginalFieldValues; - const char* groupSplittingMethodUsed; - const char* missingValueManagementUsed; - const char* primaryMissingValueSubstitute; - const char* secondaryMissingValueSubstitute; - const char* numberOfGroupsOfDataValues; - const char* referenceForGroupWidths; - const char* numberOfBitsUsedForTheGroupWidths; - const char* referenceForGroupLengths; - const char* lengthIncrementForTheGroupLengths; - const char* trueLengthOfLastGroup; - const char* numberOfBitsUsedForTheScaledGroupLengths; - const char* orderOfSpatialDifferencing; - const char* numberOfOctetsExtraDescriptors; -}; - -class grib_accessor_class_data_g22order_packing_t : public grib_accessor_class_values_t -{ -public: - grib_accessor_class_data_g22order_packing_t(const char* name) : grib_accessor_class_values_t(name) {} + grib_accessor_data_g22order_packing_t() : + grib_accessor_values_t() { class_name_ = "data_g22order_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g22order_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; + +private: + const char* numberOfValues_ = nullptr; + const char* bits_per_value_ = nullptr; + const char* reference_value_ = nullptr; + const char* binary_scale_factor_ = nullptr; + const char* decimal_scale_factor_ = nullptr; + const char* optimize_scale_factor_ = nullptr; + const char* typeOfOriginalFieldValues_ = nullptr; + const char* groupSplittingMethodUsed_ = nullptr; + const char* missingValueManagementUsed_ = nullptr; + const char* primaryMissingValueSubstitute_ = nullptr; + const char* secondaryMissingValueSubstitute_ = nullptr; + const char* numberOfGroupsOfDataValues_ = nullptr; + const char* referenceForGroupWidths_ = nullptr; + const char* numberOfBitsUsedForTheGroupWidths_ = nullptr; + const char* referenceForGroupLengths_ = nullptr; + const char* lengthIncrementForTheGroupLengths_ = nullptr; + const char* trueLengthOfLastGroup_ = nullptr; + const char* numberOfBitsUsedForTheScaledGroupLengths_ = nullptr; + const char* orderOfSpatialDifferencing_ = nullptr; + const char* numberOfOctetsExtraDescriptors_ = nullptr; + + template int unpack(T* val, size_t* len); }; diff --git a/src/accessor/grib_accessor_class_data_g2bifourier_packing.cc b/src/accessor/grib_accessor_class_data_g2bifourier_packing.cc index c159ceeea..0126e83e8 100644 --- a/src/accessor/grib_accessor_class_data_g2bifourier_packing.cc +++ b/src/accessor/grib_accessor_class_data_g2bifourier_packing.cc @@ -12,44 +12,38 @@ #include "grib_scaling.h" #include -grib_accessor_class_data_g2bifourier_packing_t _grib_accessor_class_data_g2bifourier_packing{ "data_g2bifourier_packing" }; -grib_accessor_class* grib_accessor_class_data_g2bifourier_packing = &_grib_accessor_class_data_g2bifourier_packing; +grib_accessor_data_g2bifourier_packing_t _grib_accessor_data_g2bifourier_packing{}; +grib_accessor* grib_accessor_data_g2bifourier_packing = &_grib_accessor_data_g2bifourier_packing; - -typedef unsigned long (*encode_float_proc)(double); -typedef double (*decode_float_proc)(unsigned long); - -void grib_accessor_class_data_g2bifourier_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g2bifourier_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_simple_packing_t::init(a, v, args); - grib_accessor_data_g2bifourier_packing_t* self = (grib_accessor_data_g2bifourier_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); + grib_accessor_data_simple_packing_t::init(v, args); + grib_handle* gh = grib_handle_of_accessor(this); - self->ieee_floats = grib_arguments_get_name(gh, args, self->carg++); - self->laplacianOperatorIsSet = grib_arguments_get_name(gh, args, self->carg++); - self->laplacianOperator = grib_arguments_get_name(gh, args, self->carg++); - self->biFourierTruncationType = grib_arguments_get_name(gh, args, self->carg++); - self->sub_i = grib_arguments_get_name(gh, args, self->carg++); - self->sub_j = grib_arguments_get_name(gh, args, self->carg++); - self->bif_i = grib_arguments_get_name(gh, args, self->carg++); - self->bif_j = grib_arguments_get_name(gh, args, self->carg++); - self->biFourierSubTruncationType = grib_arguments_get_name(gh, args, self->carg++); - self->biFourierDoNotPackAxes = grib_arguments_get_name(gh, args, self->carg++); - self->biFourierMakeTemplate = grib_arguments_get_name(gh, args, self->carg++); - self->totalNumberOfValuesInUnpackedSubset = grib_arguments_get_name(gh, args, self->carg++); - /*self->numberOfValues = grib_arguments_get_name(gh,args,self->carg++);*/ + ieee_floats_ = grib_arguments_get_name(gh, args, carg_++); + laplacianOperatorIsSet_ = grib_arguments_get_name(gh, args, carg_++); + laplacianOperator_ = grib_arguments_get_name(gh, args, carg_++); + biFourierTruncationType_ = grib_arguments_get_name(gh, args, carg_++); + sub_i_ = grib_arguments_get_name(gh, args, carg_++); + sub_j_ = grib_arguments_get_name(gh, args, carg_++); + bif_i_ = grib_arguments_get_name(gh, args, carg_++); + bif_j_ = grib_arguments_get_name(gh, args, carg_++); + biFourierSubTruncationType_ = grib_arguments_get_name(gh, args, carg_++); + biFourierDoNotPackAxes_ = grib_arguments_get_name(gh, args, carg_++); + biFourierMakeTemplate_ = grib_arguments_get_name(gh, args, carg_++); + totalNumberOfValuesInUnpackedSubset_ = grib_arguments_get_name(gh, args, carg_++); + /*numberOfValues = grib_arguments_get_name(gh,args,carg_ ++);*/ - a->flags |= GRIB_ACCESSOR_FLAG_DATA; - self->dirty = 1; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; + dirty_ = 1; } -int grib_accessor_class_data_g2bifourier_packing_t::value_count(grib_accessor* a, long* numberOfValues) +int grib_accessor_data_g2bifourier_packing_t::value_count(long* numberOfValues) { - grib_accessor_data_g2bifourier_packing_t* self = (grib_accessor_data_g2bifourier_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); - *numberOfValues = 0; + grib_handle* gh = grib_handle_of_accessor(this); + *numberOfValues = 0; - return grib_get_long_internal(gh, self->number_of_values, numberOfValues); + return grib_get_long_internal(gh, number_of_values_, numberOfValues); } static void ellipse(long ni, long nj, long itrunc[], long jtrunc[]) @@ -132,7 +126,6 @@ static void diamond(long ni, long nj, long itrunc[], long jtrunc[]) #define scals(i, j) pow((double)((i) * (i) + (j) * (j)), bt->laplacianOperator) - #define for_ij() \ for (j = 0; j <= bt->bif_j; j++) \ for (i = 0; i <= bt->itruncation_bif[j]; i++) @@ -149,29 +142,6 @@ static void diamond(long ni, long nj, long itrunc[], long jtrunc[]) insub = insub || (i == 0) || (j == 0); \ } while (0) -typedef struct bif_trunc_t -{ - long bits_per_value; - long decimal_scale_factor; - long binary_scale_factor; - long ieee_floats; - long laplacianOperatorIsSet; - double laplacianOperator; - double reference_value; - long sub_i, sub_j, bif_i, bif_j; - long biFourierTruncationType; - long biFourierSubTruncationType; - long keepaxes; - long maketemplate; - decode_float_proc decode_float; - encode_float_proc encode_float; - int bytes; - long* itruncation_bif; - long* jtruncation_bif; - long* itruncation_sub; - long* jtruncation_sub; - size_t n_vals_bif, n_vals_sub; -} bif_trunc_t; /* * Total number of coefficients @@ -358,48 +328,46 @@ static void free_bif_trunc(bif_trunc_t* bt, grib_accessor* a) grib_context_free(gh->context, bt); } -static bif_trunc_t* new_bif_trunc(grib_accessor* a) +bif_trunc_t* grib_accessor_data_g2bifourier_packing_t::new_bif_trunc() { int ret; - grib_accessor_data_g2bifourier_packing_t* self = (grib_accessor_data_g2bifourier_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); + grib_handle* gh = grib_handle_of_accessor(this); bif_trunc_t* bt = (bif_trunc_t*)grib_context_malloc(gh->context, sizeof(bif_trunc_t)); memset(bt, 0, sizeof(bif_trunc_t)); - if ((ret = grib_get_double_internal(gh, self->reference_value, &bt->reference_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(gh, reference_value_, &bt->reference_value)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->bits_per_value, &bt->bits_per_value)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, bits_per_value_, &bt->bits_per_value)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->binary_scale_factor, &bt->binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, binary_scale_factor_, &bt->binary_scale_factor)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->decimal_scale_factor, &bt->decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, decimal_scale_factor_, &bt->decimal_scale_factor)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->ieee_floats, &bt->ieee_floats)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, ieee_floats_, &bt->ieee_floats)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->laplacianOperatorIsSet, &bt->laplacianOperatorIsSet)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, laplacianOperatorIsSet_, &bt->laplacianOperatorIsSet)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_double_internal(gh, self->laplacianOperator, &bt->laplacianOperator)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(gh, laplacianOperator_, &bt->laplacianOperator)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->sub_i, &bt->sub_i)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, sub_i_, &bt->sub_i)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->sub_j, &bt->sub_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, sub_j_, &bt->sub_j)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->bif_i, &bt->bif_i)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, bif_i_, &bt->bif_i)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->bif_j, &bt->bif_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, bif_j_, &bt->bif_j)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->biFourierTruncationType, &bt->biFourierTruncationType)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, biFourierTruncationType_, &bt->biFourierTruncationType)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->biFourierSubTruncationType, &bt->biFourierSubTruncationType)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, biFourierSubTruncationType_, &bt->biFourierSubTruncationType)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->biFourierDoNotPackAxes, &bt->keepaxes)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, biFourierDoNotPackAxes_, &bt->keepaxes)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_get_long_internal(gh, self->biFourierMakeTemplate, &bt->maketemplate)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, biFourierMakeTemplate_, &bt->maketemplate)) != GRIB_SUCCESS) goto cleanup; - switch (bt->ieee_floats) { case 0: bt->decode_float = grib_long_to_ibm; @@ -466,16 +434,15 @@ static bif_trunc_t* new_bif_trunc(grib_accessor* a) cleanup: - free_bif_trunc(bt, a); + free_bif_trunc(bt, this); if (ret) fprintf(stderr, "ERROR: new_bif_trunc: %s\n", grib_get_error_message(ret)); return NULL; } -int grib_accessor_class_data_g2bifourier_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_g2bifourier_packing_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_g2bifourier_packing_t* self = (grib_accessor_data_g2bifourier_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); + grib_handle* gh = grib_handle_of_accessor(this); unsigned char* buf = NULL; unsigned char* hres = NULL; @@ -498,10 +465,10 @@ int grib_accessor_class_data_g2bifourier_packing_t::unpack_double(grib_accessor* int ret = GRIB_SUCCESS; int i, j, k; - if ((ret = a->value_count(&count)) != GRIB_SUCCESS) + if ((ret = value_count(&count)) != GRIB_SUCCESS) goto cleanup; - bt = new_bif_trunc(a); + bt = new_bif_trunc(); if (bt == NULL) { ret = GRIB_INTERNAL_ERROR; @@ -513,7 +480,7 @@ int grib_accessor_class_data_g2bifourier_packing_t::unpack_double(grib_accessor* goto cleanup; } - if ((ret = grib_get_long_internal(gh, self->offsetdata, &offsetdata)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, offsetdata_, &offsetdata)) != GRIB_SUCCESS) goto cleanup; if (*len < bt->n_vals_bif) { *len = (long)bt->n_vals_bif; @@ -521,10 +488,10 @@ int grib_accessor_class_data_g2bifourier_packing_t::unpack_double(grib_accessor* goto cleanup; } - self->dirty = 0; + dirty_ = 0; buf = (unsigned char*)gh->buffer->data; - buf += a->byte_offset(); + buf += byte_offset(); s = codes_power(bt->binary_scale_factor, 2); d = codes_power(-bt->decimal_scale_factor, 10); @@ -534,7 +501,7 @@ int grib_accessor_class_data_g2bifourier_packing_t::unpack_double(grib_accessor* hres = buf; lres = buf; - packed_offset = a->byte_offset() + bt->bytes * bt->n_vals_sub; + packed_offset = byte_offset() + bt->bytes * bt->n_vals_sub; lpos = 8 * (packed_offset - offsetdata); hpos = 0; @@ -565,16 +532,14 @@ int grib_accessor_class_data_g2bifourier_packing_t::unpack_double(grib_accessor* cleanup: - free_bif_trunc(bt, a); + free_bif_trunc(bt, this); return ret; } -int grib_accessor_class_data_g2bifourier_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_g2bifourier_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_g2bifourier_packing_t* self = (grib_accessor_data_g2bifourier_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; + grib_handle* gh = grib_handle_of_accessor(this); size_t buflen = 0; size_t hsize = 0; @@ -601,11 +566,11 @@ int grib_accessor_class_data_g2bifourier_packing_t::pack_double(grib_accessor* a goto cleanup; } - bt = new_bif_trunc(a); + bt = new_bif_trunc(); if (bt == NULL) { long makeTemplate = 0; - if ((ret = grib_get_long_internal(gh, self->biFourierMakeTemplate, &makeTemplate)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(gh, biFourierMakeTemplate_, &makeTemplate)) != GRIB_SUCCESS) goto cleanup; if (!makeTemplate) { ret = GRIB_INTERNAL_ERROR; @@ -618,7 +583,7 @@ int grib_accessor_class_data_g2bifourier_packing_t::pack_double(grib_accessor* a } } - self->dirty = 1; + dirty_ = 1; if (*len != bt->n_vals_bif) { grib_context_log(gh->context, GRIB_LOG_ERROR, "BIFOURIER_PACKING: wrong number of values, expected %lu - got %lu", @@ -630,10 +595,10 @@ int grib_accessor_class_data_g2bifourier_packing_t::pack_double(grib_accessor* a if (!bt->laplacianOperatorIsSet) { bt->laplacianOperator = laplam(bt, val); - if ((ret = grib_set_double_internal(gh, self->laplacianOperator, bt->laplacianOperator)) != GRIB_SUCCESS) + if ((ret = grib_set_double_internal(gh, laplacianOperator_, bt->laplacianOperator)) != GRIB_SUCCESS) goto cleanup; - grib_get_double_internal(gh, self->laplacianOperator, &bt->laplacianOperator); + grib_get_double_internal(gh, laplacianOperator_, &bt->laplacianOperator); } /* @@ -667,7 +632,7 @@ int grib_accessor_class_data_g2bifourier_packing_t::pack_double(grib_accessor* a } if (bt->n_vals_bif != bt->n_vals_sub) { - ret = grib_optimize_decimal_factor(a, self->reference_value, + ret = grib_optimize_decimal_factor(this, reference_value_, max, min, bt->bits_per_value, 0, 1, &bt->decimal_scale_factor, &bt->binary_scale_factor, @@ -739,36 +704,36 @@ int grib_accessor_class_data_g2bifourier_packing_t::pack_double(grib_accessor* a buflen = ((hpos + lpos) / 8); - if ((ret = grib_set_double_internal(gh, self->reference_value, bt->reference_value)) != GRIB_SUCCESS) + if ((ret = grib_set_double_internal(gh, reference_value_, bt->reference_value)) != GRIB_SUCCESS) goto cleanup; { // Make sure we can decode it again double ref = 1e-100; - grib_get_double_internal(gh, self->reference_value, &ref); + grib_get_double_internal(gh, reference_value_, &ref); if (ref != bt->reference_value) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s %s: %s (ref=%.10e != reference_value=%.10e)", - cclass_name, __func__, self->reference_value, ref, bt->reference_value); + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: %s (ref=%.10e != reference_value=%.10e)", + class_name_, __func__, reference_value_, ref, bt->reference_value); return GRIB_INTERNAL_ERROR; } } - if ((ret = grib_set_long_internal(gh, self->binary_scale_factor, bt->binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(gh, binary_scale_factor_, bt->binary_scale_factor)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_set_long_internal(gh, self->decimal_scale_factor, bt->decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(gh, decimal_scale_factor_, bt->decimal_scale_factor)) != GRIB_SUCCESS) goto cleanup; - grib_buffer_replace(a, buf, buflen, 1, 1); + grib_buffer_replace(this, buf, buflen, 1, 1); - if ((ret = grib_set_long_internal(gh, self->totalNumberOfValuesInUnpackedSubset, bt->n_vals_sub)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(gh, totalNumberOfValuesInUnpackedSubset_, bt->n_vals_sub)) != GRIB_SUCCESS) goto cleanup; - if ((ret = grib_set_long_internal(gh, self->number_of_values, bt->n_vals_bif)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(gh, number_of_values_, bt->n_vals_bif)) != GRIB_SUCCESS) goto cleanup; cleanup: - free_bif_trunc(bt, a); + free_bif_trunc(bt, this); if (buf != NULL) grib_context_free(gh->context, buf); diff --git a/src/accessor/grib_accessor_class_data_g2bifourier_packing.h b/src/accessor/grib_accessor_class_data_g2bifourier_packing.h index 2fd7378a5..0690aebb9 100644 --- a/src/accessor/grib_accessor_class_data_g2bifourier_packing.h +++ b/src/accessor/grib_accessor_class_data_g2bifourier_packing.h @@ -12,32 +12,60 @@ #include "grib_accessor_class_data_simple_packing.h" +typedef unsigned long (*encode_float_proc)(double); +typedef double (*decode_float_proc)(unsigned long); + + +typedef struct bif_trunc_t +{ + long bits_per_value; + long decimal_scale_factor; + long binary_scale_factor; + long ieee_floats; + long laplacianOperatorIsSet; + double laplacianOperator; + double reference_value; + long sub_i, sub_j, bif_i, bif_j; + long biFourierTruncationType; + long biFourierSubTruncationType; + long keepaxes; + long maketemplate; + decode_float_proc decode_float; + encode_float_proc encode_float; + int bytes; + long* itruncation_bif; + long* jtruncation_bif; + long* itruncation_sub; + long* jtruncation_sub; + size_t n_vals_bif, n_vals_sub; +} bif_trunc_t; + + class grib_accessor_data_g2bifourier_packing_t : public grib_accessor_data_simple_packing_t { public: - /* Members defined in data_g2bifourier_packing */ - const char* ieee_floats; - const char* laplacianOperatorIsSet; - const char* laplacianOperator; - const char* biFourierTruncationType; - const char* sub_i; - const char* sub_j; - const char* bif_i; - const char* bif_j; - const char* biFourierSubTruncationType; - const char* biFourierDoNotPackAxes; - const char* biFourierMakeTemplate; - const char* totalNumberOfValuesInUnpackedSubset; - const char* numberOfValues; -}; - -class grib_accessor_class_data_g2bifourier_packing_t : public grib_accessor_class_data_simple_packing_t -{ -public: - grib_accessor_class_data_g2bifourier_packing_t(const char* name) : grib_accessor_class_data_simple_packing_t(name) {} + grib_accessor_data_g2bifourier_packing_t() : + grib_accessor_data_simple_packing_t() { class_name_ = "data_g2bifourier_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g2bifourier_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* ieee_floats_ = nullptr; + const char* laplacianOperatorIsSet_ = nullptr; + const char* laplacianOperator_ = nullptr; + const char* biFourierTruncationType_ = nullptr; + const char* sub_i_ = nullptr; + const char* sub_j_ = nullptr; + const char* bif_i_ = nullptr; + const char* bif_j_ = nullptr; + const char* biFourierSubTruncationType_ = nullptr; + const char* biFourierDoNotPackAxes_ = nullptr; + const char* biFourierMakeTemplate_ = nullptr; + const char* totalNumberOfValuesInUnpackedSubset_ = nullptr; + //const char* numberOfValues_ = nullptr; + + bif_trunc_t* new_bif_trunc(); }; diff --git a/src/accessor/grib_accessor_class_data_g2complex_packing.cc b/src/accessor/grib_accessor_class_data_g2complex_packing.cc index 079d14193..7b50a410d 100644 --- a/src/accessor/grib_accessor_class_data_g2complex_packing.cc +++ b/src/accessor/grib_accessor_class_data_g2complex_packing.cc @@ -10,40 +10,36 @@ #include "grib_accessor_class_data_g2complex_packing.h" -grib_accessor_class_data_g2complex_packing_t _grib_accessor_class_data_g2complex_packing{ "data_g2complex_packing" }; -grib_accessor_class* grib_accessor_class_data_g2complex_packing = &_grib_accessor_class_data_g2complex_packing; +grib_accessor_data_g2complex_packing_t _grib_accessor_data_g2complex_packing{}; +grib_accessor* grib_accessor_data_g2complex_packing = &_grib_accessor_data_g2complex_packing; - -void grib_accessor_class_data_g2complex_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g2complex_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_complex_packing_t::init(a, v, args); - grib_accessor_data_g2complex_packing_t* self = (grib_accessor_data_g2complex_packing_t*)a; - self->numberOfValues = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->edition = 2; + grib_accessor_data_complex_packing_t::init(v, args); + numberOfValues_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + edition_ = 2; - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_g2complex_packing_t::value_count(grib_accessor* a, long* numberOfValues) +int grib_accessor_data_g2complex_packing_t::value_count(long* numberOfValues) { - grib_accessor_data_g2complex_packing_t* self = (grib_accessor_data_g2complex_packing_t*)a; - *numberOfValues = 0; + *numberOfValues = 0; - return grib_get_long(grib_handle_of_accessor(a), self->numberOfValues, numberOfValues); + return grib_get_long(grib_handle_of_accessor(this), numberOfValues_, numberOfValues); } -int grib_accessor_class_data_g2complex_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_g2complex_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_g2complex_packing_t* self = (grib_accessor_data_g2complex_packing_t*)a; - int ret = GRIB_SUCCESS; + int ret = GRIB_SUCCESS; if (*len == 0) return GRIB_NO_VALUES; - ret = grib_accessor_class_data_complex_packing_t::pack_double(a, val, len); + ret = grib_accessor_data_complex_packing_t::pack_double(val, len); if (ret == GRIB_SUCCESS) - ret = grib_set_long_internal(grib_handle_of_accessor(a), self->numberOfValues, *len); + ret = grib_set_long_internal(grib_handle_of_accessor(this), numberOfValues_, *len); return ret; } diff --git a/src/accessor/grib_accessor_class_data_g2complex_packing.h b/src/accessor/grib_accessor_class_data_g2complex_packing.h index 49f33a711..abe1fa97b 100644 --- a/src/accessor/grib_accessor_class_data_g2complex_packing.h +++ b/src/accessor/grib_accessor_class_data_g2complex_packing.h @@ -15,16 +15,13 @@ class grib_accessor_data_g2complex_packing_t : public grib_accessor_data_complex_packing_t { public: - /* Members defined in data_g2complex_packing */ - const char* numberOfValues; -}; - -class grib_accessor_class_data_g2complex_packing_t : public grib_accessor_class_data_complex_packing_t -{ -public: - grib_accessor_class_data_g2complex_packing_t(const char* name) : grib_accessor_class_data_complex_packing_t(name) {} + grib_accessor_data_g2complex_packing_t() : + grib_accessor_data_complex_packing_t() { class_name_ = "data_g2complex_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g2complex_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* numberOfValues_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_g2secondary_bitmap.cc b/src/accessor/grib_accessor_class_data_g2secondary_bitmap.cc index d5f9ad174..e12c570c6 100644 --- a/src/accessor/grib_accessor_class_data_g2secondary_bitmap.cc +++ b/src/accessor/grib_accessor_class_data_g2secondary_bitmap.cc @@ -10,28 +10,24 @@ #include "grib_accessor_class_data_g2secondary_bitmap.h" -grib_accessor_class_data_g2secondary_bitmap_t _grib_accessor_class_data_g2secondary_bitmap{ "data_g2secondary_bitmap" }; -grib_accessor_class* grib_accessor_class_data_g2secondary_bitmap = &_grib_accessor_class_data_g2secondary_bitmap; +grib_accessor_data_g2secondary_bitmap_t _grib_accessor_data_g2secondary_bitmap{}; +grib_accessor* grib_accessor_data_g2secondary_bitmap = &_grib_accessor_data_g2secondary_bitmap; - -void grib_accessor_class_data_g2secondary_bitmap_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g2secondary_bitmap_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_secondary_bitmap_t::init(a, v, args); - grib_accessor_data_g2secondary_bitmap_t* self = (grib_accessor_data_g2secondary_bitmap_t*)a; - self->number_of_values = grib_arguments_get_name(grib_handle_of_accessor(a), args, 4); + grib_accessor_data_secondary_bitmap_t::init(v, args); + number_of_values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 4); } -int grib_accessor_class_data_g2secondary_bitmap_t::value_count(grib_accessor* a, long* len) +int grib_accessor_data_g2secondary_bitmap_t::value_count(long* len) { - grib_accessor_data_g2secondary_bitmap_t* self = (grib_accessor_data_g2secondary_bitmap_t*)a; - *len = 0; - return grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_values, len); + *len = 0; + return grib_get_long_internal(grib_handle_of_accessor(this), number_of_values_, len); } -int grib_accessor_class_data_g2secondary_bitmap_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_g2secondary_bitmap_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_g2secondary_bitmap_t* self = (grib_accessor_data_g2secondary_bitmap_t*)a; - int err = 0; + int err = 0; long primary_len = 0, secondary_len = 0; double* primary_bitmap = NULL; @@ -43,12 +39,12 @@ int grib_accessor_class_data_g2secondary_bitmap_t::pack_double(grib_accessor* a, if (*len == 0) return GRIB_NO_VALUES; - if ((err = grib_get_long(grib_handle_of_accessor(a), self->expand_by, &expand_by)) != GRIB_SUCCESS) + if ((err = grib_get_long(grib_handle_of_accessor(this), expand_by_, &expand_by)) != GRIB_SUCCESS) return err; if (expand_by <= 0) return GRIB_ENCODING_ERROR; - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->missing_value, &missing_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(grib_handle_of_accessor(this), missing_value_, &missing_value)) != GRIB_SUCCESS) return err; if (*len % expand_by) { @@ -57,14 +53,14 @@ int grib_accessor_class_data_g2secondary_bitmap_t::pack_double(grib_accessor* a, } primary_len = *len / expand_by; - primary_bitmap = (double*)grib_context_malloc_clear(a->context, primary_len * sizeof(double)); + primary_bitmap = (double*)grib_context_malloc_clear(context_, primary_len * sizeof(double)); if (!primary_bitmap) return GRIB_OUT_OF_MEMORY; secondary_len = *len; - secondary_bitmap = (double*)grib_context_malloc_clear(a->context, secondary_len * sizeof(double)); + secondary_bitmap = (double*)grib_context_malloc_clear(context_, secondary_len * sizeof(double)); if (!secondary_bitmap) { - grib_context_free(a->context, primary_bitmap); + grib_context_free(context_, primary_bitmap); return GRIB_OUT_OF_MEMORY; } @@ -95,15 +91,15 @@ int grib_accessor_class_data_g2secondary_bitmap_t::pack_double(grib_accessor* a, Assert(k == primary_len); - err = grib_set_double_array_internal(grib_handle_of_accessor(a), self->primary_bitmap, primary_bitmap, k); + err = grib_set_double_array_internal(grib_handle_of_accessor(this), primary_bitmap_, primary_bitmap, k); if (err == GRIB_SUCCESS) - err = grib_set_double_array_internal(grib_handle_of_accessor(a), self->secondary_bitmap, secondary_bitmap, m); + err = grib_set_double_array_internal(grib_handle_of_accessor(this), secondary_bitmap_, secondary_bitmap, m); - grib_context_free(a->context, primary_bitmap); - grib_context_free(a->context, secondary_bitmap); + grib_context_free(context_, primary_bitmap); + grib_context_free(context_, secondary_bitmap); if (err == GRIB_SUCCESS) - err = grib_set_long_internal(grib_handle_of_accessor(a), self->number_of_values, *len * expand_by); + err = grib_set_long_internal(grib_handle_of_accessor(this), number_of_values_, *len * expand_by); return err; } diff --git a/src/accessor/grib_accessor_class_data_g2secondary_bitmap.h b/src/accessor/grib_accessor_class_data_g2secondary_bitmap.h index f981e1e6c..368a3950e 100644 --- a/src/accessor/grib_accessor_class_data_g2secondary_bitmap.h +++ b/src/accessor/grib_accessor_class_data_g2secondary_bitmap.h @@ -15,16 +15,13 @@ class grib_accessor_data_g2secondary_bitmap_t : public grib_accessor_data_secondary_bitmap_t { public: - /* Members defined in data_g2secondary_bitmap */ - const char* number_of_values; -}; - -class grib_accessor_class_data_g2secondary_bitmap_t : public grib_accessor_class_data_secondary_bitmap_t -{ -public: - grib_accessor_class_data_g2secondary_bitmap_t(const char* name) : grib_accessor_class_data_secondary_bitmap_t(name) {} + grib_accessor_data_g2secondary_bitmap_t() : + grib_accessor_data_secondary_bitmap_t() { class_name_ = "data_g2secondary_bitmap"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g2secondary_bitmap_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* number_of_values_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_g2shsimple_packing.cc b/src/accessor/grib_accessor_class_data_g2shsimple_packing.cc index 5dde644fa..9e90ef67e 100644 --- a/src/accessor/grib_accessor_class_data_g2shsimple_packing.cc +++ b/src/accessor/grib_accessor_class_data_g2shsimple_packing.cc @@ -10,38 +10,34 @@ #include "grib_accessor_class_data_g2shsimple_packing.h" -grib_accessor_class_data_g2shsimple_packing_t _grib_accessor_class_data_g2shsimple_packing{ "data_g2shsimple_packing" }; -grib_accessor_class* grib_accessor_class_data_g2shsimple_packing = &_grib_accessor_class_data_g2shsimple_packing; +grib_accessor_data_g2shsimple_packing_t _grib_accessor_data_g2shsimple_packing{}; +grib_accessor* grib_accessor_data_g2shsimple_packing = &_grib_accessor_data_g2shsimple_packing; - -void grib_accessor_class_data_g2shsimple_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g2shsimple_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_shsimple_packing_t::init(a, v, args); - grib_accessor_data_g2shsimple_packing_t* self = (grib_accessor_data_g2shsimple_packing_t*)a; + grib_accessor_data_shsimple_packing_t::init(v, args); - self->numberOfValues = grib_arguments_get_name(grib_handle_of_accessor(a), args, 2); - self->numberOfDataPoints = grib_arguments_get_name(grib_handle_of_accessor(a), args, 3); - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + numberOfValues_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 2); + numberOfDataPoints_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 3); + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_g2shsimple_packing_t::value_count(grib_accessor* a, long* len) +int grib_accessor_data_g2shsimple_packing_t::value_count(long* len) { - grib_accessor_data_g2shsimple_packing_t* self = (grib_accessor_data_g2shsimple_packing_t*)a; - *len = 0; - return grib_get_long(grib_handle_of_accessor(a), self->numberOfValues, len); + *len = 0; + return grib_get_long(grib_handle_of_accessor(this), numberOfValues_, len); } -int grib_accessor_class_data_g2shsimple_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_g2shsimple_packing_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_g2shsimple_packing_t* self = (grib_accessor_data_g2shsimple_packing_t*)a; - int err = GRIB_SUCCESS; + int err = GRIB_SUCCESS; size_t n_vals = 0; - if ((err = grib_get_size(grib_handle_of_accessor(a), self->coded_values, &n_vals)) != GRIB_SUCCESS) + if ((err = grib_get_size(grib_handle_of_accessor(this), coded_values_, &n_vals)) != GRIB_SUCCESS) return err; - self->dirty = 0; + dirty_ = 0; /* n_vals = coded_n_vals+1; */ @@ -50,12 +46,12 @@ int grib_accessor_class_data_g2shsimple_packing_t::unpack_double(grib_accessor* return GRIB_ARRAY_TOO_SMALL; } - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->real_part, val)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(grib_handle_of_accessor(this), real_part_, val)) != GRIB_SUCCESS) return err; val++; - if ((err = grib_get_double_array_internal(grib_handle_of_accessor(a), self->coded_values, val, &n_vals)) != GRIB_SUCCESS) + if ((err = grib_get_double_array_internal(grib_handle_of_accessor(this), coded_values_, val, &n_vals)) != GRIB_SUCCESS) return err; *len = n_vals; @@ -63,10 +59,9 @@ int grib_accessor_class_data_g2shsimple_packing_t::unpack_double(grib_accessor* return err; } -int grib_accessor_class_data_g2shsimple_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_g2shsimple_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_g2shsimple_packing_t* self = (grib_accessor_data_g2shsimple_packing_t*)a; - int err = GRIB_SUCCESS; + int err = GRIB_SUCCESS; size_t coded_n_vals = *len - 1; size_t n_vals = *len; @@ -74,21 +69,21 @@ int grib_accessor_class_data_g2shsimple_packing_t::pack_double(grib_accessor* a, if (*len == 0) return GRIB_NO_VALUES; - self->dirty = 1; + dirty_ = 1; - if ((err = grib_set_double_internal(grib_handle_of_accessor(a), self->real_part, *val)) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(grib_handle_of_accessor(this), real_part_, *val)) != GRIB_SUCCESS) return err; val++; - if ((err = grib_set_double_array_internal(grib_handle_of_accessor(a), self->coded_values, val, coded_n_vals)) != GRIB_SUCCESS) + if ((err = grib_set_double_array_internal(grib_handle_of_accessor(this), coded_values_, val, coded_n_vals)) != GRIB_SUCCESS) return err; *len = n_vals; - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), self->numberOfValues, (long)n_vals)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(grib_handle_of_accessor(this), numberOfValues_, (long)n_vals)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), self->numberOfDataPoints, (long)n_vals)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(grib_handle_of_accessor(this), numberOfDataPoints_, (long)n_vals)) != GRIB_SUCCESS) return err; return err; diff --git a/src/accessor/grib_accessor_class_data_g2shsimple_packing.h b/src/accessor/grib_accessor_class_data_g2shsimple_packing.h index 02da8345e..ad0f1c51c 100644 --- a/src/accessor/grib_accessor_class_data_g2shsimple_packing.h +++ b/src/accessor/grib_accessor_class_data_g2shsimple_packing.h @@ -15,18 +15,15 @@ class grib_accessor_data_g2shsimple_packing_t : public grib_accessor_data_shsimple_packing_t { public: - /* Members defined in data_g2shsimple_packing */ - const char* numberOfValues; - const char* numberOfDataPoints; -}; - -class grib_accessor_class_data_g2shsimple_packing_t : public grib_accessor_class_data_shsimple_packing_t -{ -public: - grib_accessor_class_data_g2shsimple_packing_t(const char* name) : grib_accessor_class_data_shsimple_packing_t(name) {} + grib_accessor_data_g2shsimple_packing_t() : + grib_accessor_data_shsimple_packing_t() { class_name_ = "data_g2shsimple_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g2shsimple_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* numberOfValues_ = nullptr; + const char* numberOfDataPoints_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_g2simple_packing.cc b/src/accessor/grib_accessor_class_data_g2simple_packing.cc index c4491e82f..4c167e0cf 100644 --- a/src/accessor/grib_accessor_class_data_g2simple_packing.cc +++ b/src/accessor/grib_accessor_class_data_g2simple_packing.cc @@ -11,29 +11,25 @@ #include "grib_accessor_class_data_g2simple_packing.h" #include "grib_scaling.h" -grib_accessor_class_data_g2simple_packing_t _grib_accessor_class_data_g2simple_packing{ "data_g2simple_packing" }; -grib_accessor_class* grib_accessor_class_data_g2simple_packing = &_grib_accessor_class_data_g2simple_packing; +grib_accessor_data_g2simple_packing_t _grib_accessor_data_g2simple_packing{}; +grib_accessor* grib_accessor_data_g2simple_packing = &_grib_accessor_data_g2simple_packing; - -void grib_accessor_class_data_g2simple_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g2simple_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_simple_packing_t::init(a, v, args); - grib_accessor_data_g2simple_packing_t* self = (grib_accessor_data_g2simple_packing_t*)a; - a->flags |= GRIB_ACCESSOR_FLAG_DATA; - self->edition = 2; + grib_accessor_data_simple_packing_t::init(v, args); + flags_ |= GRIB_ACCESSOR_FLAG_DATA; + edition_ = 2; } -int grib_accessor_class_data_g2simple_packing_t::value_count(grib_accessor* a, long* n_vals) +int grib_accessor_data_g2simple_packing_t::value_count(long* n_vals) { - grib_accessor_data_g2simple_packing_t* self = (grib_accessor_data_g2simple_packing_t*)a; - *n_vals = 0; - return grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_values, n_vals); + *n_vals = 0; + return grib_get_long_internal(grib_handle_of_accessor(this), number_of_values_, n_vals); } -int grib_accessor_class_data_g2simple_packing_t::pack_double(grib_accessor* a, const double* cval, size_t* len) +int grib_accessor_data_g2simple_packing_t::pack_double(const double* cval, size_t* len) { - grib_accessor_data_g2simple_packing_t* self = (grib_accessor_data_g2simple_packing_t*)a; - // grib_accessor_class* super = *(a->cclass->super); + // grib_accessor* super = *(cclass_ ->super); size_t n_vals = *len; double reference_value = 0; long binary_scale_factor = 0; @@ -50,27 +46,27 @@ int grib_accessor_class_data_g2simple_packing_t::pack_double(grib_accessor* a, c double units_bias = 0.0; double* val = (double*)cval; int i; - grib_context* c = a->context; + grib_context* c = context_; if (*len == 0) { - grib_buffer_replace(a, NULL, 0, 1, 1); + grib_buffer_replace(this, NULL, 0, 1, 1); return GRIB_SUCCESS; } if (ret == GRIB_SUCCESS) - ret = grib_set_long_internal(grib_handle_of_accessor(a), self->number_of_values, *len); + ret = grib_set_long_internal(grib_handle_of_accessor(this), number_of_values_, *len); if (ret != GRIB_SUCCESS) return ret; - if (self->units_factor && - (grib_get_double_internal(grib_handle_of_accessor(a), self->units_factor, &units_factor) == GRIB_SUCCESS)) { - grib_set_double_internal(grib_handle_of_accessor(a), self->units_factor, 1.0); + if (units_factor_ && + (grib_get_double_internal(grib_handle_of_accessor(this), units_factor_, &units_factor) == GRIB_SUCCESS)) { + grib_set_double_internal(grib_handle_of_accessor(this), units_factor_, 1.0); } - if (self->units_bias && - (grib_get_double_internal(grib_handle_of_accessor(a), self->units_bias, &units_bias) == GRIB_SUCCESS)) { - grib_set_double_internal(grib_handle_of_accessor(a), self->units_bias, 0.0); + if (units_bias_ && + (grib_get_double_internal(grib_handle_of_accessor(this), units_bias_, &units_bias) == GRIB_SUCCESS)) { + grib_set_double_internal(grib_handle_of_accessor(this), units_bias_, 0.0); } if (units_factor != 1.0) { @@ -93,7 +89,7 @@ int grib_accessor_class_data_g2simple_packing_t::pack_double(grib_accessor* a, c /* IEEE packing */ if (c->ieee_packing) { - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); long precision = 0; /* Either 1(=32 bits) or 2(=64 bits) */ size_t lenstr = 10; if ((ret = codes_check_grib_ieee_packing_value(c->ieee_packing)) != GRIB_SUCCESS) @@ -107,52 +103,52 @@ int grib_accessor_class_data_g2simple_packing_t::pack_double(grib_accessor* a, c return grib_set_double_array(h, "values", val, *len); } - ret = grib_accessor_class_data_simple_packing_t::pack_double(a, cval, len); + ret = grib_accessor_data_simple_packing_t::pack_double(cval, len); switch (ret) { case GRIB_CONSTANT_FIELD: - grib_buffer_replace(a, NULL, 0, 1, 1); + grib_buffer_replace(this, NULL, 0, 1, 1); return GRIB_SUCCESS; case GRIB_SUCCESS: break; default: - grib_context_log(a->context, GRIB_LOG_ERROR, "GRIB2 simple packing: unable to set values (%s)", grib_get_error_message(ret)); + grib_context_log(context_, GRIB_LOG_ERROR, "GRIB2 simple packing: unable to set values (%s)", grib_get_error_message(ret)); return ret; } - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(grib_handle_of_accessor(this), reference_value_, &reference_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return ret; decimal = codes_power(decimal_scale_factor, 10); divisor = codes_power(-binary_scale_factor, 2); buflen = (((bits_per_value * n_vals) + 7) / 8) * sizeof(unsigned char); - buf = (unsigned char*)grib_context_buffer_malloc_clear(a->context, buflen); + buf = (unsigned char*)grib_context_buffer_malloc_clear(context_, buflen); encoded = buf; grib_encode_double_array(n_vals, val, bits_per_value, reference_value, decimal, divisor, encoded, &off); - grib_context_log(a->context, GRIB_LOG_DEBUG, - "grib_accessor_data_g2simple_packing_t : pack_double : packing %s, %d values", a->name, n_vals); + grib_context_log(context_, GRIB_LOG_DEBUG, + "grib_accessor_data_g2simple_packing_t : pack_double : packing %s, %d values", name_, n_vals); - grib_buffer_replace(a, buf, buflen, 1, 1); + grib_buffer_replace(this, buf, buflen, 1, 1); - grib_context_buffer_free(a->context, buf); + grib_context_buffer_free(context_, buf); return ret; } -int grib_accessor_class_data_g2simple_packing_t::pack_bytes(grib_accessor* a, const unsigned char* val, size_t* len) +int grib_accessor_data_g2simple_packing_t::pack_bytes(const unsigned char* val, size_t* len) { size_t length = *len; - grib_buffer_replace(a, val, length, 1, 1); + grib_buffer_replace(this, val, length, 1, 1); return GRIB_SUCCESS; } diff --git a/src/accessor/grib_accessor_class_data_g2simple_packing.h b/src/accessor/grib_accessor_class_data_g2simple_packing.h index a88cccac0..3c3a445ef 100644 --- a/src/accessor/grib_accessor_class_data_g2simple_packing.h +++ b/src/accessor/grib_accessor_class_data_g2simple_packing.h @@ -12,15 +12,14 @@ #include "grib_accessor_class_data_simple_packing.h" -class grib_accessor_data_g2simple_packing_t : public grib_accessor_data_simple_packing_t {}; - -class grib_accessor_class_data_g2simple_packing_t : public grib_accessor_class_data_simple_packing_t +class grib_accessor_data_g2simple_packing_t : public grib_accessor_data_simple_packing_t { public: - grib_accessor_class_data_g2simple_packing_t(const char* name) : grib_accessor_class_data_simple_packing_t(name) {} + grib_accessor_data_g2simple_packing_t() : + grib_accessor_data_simple_packing_t() { class_name_ = "data_g2simple_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g2simple_packing_t{}; } - int pack_bytes(grib_accessor*, const unsigned char*, size_t* len) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_bytes(const unsigned char*, size_t* len) override; + int pack_double(const double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_data_g2simple_packing_with_preprocessing.cc b/src/accessor/grib_accessor_class_data_g2simple_packing_with_preprocessing.cc index fc87df231..77370bb3d 100644 --- a/src/accessor/grib_accessor_class_data_g2simple_packing_with_preprocessing.cc +++ b/src/accessor/grib_accessor_class_data_g2simple_packing_with_preprocessing.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -13,25 +12,22 @@ #define DIRECT 0 #define INVERSE 1 -grib_accessor_class_data_g2simple_packing_with_preprocessing_t _grib_accessor_class_data_g2simple_packing_with_preprocessing{ "data_g2simple_packing_with_preprocessing" }; -grib_accessor_class* grib_accessor_class_data_g2simple_packing_with_preprocessing = &_grib_accessor_class_data_g2simple_packing_with_preprocessing; +grib_accessor_data_g2simple_packing_with_preprocessing_t _grib_accessor_data_g2simple_packing_with_preprocessing{}; +grib_accessor* grib_accessor_data_g2simple_packing_with_preprocessing = &_grib_accessor_data_g2simple_packing_with_preprocessing; - -void grib_accessor_class_data_g2simple_packing_with_preprocessing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_g2simple_packing_with_preprocessing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_g2simple_packing_t::init(a, v, args); - grib_accessor_data_g2simple_packing_with_preprocessing_t* self = (grib_accessor_data_g2simple_packing_with_preprocessing_t*)a; - self->pre_processing = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->pre_processing_parameter = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + grib_accessor_data_g2simple_packing_t::init(v, args); + pre_processing_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + pre_processing_parameter_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_g2simple_packing_with_preprocessing_t::value_count(grib_accessor* a, long* n_vals) +int grib_accessor_data_g2simple_packing_with_preprocessing_t::value_count(long* n_vals) { - grib_accessor_data_g2simple_packing_with_preprocessing_t* self = (grib_accessor_data_g2simple_packing_with_preprocessing_t*)a; *n_vals = 0; - return grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_values, n_vals); + return grib_get_long_internal(grib_handle_of_accessor(this), number_of_values_, n_vals); } static int pre_processing_func(double* values, long length, long pre_processing, @@ -98,10 +94,8 @@ static int pre_processing_func(double* values, long length, long pre_processing, return ret; } -int grib_accessor_class_data_g2simple_packing_with_preprocessing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_g2simple_packing_with_preprocessing_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_g2simple_packing_with_preprocessing_t* self = (grib_accessor_data_g2simple_packing_with_preprocessing_t*)a; - size_t n_vals = 0; long nn = 0; int err = 0; @@ -109,7 +103,7 @@ int grib_accessor_class_data_g2simple_packing_with_preprocessing_t::unpack_doubl long pre_processing; double pre_processing_parameter; - err = a->value_count(&nn); + err = value_count(&nn); n_vals = nn; if (err) return err; @@ -119,17 +113,17 @@ int grib_accessor_class_data_g2simple_packing_with_preprocessing_t::unpack_doubl return GRIB_SUCCESS; } - self->dirty = 0; + dirty_ = 0; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->pre_processing, &pre_processing)) != GRIB_SUCCESS) { + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), pre_processing_, &pre_processing)) != GRIB_SUCCESS) { return err; } - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->pre_processing_parameter, &pre_processing_parameter)) != GRIB_SUCCESS) { + if ((err = grib_get_double_internal(grib_handle_of_accessor(this), pre_processing_parameter_, &pre_processing_parameter)) != GRIB_SUCCESS) { return err; } - err = grib_accessor_class_data_simple_packing_t::unpack_double(a, val, &n_vals); + err = grib_accessor_data_simple_packing_t::unpack_double(val, &n_vals); if (err != GRIB_SUCCESS) return err; @@ -142,33 +136,31 @@ int grib_accessor_class_data_g2simple_packing_with_preprocessing_t::unpack_doubl return err; } -int grib_accessor_class_data_g2simple_packing_with_preprocessing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_g2simple_packing_with_preprocessing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_g2simple_packing_with_preprocessing_t* self = (grib_accessor_data_g2simple_packing_with_preprocessing_t*)a; - size_t n_vals = *len; int err = 0; long pre_processing = 0; double pre_processing_parameter = 0; - self->dirty = 1; + dirty_ = 1; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->pre_processing, &pre_processing)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), pre_processing_, &pre_processing)) != GRIB_SUCCESS) return err; err = pre_processing_func((double*)val, n_vals, pre_processing, &pre_processing_parameter, DIRECT); if (err != GRIB_SUCCESS) return err; - err = grib_accessor_class_data_g2simple_packing_t::pack_double(a, val, len); + err = grib_accessor_data_g2simple_packing_t::pack_double(val, len); if (err != GRIB_SUCCESS) return err; - if ((err = grib_set_double_internal(grib_handle_of_accessor(a), self->pre_processing_parameter, pre_processing_parameter)) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(grib_handle_of_accessor(this), pre_processing_parameter_, pre_processing_parameter)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), self->number_of_values, n_vals)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(grib_handle_of_accessor(this), number_of_values_, n_vals)) != GRIB_SUCCESS) return err; return GRIB_SUCCESS; diff --git a/src/accessor/grib_accessor_class_data_g2simple_packing_with_preprocessing.h b/src/accessor/grib_accessor_class_data_g2simple_packing_with_preprocessing.h index 4e2437e8b..bfd142afb 100644 --- a/src/accessor/grib_accessor_class_data_g2simple_packing_with_preprocessing.h +++ b/src/accessor/grib_accessor_class_data_g2simple_packing_with_preprocessing.h @@ -15,18 +15,15 @@ class grib_accessor_data_g2simple_packing_with_preprocessing_t : public grib_accessor_data_g2simple_packing_t { public: - /* Members defined in data_g2simple_packing_with_preprocessing */ - const char* pre_processing; - const char* pre_processing_parameter; -}; - -class grib_accessor_class_data_g2simple_packing_with_preprocessing_t : public grib_accessor_class_data_g2simple_packing_t -{ -public: - grib_accessor_class_data_g2simple_packing_with_preprocessing_t(const char* name) : grib_accessor_class_data_g2simple_packing_t(name) {} + grib_accessor_data_g2simple_packing_with_preprocessing_t() : + grib_accessor_data_g2simple_packing_t() { class_name_ = "data_g2simple_packing_with_preprocessing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_g2simple_packing_with_preprocessing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* pre_processing_ = nullptr; + const char* pre_processing_parameter_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_jpeg2000_packing.cc b/src/accessor/grib_accessor_class_data_jpeg2000_packing.cc index 1860737d1..55bf9ea8a 100644 --- a/src/accessor/grib_accessor_class_data_jpeg2000_packing.cc +++ b/src/accessor/grib_accessor_class_data_jpeg2000_packing.cc @@ -10,50 +10,48 @@ #include "grib_accessor_class_data_jpeg2000_packing.h" -grib_accessor_class_data_jpeg2000_packing_t _grib_accessor_class_data_jpeg2000_packing{ "data_jpeg2000_packing" }; -grib_accessor_class* grib_accessor_class_data_jpeg2000_packing = &_grib_accessor_class_data_jpeg2000_packing; - +grib_accessor_data_jpeg2000_packing_t _grib_accessor_data_jpeg2000_packing{}; +grib_accessor* grib_accessor_data_jpeg2000_packing = &_grib_accessor_data_jpeg2000_packing; static int first = 1; #define JASPER_LIB 1 #define OPENJPEG_LIB 2 -void grib_accessor_class_data_jpeg2000_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_jpeg2000_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_simple_packing_t::init(a, v, args); - const char* user_lib = NULL; - grib_accessor_data_jpeg2000_packing_t* self = (grib_accessor_data_jpeg2000_packing_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_data_simple_packing_t::init(v, args); + const char* user_lib = NULL; + grib_handle* hand = grib_handle_of_accessor(this); - self->jpeg_lib = 0; - self->type_of_compression_used = grib_arguments_get_name(hand, args, self->carg++); - self->target_compression_ratio = grib_arguments_get_name(hand, args, self->carg++); - self->ni = grib_arguments_get_name(hand, args, self->carg++); - self->nj = grib_arguments_get_name(hand, args, self->carg++); - self->list_defining_points = grib_arguments_get_name(hand, args, self->carg++); - self->number_of_data_points = grib_arguments_get_name(hand, args, self->carg++); - self->scanning_mode = grib_arguments_get_name(hand, args, self->carg++); - self->edition = 2; - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + jpeg_lib_ = 0; + type_of_compression_used_ = grib_arguments_get_name(hand, args, carg_++); + target_compression_ratio_ = grib_arguments_get_name(hand, args, carg_++); + ni_ = grib_arguments_get_name(hand, args, carg_++); + nj_ = grib_arguments_get_name(hand, args, carg_++); + list_defining_points_ = grib_arguments_get_name(hand, args, carg_++); + number_of_data_points_ = grib_arguments_get_name(hand, args, carg_++); + scanning_mode_ = grib_arguments_get_name(hand, args, carg_++); + edition_ = 2; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; #if HAVE_LIBJASPER - self->jpeg_lib = JASPER_LIB; + jpeg_lib_ = JASPER_LIB; #elif HAVE_LIBOPENJPEG - self->jpeg_lib = OPENJPEG_LIB; + jpeg_lib_ = OPENJPEG_LIB; #endif if ((user_lib = codes_getenv("ECCODES_GRIB_JPEG")) != NULL) { if (!strcmp(user_lib, "jasper")) { - self->jpeg_lib = JASPER_LIB; + jpeg_lib_ = JASPER_LIB; } else if (!strcmp(user_lib, "openjpeg")) { - self->jpeg_lib = OPENJPEG_LIB; + jpeg_lib_ = OPENJPEG_LIB; } } - if (a->context->debug) { - switch (self->jpeg_lib) { + if (context_->debug) { + switch (jpeg_lib_) { case 0: fprintf(stderr, "ECCODES DEBUG jpeg2000_packing: jpeg_lib not set!\n"); break; @@ -69,38 +67,37 @@ void grib_accessor_class_data_jpeg2000_packing_t::init(grib_accessor* a, const l } } - self->dump_jpg = codes_getenv("ECCODES_GRIB_DUMP_JPG_FILE"); - if (self->dump_jpg) { + dump_jpg_ = codes_getenv("ECCODES_GRIB_DUMP_JPG_FILE"); + if (dump_jpg_) { if (first) { - printf("GRIB JPEG dumping to %s\n", self->dump_jpg); + printf("GRIB JPEG dumping to %s\n", dump_jpg_); first = 0; } } } -int grib_accessor_class_data_jpeg2000_packing_t::value_count(grib_accessor* a, long* n_vals) +int grib_accessor_data_jpeg2000_packing_t::value_count(long* n_vals) { - grib_accessor_data_jpeg2000_packing_t* self = (grib_accessor_data_jpeg2000_packing_t*)a; - *n_vals = 0; + *n_vals = 0; - return grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_values, n_vals); + return grib_get_long_internal(grib_handle_of_accessor(this), number_of_values_, n_vals); } #define EXTRA_BUFFER_SIZE 10240 #if HAVE_JPEG -int grib_accessor_class_data_jpeg2000_packing_t::unpack_float(grib_accessor*, float* val, size_t* len) +int grib_accessor_data_jpeg2000_packing_t::unpack_float(float* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_data_jpeg2000_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_jpeg2000_packing_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_jpeg2000_packing_t* self = (grib_accessor_data_jpeg2000_packing_t*)a; - int err = GRIB_SUCCESS; + grib_handle* hand = grib_handle_of_accessor(this); + size_t i = 0; - size_t buflen = a->byte_count(); + size_t buflen = byte_count(); double bscale = 0; double dscale = 0; unsigned char* buf = NULL; @@ -115,28 +112,27 @@ int grib_accessor_class_data_jpeg2000_packing_t::unpack_double(grib_accessor* a, double units_bias = 0.0; n_vals = 0; - err = a->value_count(&nn); + err = value_count(&nn); n_vals = nn; if (err) return err; - if (self->units_factor) - grib_get_double_internal(grib_handle_of_accessor(a), self->units_factor, &units_factor); + if (units_factor_) + grib_get_double_internal(hand, units_factor_, &units_factor); - if (self->units_bias) - grib_get_double_internal(grib_handle_of_accessor(a), self->units_bias, &units_bias); + if (units_bias_) + grib_get_double_internal(hand, units_bias_, &units_bias); - - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(hand, reference_value_, &reference_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return err; - self->dirty = 0; + dirty_ = 0; bscale = codes_power(binary_scale_factor, 2); dscale = codes_power(-decimal_scale_factor, 10); @@ -154,19 +150,19 @@ int grib_accessor_class_data_jpeg2000_packing_t::unpack_double(grib_accessor* a, return GRIB_SUCCESS; } - buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data; - buf += a->byte_offset(); - switch (self->jpeg_lib) { + buf = (unsigned char*)grib_handle_of_accessor(this)->buffer->data; + buf += byte_offset(); + switch (jpeg_lib_) { case OPENJPEG_LIB: - if ((err = grib_openjpeg_decode(a->context, buf, &buflen, val, &n_vals)) != GRIB_SUCCESS) + if ((err = grib_openjpeg_decode(context_, buf, &buflen, val, &n_vals)) != GRIB_SUCCESS) return err; break; case JASPER_LIB: - if ((err = grib_jasper_decode(a->context, buf, &buflen, val, &n_vals)) != GRIB_SUCCESS) + if ((err = grib_jasper_decode(context_, buf, &buflen, val, &n_vals)) != GRIB_SUCCESS) return err; break; default: - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to unpack. Invalid JPEG library.\n"); + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to unpack. Invalid JPEG library.\n"); return GRIB_DECODING_ERROR; } @@ -196,12 +192,10 @@ int grib_accessor_class_data_jpeg2000_packing_t::unpack_double(grib_accessor* a, return err; } -int grib_accessor_class_data_jpeg2000_packing_t::pack_double(grib_accessor* a, const double* cval, size_t* len) +int grib_accessor_data_jpeg2000_packing_t::pack_double(const double* cval, size_t* len) { - grib_accessor_data_jpeg2000_packing_t* self = (grib_accessor_data_jpeg2000_packing_t*)a; - size_t n_vals = *len; - int err = 0; - int i; + size_t n_vals = *len; + int err = 0; double reference_value = 0; long binary_scale_factor = 0; long bits_per_value = 0; @@ -224,87 +218,86 @@ int grib_accessor_class_data_jpeg2000_packing_t::pack_double(grib_accessor* a, c double units_factor = 1.0; double units_bias = 0.0; double* val = (double*)cval; - const char* cclass_name = a->cclass->name; - self->dirty = 1; + dirty_ = 1; if (*len == 0) { - grib_buffer_replace(a, NULL, 0, 1, 1); + grib_buffer_replace(this, NULL, 0, 1, 1); return GRIB_SUCCESS; } - if (self->units_factor && - (grib_get_double_internal(grib_handle_of_accessor(a), self->units_factor, &units_factor) == GRIB_SUCCESS)) { - grib_set_double_internal(grib_handle_of_accessor(a), self->units_factor, 1.0); + if (units_factor_ && + (grib_get_double_internal(grib_handle_of_accessor(this), units_factor_, &units_factor) == GRIB_SUCCESS)) { + grib_set_double_internal(grib_handle_of_accessor(this), units_factor_, 1.0); } - if (self->units_bias && - (grib_get_double_internal(grib_handle_of_accessor(a), self->units_bias, &units_bias) == GRIB_SUCCESS)) { - grib_set_double_internal(grib_handle_of_accessor(a), self->units_bias, 0.0); + if (units_bias_ && + (grib_get_double_internal(grib_handle_of_accessor(this), units_bias_, &units_bias) == GRIB_SUCCESS)) { + grib_set_double_internal(grib_handle_of_accessor(this), units_bias_, 0.0); } if (units_factor != 1.0) { if (units_bias != 0.0) - for (i = 0; i < n_vals; i++) + for (size_t i = 0; i < n_vals; i++) val[i] = val[i] * units_factor + units_bias; else - for (i = 0; i < n_vals; i++) + for (size_t i = 0; i < n_vals; i++) val[i] *= units_factor; } else if (units_bias != 0.0) - for (i = 0; i < n_vals; i++) + for (size_t i = 0; i < n_vals; i++) val[i] += units_bias; - ret = grib_accessor_class_data_simple_packing_t::pack_double(a, val, len); + ret = grib_accessor_data_simple_packing_t::pack_double(val, len); switch (ret) { case GRIB_CONSTANT_FIELD: - grib_buffer_replace(a, NULL, 0, 1, 1); - err = grib_set_long_internal(grib_handle_of_accessor(a), self->number_of_values, *len); + grib_buffer_replace(this, NULL, 0, 1, 1); + err = grib_set_long_internal(grib_handle_of_accessor(this), number_of_values_, *len); return err; case GRIB_SUCCESS: break; default: - grib_context_log(a->context, GRIB_LOG_ERROR, "%s %s: Unable to compute packing parameters", cclass_name, __func__); + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: Unable to compute packing parameters", class_name_, __func__); return ret; } - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(grib_handle_of_accessor(this), reference_value_, &reference_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->bits_per_value, &bits_per_value)) != + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return ret; decimal = codes_power(decimal_scale_factor, 10); divisor = codes_power(-binary_scale_factor, 2); simple_packing_size = (((bits_per_value * n_vals) + 7) / 8) * sizeof(unsigned char); - buf = (unsigned char*)grib_context_malloc_clear(a->context, simple_packing_size + EXTRA_BUFFER_SIZE); + buf = (unsigned char*)grib_context_malloc_clear(context_, simple_packing_size + EXTRA_BUFFER_SIZE); if (!buf) { err = GRIB_OUT_OF_MEMORY; goto cleanup; } - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->ni, &ni)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), ni_, &ni)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->nj, &nj)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), nj_, &nj)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->type_of_compression_used, &type_of_compression_used)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), type_of_compression_used_, &type_of_compression_used)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->target_compression_ratio, &target_compression_ratio)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), target_compression_ratio_, &target_compression_ratio)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->scanning_mode, &scanning_mode)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), scanning_mode_, &scanning_mode)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->list_defining_points, &list_defining_points)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), list_defining_points_, &list_defining_points)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_data_points, &number_of_data_points)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), number_of_data_points_, &number_of_data_points)) != GRIB_SUCCESS) return err; width = ni; @@ -329,24 +322,24 @@ int grib_accessor_class_data_jpeg2000_packing_t::pack_double(grib_accessor* a, c } if (width * height != *len) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: width=%ld height=%ld len=%zu. width*height should equal len!", - cclass_name, __func__, width, height, *len); + class_name_, __func__, width, height, *len); /* ECC-802: We cannot bomb out here as the user might have changed Ni/Nj and the packingType * but has not yet submitted the new data values. So len will be out of sync! * So issue a warning but proceed. */ /*return GRIB_INTERNAL_ERROR;*/ - grib_context_free(a->context, buf); + grib_context_free(context_, buf); return GRIB_SUCCESS; } switch (type_of_compression_used) { case 0: // Lossless if (target_compression_ratio != 255) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: When %s=0 (Lossless), %s must be set to 255", - cclass_name, __func__, self->type_of_compression_used, self->target_compression_ratio); + class_name_, __func__, type_of_compression_used, target_compression_ratio_); return GRIB_ENCODING_ERROR; } helper.compression = 0; @@ -354,9 +347,9 @@ int grib_accessor_class_data_jpeg2000_packing_t::pack_double(grib_accessor* a, c case 1: // Lossy if (target_compression_ratio == 255 || target_compression_ratio == 0) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: When %s=1 (Lossy), %s must be specified", - cclass_name, __func__, self->type_of_compression_used, self->target_compression_ratio); + class_name_, __func__, type_of_compression_used, target_compression_ratio_); return GRIB_ENCODING_ERROR; } Assert(target_compression_ratio != 255); @@ -376,9 +369,9 @@ int grib_accessor_class_data_jpeg2000_packing_t::pack_double(grib_accessor* a, c /* See GRIB-438 */ if (bits_per_value == 0) { const long bits_per_value_adjusted = 1; - grib_context_log(a->context, GRIB_LOG_DEBUG, + grib_context_log(context_, GRIB_LOG_DEBUG, "%s (%s) : bits per value was zero, changed to %ld", - cclass_name, self->jpeg_lib == OPENJPEG_LIB ? "openjpeg" : "jasper", bits_per_value_adjusted); + class_name_, jpeg_lib_ == OPENJPEG_LIB ? "openjpeg" : "jasper", bits_per_value_adjusted); bits_per_value = bits_per_value_adjusted; } helper.bits_per_value = bits_per_value; @@ -391,45 +384,45 @@ int grib_accessor_class_data_jpeg2000_packing_t::pack_double(grib_accessor* a, c helper.decimal = decimal; helper.jpeg_length = 0; - switch (self->jpeg_lib) { + switch (jpeg_lib_) { case OPENJPEG_LIB: - if ((err = grib_openjpeg_encode(a->context, &helper)) != GRIB_SUCCESS) + if ((err = grib_openjpeg_encode(context_, &helper)) != GRIB_SUCCESS) goto cleanup; break; case JASPER_LIB: - if ((err = grib_jasper_encode(a->context, &helper)) != GRIB_SUCCESS) + if ((err = grib_jasper_encode(context_, &helper)) != GRIB_SUCCESS) goto cleanup; break; } if (helper.jpeg_length > simple_packing_size) - grib_context_log(a->context, GRIB_LOG_WARNING, + grib_context_log(context_, GRIB_LOG_WARNING, "%s (%s) : jpeg data (%ld) larger than input data (%ld)", - cclass_name, self->jpeg_lib == OPENJPEG_LIB ? "openjpeg" : "jasper", + class_name_, jpeg_lib_ == OPENJPEG_LIB ? "openjpeg" : "jasper", helper.jpeg_length, simple_packing_size); Assert(helper.jpeg_length <= helper.buffer_size); - if (self->dump_jpg) { - FILE* f = fopen(self->dump_jpg, "w"); + if (dump_jpg_) { + FILE* f = fopen(dump_jpg_, "w"); if (f) { if (fwrite(helper.jpeg_buffer, helper.jpeg_length, 1, f) != 1) - perror(self->dump_jpg); + perror(dump_jpg_); if (fclose(f) != 0) - perror(self->dump_jpg); + perror(dump_jpg_); } else - perror(self->dump_jpg); + perror(dump_jpg_); } - grib_buffer_replace(a, helper.jpeg_buffer, helper.jpeg_length, 1, 1); + grib_buffer_replace(this, helper.jpeg_buffer, helper.jpeg_length, 1, 1); cleanup: - grib_context_free(a->context, buf); + grib_context_free(context_, buf); if (err == GRIB_SUCCESS) - err = grib_set_long_internal(grib_handle_of_accessor(a), self->number_of_values, *len); + err = grib_set_long_internal(grib_handle_of_accessor(this), number_of_values_, *len); return err; } #else @@ -439,38 +432,37 @@ static void print_error_feature_not_enabled(grib_context* c) grib_context_log(c, GRIB_LOG_ERROR, "JPEG support not enabled. Please rebuild with -DENABLE_JPG=ON"); } -int grib_accessor_class_data_jpeg2000_packing_t::unpack_float(grib_accessor* a, float* val, size_t* len) +int grib_accessor_data_jpeg2000_packing_t::unpack_float(float* val, size_t* len) { - print_error_feature_not_enabled(a->context); + print_error_feature_not_enabled(context_); return GRIB_FUNCTIONALITY_NOT_ENABLED; } -int grib_accessor_class_data_jpeg2000_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_jpeg2000_packing_t::unpack_double(double* val, size_t* len) { - print_error_feature_not_enabled(a->context); + print_error_feature_not_enabled(context_); return GRIB_FUNCTIONALITY_NOT_ENABLED; } -int grib_accessor_class_data_jpeg2000_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_jpeg2000_packing_t::pack_double(const double* val, size_t* len) { - print_error_feature_not_enabled(a->context); + print_error_feature_not_enabled(context_); return GRIB_FUNCTIONALITY_NOT_ENABLED; } #endif -int grib_accessor_class_data_jpeg2000_packing_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_jpeg2000_packing_t::unpack_double_element(size_t idx, double* val) { - grib_accessor_data_jpeg2000_packing_t* self = (grib_accessor_data_jpeg2000_packing_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - size_t size = 0; - double* values = NULL; - int err = 0; - double reference_value = 0; - long bits_per_value = 0; + grib_handle* hand = grib_handle_of_accessor(this); + size_t size = 0; + double* values = NULL; + int err = 0; + double reference_value = 0; + long bits_per_value = 0; - if ((err = grib_get_long_internal(hand, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(hand, reference_value_, &reference_value)) != GRIB_SUCCESS) return err; /* Special case of constant field */ @@ -486,30 +478,29 @@ int grib_accessor_class_data_jpeg2000_packing_t::unpack_double_element(grib_acce if (idx > size) return GRIB_INVALID_ARGUMENT; - values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); + values = (double*)grib_context_malloc_clear(context_, size * sizeof(double)); err = grib_get_double_array(hand, "codedValues", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } *val = values[idx]; - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } -int grib_accessor_class_data_jpeg2000_packing_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_jpeg2000_packing_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { - grib_accessor_data_jpeg2000_packing_t* self = (grib_accessor_data_jpeg2000_packing_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); size_t size = 0, i = 0; double* values = NULL; int err = 0; double reference_value = 0; long bits_per_value = 0; - if ((err = grib_get_long_internal(hand, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(hand, reference_value_, &reference_value)) != GRIB_SUCCESS) return err; /* Special case of constant field */ @@ -527,15 +518,15 @@ int grib_accessor_class_data_jpeg2000_packing_t::unpack_double_element_set(grib_ if (index_array[i] > size) return GRIB_INVALID_ARGUMENT; } - values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); + values = (double*)grib_context_malloc_clear(context_, size * sizeof(double)); err = grib_get_double_array(hand, "codedValues", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } for (i = 0; i < len; i++) { val_array[i] = values[index_array[i]]; } - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } diff --git a/src/accessor/grib_accessor_class_data_jpeg2000_packing.h b/src/accessor/grib_accessor_class_data_jpeg2000_packing.h index 54dcc457c..9afcc183b 100644 --- a/src/accessor/grib_accessor_class_data_jpeg2000_packing.h +++ b/src/accessor/grib_accessor_class_data_jpeg2000_packing.h @@ -15,28 +15,25 @@ class grib_accessor_data_jpeg2000_packing_t : public grib_accessor_data_simple_packing_t { public: - /* Members defined in data_jpeg2000_packing */ - const char* type_of_compression_used; - const char* target_compression_ratio; - const char* ni; - const char* nj; - const char* list_defining_points; - const char* number_of_data_points; - const char* scanning_mode; - int jpeg_lib; - const char* dump_jpg; -}; - -class grib_accessor_class_data_jpeg2000_packing_t : public grib_accessor_class_data_simple_packing_t -{ -public: - grib_accessor_class_data_jpeg2000_packing_t(const char* name) : grib_accessor_class_data_simple_packing_t(name) {} + grib_accessor_data_jpeg2000_packing_t() : + grib_accessor_data_simple_packing_t() { class_name_ = "data_jpeg2000_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_jpeg2000_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; + +private: + const char* type_of_compression_used_ = nullptr; + const char* target_compression_ratio_ = nullptr; + const char* ni_ = nullptr; + const char* nj_ = nullptr; + const char* list_defining_points_ = nullptr; + const char* number_of_data_points_ = nullptr; + const char* scanning_mode_ = nullptr; + int jpeg_lib_ = 0; + const char* dump_jpg_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_png_packing.cc b/src/accessor/grib_accessor_class_data_png_packing.cc index 999722f36..ad024215b 100644 --- a/src/accessor/grib_accessor_class_data_png_packing.cc +++ b/src/accessor/grib_accessor_class_data_png_packing.cc @@ -13,34 +13,31 @@ #define PNG_ANYBITS -grib_accessor_class_data_png_packing_t _grib_accessor_class_data_png_packing{ "data_png_packing" }; -grib_accessor_class* grib_accessor_class_data_png_packing = &_grib_accessor_class_data_png_packing; +grib_accessor_data_png_packing_t _grib_accessor_data_png_packing{}; +grib_accessor* grib_accessor_data_png_packing = &_grib_accessor_data_png_packing; - -void grib_accessor_class_data_png_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_png_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_values_t::init(a, v, args); - grib_accessor_data_png_packing_t* self = (grib_accessor_data_png_packing_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + grib_accessor_values_t::init(v, args); + grib_handle* h = grib_handle_of_accessor(this); - self->number_of_values = grib_arguments_get_name(h, args, self->carg++); - self->reference_value = grib_arguments_get_name(h, args, self->carg++); - self->binary_scale_factor = grib_arguments_get_name(h, args, self->carg++); - self->decimal_scale_factor = grib_arguments_get_name(h, args, self->carg++); - self->bits_per_value = grib_arguments_get_name(h, args, self->carg++); - self->ni = grib_arguments_get_name(h, args, self->carg++); - self->nj = grib_arguments_get_name(h, args, self->carg++); - self->list_defining_points = grib_arguments_get_name(h, args, self->carg++); - self->number_of_data_points = grib_arguments_get_name(h, args, self->carg++); - self->scanning_mode = grib_arguments_get_name(h, args, self->carg++); - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + number_of_values_ = grib_arguments_get_name(h, args, carg_++); + reference_value_ = grib_arguments_get_name(h, args, carg_++); + binary_scale_factor_ = grib_arguments_get_name(h, args, carg_++); + decimal_scale_factor_ = grib_arguments_get_name(h, args, carg_++); + bits_per_value_ = grib_arguments_get_name(h, args, carg_++); + ni_ = grib_arguments_get_name(h, args, carg_++); + nj_ = grib_arguments_get_name(h, args, carg_++); + list_defining_points_ = grib_arguments_get_name(h, args, carg_++); + number_of_data_points_ = grib_arguments_get_name(h, args, carg_++); + scanning_mode_ = grib_arguments_get_name(h, args, carg_++); + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_png_packing_t::value_count(grib_accessor* a, long* n_vals) +int grib_accessor_data_png_packing_t::value_count(long* n_vals) { - grib_accessor_data_png_packing_t* self = (grib_accessor_data_png_packing_t*)a; - *n_vals = 0; - return grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_values, n_vals); + *n_vals = 0; + return grib_get_long_internal(grib_handle_of_accessor(this), number_of_values_, n_vals); } #if HAVE_LIBPNG @@ -81,13 +78,11 @@ static void png_flush_callback(png_structp png) /* Empty */ } -int grib_accessor_class_data_png_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_png_packing_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_png_packing_t* self = (grib_accessor_data_png_packing_t*)a; - int err = GRIB_SUCCESS; int i, j; - size_t buflen = a->byte_count(); + size_t buflen = byte_count(); double bscale = 0; double dscale = 0; unsigned char* buf = NULL; @@ -109,19 +104,19 @@ int grib_accessor_class_data_png_packing_t::unpack_double(grib_accessor* a, doub png_read_callback_data callback_data; - self->dirty = 0; + dirty_ = 0; - err = a->value_count(&nn); + err = value_count(&nn); n_vals = nn; if (err) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(grib_handle_of_accessor(this), reference_value_, &reference_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return err; bscale = codes_power(binary_scale_factor, 2); @@ -140,13 +135,12 @@ int grib_accessor_class_data_png_packing_t::unpack_double(grib_accessor* a, doub return GRIB_SUCCESS; } - buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data; - buf += a->byte_offset(); + buf = (unsigned char*)grib_handle_of_accessor(this)->buffer->data; + buf += byte_offset(); if (png_sig_cmp(buf, 0, 8) != 0) return GRIB_INVALID_MESSAGE; - png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png) { @@ -191,7 +185,6 @@ int grib_accessor_class_data_png_packing_t::unpack_double(grib_accessor* a, doub &compression, &filter); - if (colour == PNG_COLOR_TYPE_RGB) depth = 24; if (colour == PNG_COLOR_TYPE_RGB_ALPHA) @@ -240,12 +233,9 @@ static bool is_constant(const double* values, size_t n_vals) return isConstant; } -int grib_accessor_class_data_png_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_png_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_png_packing_t* self = (grib_accessor_data_png_packing_t*)a; - const char* cclass_name = a->cclass->name; - - int err = GRIB_SUCCESS; + int err = GRIB_SUCCESS; bool is_constant_field = false; int i, j; size_t buflen = 0; @@ -278,22 +268,22 @@ int grib_accessor_class_data_png_packing_t::pack_double(grib_accessor* a, const long list_defining_points; long number_of_data_points; - self->dirty = 1; + dirty_ = 1; n_vals = *len; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(grib_handle_of_accessor(this), reference_value_, &reference_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return err; /* Special case */ if (*len == 0) { - grib_buffer_replace(a, NULL, 0, 1, 1); + grib_buffer_replace(this, NULL, 0, 1, 1); return GRIB_SUCCESS; } @@ -309,41 +299,41 @@ int grib_accessor_class_data_png_packing_t::pack_double(grib_accessor* a, const Assert(val[i] == val[0]); } #endif - if ((err = grib_set_double_internal(grib_handle_of_accessor(a), self->reference_value, val[0])) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(grib_handle_of_accessor(this), reference_value_, val[0])) != GRIB_SUCCESS) return err; { // Make sure we can decode it again double ref = 1e-100; - grib_get_double_internal(grib_handle_of_accessor(a), self->reference_value, &ref); + grib_get_double_internal(grib_handle_of_accessor(this), reference_value_, &ref); if (ref != reference_value) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s %s: %s (ref=%.10e != reference_value=%.10e)", - cclass_name, __func__, self->reference_value, ref, reference_value); + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: %s (ref=%.10e != reference_value=%.10e)", + class_name_, __func__, reference_value_, ref, reference_value); return GRIB_INTERNAL_ERROR; } } - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), self->number_of_values, n_vals)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(grib_handle_of_accessor(this), number_of_values_, n_vals)) != GRIB_SUCCESS) return err; - grib_buffer_replace(a, NULL, 0, 1, 1); + grib_buffer_replace(this, NULL, 0, 1, 1); return GRIB_SUCCESS; } - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->ni, &ni)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), ni_, &ni)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->nj, &nj)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), nj_, &nj)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->scanning_mode, &scanning_mode)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), scanning_mode_, &scanning_mode)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->list_defining_points, &list_defining_points)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), list_defining_points_, &list_defining_points)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_data_points, &number_of_data_points)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), number_of_data_points_, &number_of_data_points)) != GRIB_SUCCESS) return err; width = ni; @@ -369,9 +359,9 @@ int grib_accessor_class_data_png_packing_t::pack_double(grib_accessor* a, const } if (width * height != *len) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: width=%ld height=%ld len=%ld. width*height should equal len!", - cclass_name, __func__, (long)width, (long)height, (long)*len); + class_name_, __func__, (long)width, (long)height, (long)*len); /* ECC-802: We cannot bomb out here as the user might have changed Ni/Nj and the packingType * but has not yet submitted the new data values. So len will be out of sync! * So issue a warning but proceed. @@ -392,26 +382,27 @@ int grib_accessor_class_data_png_packing_t::pack_double(grib_accessor* a, const min *= d; max *= d; - if (grib_get_nearest_smaller_value(grib_handle_of_accessor(a), self->reference_value, min, &reference_value) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Unable to find nearest_smaller_value of %g for %s", min, self->reference_value); + if (grib_get_nearest_smaller_value(grib_handle_of_accessor(this), reference_value_, min, &reference_value) != GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, + "Unable to find nearest_smaller_value of %g for %s", min, reference_value_); return GRIB_INTERNAL_ERROR; } if (reference_value > min) { - grib_context_log(a->context, GRIB_LOG_ERROR, "reference_value=%g min_value=%g diff=%g", + grib_context_log(context_, GRIB_LOG_ERROR, "reference_value=%g min_value=%g diff=%g", reference_value, min, reference_value - min); return GRIB_INTERNAL_ERROR; } binary_scale_factor = grib_get_binary_scale_fact(max, reference_value, bits_per_value, &err); + if (err) return err; divisor = codes_power(-binary_scale_factor, 2); #ifndef PNG_ANYBITS Assert(bits_per_value % 8 == 0); #endif bits8 = (bits_per_value + 7) / 8 * 8; - encoded = (unsigned char*)grib_context_buffer_malloc_clear(a->context, bits8 / 8 * n_vals); + encoded = (unsigned char*)grib_context_buffer_malloc_clear(context_, bits8 / 8 * n_vals); if (!encoded) { err = GRIB_OUT_OF_MEMORY; goto cleanup; @@ -430,38 +421,38 @@ int grib_accessor_class_data_png_packing_t::pack_double(grib_accessor* a, const } } /* buflen = n_vals*(bits_per_value/8); */ - grib_context_log(a->context, GRIB_LOG_DEBUG, - "grib_accessor_data_png_packing_t : pack_double : packing %s, %d values", a->name, n_vals); - buf = (unsigned char*)grib_context_buffer_malloc_clear(a->context, buflen); + grib_context_log(context_, GRIB_LOG_DEBUG, + "grib_accessor_data_png_packing_t : pack_double : packing %s, %d values", name_, n_vals); + buf = (unsigned char*)grib_context_buffer_malloc_clear(context_, buflen); if (!buf) { err = GRIB_OUT_OF_MEMORY; goto cleanup; } - if ((err = grib_set_double_internal(grib_handle_of_accessor(a), self->reference_value, reference_value)) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(grib_handle_of_accessor(this), reference_value_, reference_value)) != GRIB_SUCCESS) return err; { // Make sure we can decode it again double ref = 1e-100; - grib_get_double_internal(grib_handle_of_accessor(a), self->reference_value, &ref); + grib_get_double_internal(grib_handle_of_accessor(this), reference_value_, &ref); if (ref != reference_value) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s %s: %s (ref=%.10e != reference_value=%.10e)", - cclass_name, __func__, self->reference_value, ref, reference_value); + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: %s (ref=%.10e != reference_value=%.10e)", + class_name_, __func__, reference_value_, ref, reference_value); return GRIB_INTERNAL_ERROR; } } - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(grib_handle_of_accessor(this), binary_scale_factor_, binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(grib_handle_of_accessor(this), decimal_scale_factor_, decimal_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->ni, &ni)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), ni_, &ni)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->nj, &nj)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), nj_, &nj)) != GRIB_SUCCESS) return err; png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); @@ -507,7 +498,7 @@ int grib_accessor_class_data_png_packing_t::pack_double(grib_accessor* a, const /*bytes=bit_depth/8;*/ bytes = bits8 / 8; - rows = (png_bytepp)grib_context_buffer_malloc_clear(a->context, sizeof(png_bytep) * height); + rows = (png_bytepp)grib_context_buffer_malloc_clear(context_, sizeof(png_bytep) * height); if (!rows) { err = GRIB_OUT_OF_MEMORY; goto cleanup; @@ -522,36 +513,35 @@ int grib_accessor_class_data_png_packing_t::pack_double(grib_accessor* a, const Assert(callback_data.offset <= callback_data.length); - grib_buffer_replace(a, buf, callback_data.offset, 1, 1); + grib_buffer_replace(this, buf, callback_data.offset, 1, 1); cleanup: if (png) png_destroy_write_struct(&png, info ? &info : NULL); - grib_context_buffer_free(a->context, buf); - grib_context_buffer_free(a->context, encoded); - grib_context_buffer_free(a->context, rows); + grib_context_buffer_free(context_, buf); + grib_context_buffer_free(context_, encoded); + grib_context_buffer_free(context_, rows); if (err == GRIB_SUCCESS) - err = grib_set_long_internal(grib_handle_of_accessor(a), self->number_of_values, *len); + err = grib_set_long_internal(grib_handle_of_accessor(this), number_of_values_, *len); return err; } -int grib_accessor_class_data_png_packing_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_png_packing_t::unpack_double_element(size_t idx, double* val) { /* The index idx relates to codedValues NOT values! */ - grib_accessor_data_png_packing_t* self = (grib_accessor_data_png_packing_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int err = 0; - size_t size = 0; - double reference_value = 0; - long bits_per_value = 0; - double* values = NULL; + grib_handle* hand = grib_handle_of_accessor(this); + int err = 0; + size_t size = 0; + double reference_value = 0; + long bits_per_value = 0; + double* values = NULL; - if ((err = grib_get_long_internal(hand, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(hand, reference_value_, &reference_value)) != GRIB_SUCCESS) return err; /* Special case of constant field */ @@ -563,31 +553,30 @@ int grib_accessor_class_data_png_packing_t::unpack_double_element(grib_accessor* if (err) return err; if (idx > size) return GRIB_INVALID_ARGUMENT; - values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); + values = (double*)grib_context_malloc_clear(context_, size * sizeof(double)); err = grib_get_double_array(hand, "codedValues", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } *val = values[idx]; - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } -int grib_accessor_class_data_png_packing_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_png_packing_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { /* The index idx relates to codedValues NOT values! */ - grib_accessor_data_png_packing_t* self = (grib_accessor_data_png_packing_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int err = 0; + grib_handle* hand = grib_handle_of_accessor(this); + int err = 0; size_t size = 0, i = 0; double reference_value = 0; long bits_per_value = 0; double* values = NULL; - if ((err = grib_get_long_internal(hand, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(hand, reference_value_, &reference_value)) != GRIB_SUCCESS) return err; /* Special case of constant field */ @@ -598,7 +587,7 @@ int grib_accessor_class_data_png_packing_t::unpack_double_element_set(grib_acces return GRIB_SUCCESS; } - err = grib_get_size(grib_handle_of_accessor(a), "codedValues", &size); + err = grib_get_size(grib_handle_of_accessor(this), "codedValues", &size); if (err) return err; @@ -606,16 +595,16 @@ int grib_accessor_class_data_png_packing_t::unpack_double_element_set(grib_acces if (index_array[i] > size) return GRIB_INVALID_ARGUMENT; } - values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); - err = grib_get_double_array(grib_handle_of_accessor(a), "codedValues", values, &size); + values = (double*)grib_context_malloc_clear(context_, size * sizeof(double)); + err = grib_get_double_array(grib_handle_of_accessor(this), "codedValues", values, &size); if (err) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return err; } for (i = 0; i < len; i++) { val_array[i] = values[index_array[i]]; } - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } @@ -627,24 +616,24 @@ static void print_error_feature_not_enabled(grib_context* c) "PNG support not enabled. Please rebuild with -DENABLE_PNG=ON"); } -int grib_accessor_class_data_png_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_png_packing_t::unpack_double(double* val, size_t* len) { - print_error_feature_not_enabled(a->context); + print_error_feature_not_enabled(context_); return GRIB_FUNCTIONALITY_NOT_ENABLED; } -int grib_accessor_class_data_png_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_png_packing_t::pack_double(const double* val, size_t* len) { - print_error_feature_not_enabled(a->context); + print_error_feature_not_enabled(context_); return GRIB_FUNCTIONALITY_NOT_ENABLED; } -int grib_accessor_class_data_png_packing_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_png_packing_t::unpack_double_element(size_t idx, double* val) { - print_error_feature_not_enabled(a->context); + print_error_feature_not_enabled(context_); return GRIB_FUNCTIONALITY_NOT_ENABLED; } -int grib_accessor_class_data_png_packing_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_png_packing_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { - print_error_feature_not_enabled(a->context); + print_error_feature_not_enabled(context_); return GRIB_FUNCTIONALITY_NOT_ENABLED; } diff --git a/src/accessor/grib_accessor_class_data_png_packing.h b/src/accessor/grib_accessor_class_data_png_packing.h index 841ed9d31..d47bc8726 100644 --- a/src/accessor/grib_accessor_class_data_png_packing.h +++ b/src/accessor/grib_accessor_class_data_png_packing.h @@ -15,27 +15,25 @@ class grib_accessor_data_png_packing_t : public grib_accessor_values_t { public: - const char* number_of_values; - const char* reference_value; - const char* binary_scale_factor; - const char* decimal_scale_factor; - const char* bits_per_value; - const char* ni; - const char* nj; - const char* list_defining_points; - const char* number_of_data_points; - const char* scanning_mode; -}; - -class grib_accessor_class_data_png_packing_t : public grib_accessor_class_values_t -{ -public: - grib_accessor_class_data_png_packing_t(const char* name) : grib_accessor_class_values_t(name) {} + grib_accessor_data_png_packing_t() : + grib_accessor_values_t() { class_name_ = "data_png_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_png_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; + +private: + const char* number_of_values_ = nullptr; + const char* reference_value_ = nullptr; + const char* binary_scale_factor_ = nullptr; + const char* decimal_scale_factor_ = nullptr; + const char* bits_per_value_ = nullptr; + const char* ni_ = nullptr; + const char* nj_ = nullptr; + const char* list_defining_points_ = nullptr; + const char* number_of_data_points_ = nullptr; + const char* scanning_mode_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_raw_packing.cc b/src/accessor/grib_accessor_class_data_raw_packing.cc index 8cf92e0a9..916029045 100644 --- a/src/accessor/grib_accessor_class_data_raw_packing.cc +++ b/src/accessor/grib_accessor_class_data_raw_packing.cc @@ -11,45 +11,41 @@ #include "grib_accessor_class_data_raw_packing.h" #include "grib_ieeefloat.h" -grib_accessor_class_data_raw_packing_t _grib_accessor_class_data_raw_packing{ "data_raw_packing" }; -grib_accessor_class* grib_accessor_class_data_raw_packing = &_grib_accessor_class_data_raw_packing; +grib_accessor_data_raw_packing_t _grib_accessor_data_raw_packing{}; +grib_accessor* grib_accessor_data_raw_packing = &_grib_accessor_data_raw_packing; - -void grib_accessor_class_data_raw_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_raw_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_values_t::init(a, v, args); - grib_accessor_data_raw_packing_t* self = (grib_accessor_data_raw_packing_t*)a; + grib_accessor_values_t::init(v, args); - self->number_of_values = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->precision = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + number_of_values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + precision_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, carg_++); + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_raw_packing_t::value_count(grib_accessor* a, long* n_vals) +int grib_accessor_data_raw_packing_t::value_count(long* n_vals) { - grib_accessor_data_raw_packing_t* self = (grib_accessor_data_raw_packing_t*)a; - *n_vals = 0; - return grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_values, n_vals); + *n_vals = 0; + return grib_get_long_internal(grib_handle_of_accessor(this), number_of_values_, n_vals); } -int grib_accessor_class_data_raw_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_raw_packing_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_raw_packing_t* self = (grib_accessor_data_raw_packing_t*)a; - unsigned char* buf = NULL; - int bytes = 0; - size_t nvals = 0; - long inlen = a->byte_count(); - long precision = 0; + unsigned char* buf = NULL; + int bytes = 0; + size_t nvals = 0; + long inlen = byte_count(); + long precision = 0; int code = GRIB_SUCCESS; - if ((code = grib_get_long(grib_handle_of_accessor(a), self->precision, &precision)) != GRIB_SUCCESS) + if ((code = grib_get_long(grib_handle_of_accessor(this), precision_, &precision)) != GRIB_SUCCESS) return code; - self->dirty = 0; + dirty_ = 0; - buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data; - buf += a->byte_offset(); + buf = (unsigned char*)grib_handle_of_accessor(this)->buffer->data; + buf += byte_offset(); switch (precision) { case 1: bytes = 4; @@ -66,17 +62,15 @@ int grib_accessor_class_data_raw_packing_t::unpack_double(grib_accessor* a, doub if (*len < nvals) return GRIB_ARRAY_TOO_SMALL; - code = grib_ieee_decode_array(a->context, buf, nvals, bytes, val); + code = grib_ieee_decode_array(context_, buf, nvals, bytes, val); *len = nvals; return code; } -int grib_accessor_class_data_raw_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_raw_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_raw_packing_t* self = (grib_accessor_data_raw_packing_t*)a; - int bytes = 0; unsigned char* buffer = NULL; @@ -95,10 +89,10 @@ int grib_accessor_class_data_raw_packing_t::pack_double(grib_accessor* a, const if (*len == 0) return GRIB_NO_VALUES; - if ((code = grib_get_long_internal(grib_handle_of_accessor(a), self->precision, &precision)) != GRIB_SUCCESS) + if ((code = grib_get_long_internal(grib_handle_of_accessor(this), precision_, &precision)) != GRIB_SUCCESS) return code; - self->dirty = 1; + dirty_ = 1; switch (precision) { case 1: @@ -116,14 +110,14 @@ int grib_accessor_class_data_raw_packing_t::pack_double(grib_accessor* a, const bufsize = bytes * inlen; - buffer = (unsigned char*)grib_context_malloc(a->context, bufsize); + buffer = (unsigned char*)grib_context_malloc(context_, bufsize); if (!buffer) { code = GRIB_OUT_OF_MEMORY; goto clean_up; } - code = grib_ieee_encode_array(a->context, values, inlen, bytes, buffer); + code = grib_ieee_encode_array(context_, values, inlen, bytes, buffer); clean_up: /*if (free_buffer) @@ -132,12 +126,12 @@ clean_up: * free(values); */ - grib_buffer_replace(a, buffer, bufsize, 1, 1); + grib_buffer_replace(this, buffer, bufsize, 1, 1); - grib_context_buffer_free(a->context, buffer); + grib_context_buffer_free(context_, buffer); if (code == GRIB_SUCCESS) { - code = grib_set_long(grib_handle_of_accessor(a), self->number_of_values, inlen); + code = grib_set_long(grib_handle_of_accessor(this), number_of_values_, inlen); if (code == GRIB_READ_ONLY) code = 0; } @@ -145,24 +139,23 @@ clean_up: return code; } -int grib_accessor_class_data_raw_packing_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_raw_packing_t::unpack_double_element(size_t idx, double* val) { - int ret = 0; - grib_accessor_data_raw_packing_t* self = (grib_accessor_data_raw_packing_t*)a; - unsigned char* buf = NULL; - int bytes = 0; - size_t nvals = 0; - long inlen = a->byte_count(); - long pos = 0; - long precision = 0; + int ret = 0; + unsigned char* buf = NULL; + int bytes = 0; + size_t nvals = 0; + long inlen = byte_count(); + long pos = 0; + long precision = 0; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->precision, &precision)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), precision_, &precision)) != GRIB_SUCCESS) return ret; - self->dirty = 0; + dirty_ = 0; - buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data; - buf += a->byte_offset(); + buf = (unsigned char*)grib_handle_of_accessor(this)->buffer->data; + buf += byte_offset(); switch (precision) { case 1: bytes = 4; @@ -183,17 +176,17 @@ int grib_accessor_class_data_raw_packing_t::unpack_double_element(grib_accessor* nvals = 1; buf += pos; - ret = grib_ieee_decode_array(a->context, buf, nvals, bytes, val); + ret = grib_ieee_decode_array(context_, buf, nvals, bytes, val); return ret; } -int grib_accessor_class_data_raw_packing_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_raw_packing_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { int err = 0; size_t i = 0; for (i = 0; i < len; ++i) { - if ((err = unpack_double_element(a, index_array[i], val_array + i)) != GRIB_SUCCESS) + if ((err = unpack_double_element(index_array[i], val_array + i)) != GRIB_SUCCESS) return err; } return GRIB_SUCCESS; diff --git a/src/accessor/grib_accessor_class_data_raw_packing.h b/src/accessor/grib_accessor_class_data_raw_packing.h index b84650f28..708436a83 100644 --- a/src/accessor/grib_accessor_class_data_raw_packing.h +++ b/src/accessor/grib_accessor_class_data_raw_packing.h @@ -15,20 +15,17 @@ class grib_accessor_data_raw_packing_t : public grib_accessor_values_t { public: - /* Members defined in data_raw_packing */ - const char* number_of_values; - const char* precision; -}; - -class grib_accessor_class_data_raw_packing_t : public grib_accessor_class_values_t -{ -public: - grib_accessor_class_data_raw_packing_t(const char* name) : grib_accessor_class_values_t(name) {} + grib_accessor_data_raw_packing_t() : + grib_accessor_values_t() { class_name_ = "data_raw_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_raw_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; + +private: + const char* number_of_values_ = nullptr; + const char* precision_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_run_length_packing.cc b/src/accessor/grib_accessor_class_data_run_length_packing.cc index 5a9ae0e9b..6f550ce29 100644 --- a/src/accessor/grib_accessor_class_data_run_length_packing.cc +++ b/src/accessor/grib_accessor_class_data_run_length_packing.cc @@ -11,37 +11,32 @@ #include "grib_accessor_class_data_run_length_packing.h" #include "grib_scaling.h" -grib_accessor_class_data_run_length_packing_t _grib_accessor_class_data_run_length_packing{ "data_run_length_packing" }; -grib_accessor_class* grib_accessor_class_data_run_length_packing = &_grib_accessor_class_data_run_length_packing; +grib_accessor_data_run_length_packing_t _grib_accessor_data_run_length_packing{}; +grib_accessor* grib_accessor_data_run_length_packing = &_grib_accessor_data_run_length_packing; - -void grib_accessor_class_data_run_length_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_run_length_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_values_t::init(a, v, args); - grib_accessor_data_run_length_packing_t* self = (grib_accessor_data_run_length_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); - self->number_of_values = grib_arguments_get_name(gh, args, self->carg++); - self->bits_per_value = grib_arguments_get_name(gh, args, self->carg++); - self->max_level_value = grib_arguments_get_name(gh, args, self->carg++); - self->number_of_level_values = grib_arguments_get_name(gh, args, self->carg++); - self->decimal_scale_factor = grib_arguments_get_name(gh, args, self->carg++); - self->level_values = grib_arguments_get_name(gh, args, self->carg++); - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + grib_accessor_values_t::init(v, args); + grib_handle* gh = grib_handle_of_accessor(this); + number_of_values_ = grib_arguments_get_name(gh, args, carg_++); + bits_per_value_ = grib_arguments_get_name(gh, args, carg_++); + max_level_value_ = grib_arguments_get_name(gh, args, carg_++); + number_of_level_values_ = grib_arguments_get_name(gh, args, carg_++); + decimal_scale_factor_ = grib_arguments_get_name(gh, args, carg_++); + level_values_ = grib_arguments_get_name(gh, args, carg_++); + flags_ |= GRIB_ACCESSOR_FLAG_DATA; } -int grib_accessor_class_data_run_length_packing_t::value_count(grib_accessor* a, long* number_of_values) +int grib_accessor_data_run_length_packing_t::value_count(long* number_of_values) { - grib_accessor_data_run_length_packing_t* self = (grib_accessor_data_run_length_packing_t*)a; - *number_of_values = 0; - return grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_values, number_of_values); + *number_of_values = 0; + return grib_get_long_internal(grib_handle_of_accessor(this), number_of_values_, number_of_values); } -int grib_accessor_class_data_run_length_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_run_length_packing_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_run_length_packing_t* self = (grib_accessor_data_run_length_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; - int err = GRIB_SUCCESS; + grib_handle* gh = grib_handle_of_accessor(this); + int err = GRIB_SUCCESS; long seclen, number_of_values, bits_per_value, max_level_value, number_of_level_values, decimal_scale_factor; long* level_values = NULL; size_t level_values_size = 0; @@ -53,24 +48,24 @@ int grib_accessor_class_data_run_length_packing_t::unpack_double(grib_accessor* unsigned char* buf = NULL; double missingValue = 9999.0; - if ((err = grib_get_long_internal(gh, self->seclen, &seclen)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, seclen_, &seclen)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->number_of_values, &number_of_values)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, number_of_values_, &number_of_values)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->max_level_value, &max_level_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, max_level_value_, &max_level_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->number_of_level_values, &number_of_level_values)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, number_of_level_values_, &number_of_level_values)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return err; if ((err = grib_get_double(gh, "missingValue", &missingValue)) != GRIB_SUCCESS) return err; - level_values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * number_of_level_values); + level_values = (long*)grib_context_malloc_clear(context_, sizeof(long) * number_of_level_values); level_values_size = number_of_level_values; - if ((err = grib_get_long_array_internal(gh, self->level_values, level_values, &level_values_size)) != GRIB_SUCCESS) + if ((err = grib_get_long_array_internal(gh, level_values_, level_values, &level_values_size)) != GRIB_SUCCESS) return err; *len = number_of_values; i = 0; @@ -83,24 +78,24 @@ int grib_accessor_class_data_run_length_packing_t::unpack_double(grib_accessor* } range = (1 << bits_per_value) - 1 - max_level_value; if ((max_level_value <= 0) || (number_of_level_values <= 0) || (max_level_value > number_of_level_values) || (range <= 0)) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: parameters are invalid: max_level_value=%ld(>0, <=number_of_level_values), " "number_of_level_values=%ld(>0, >=max_level_value), range=%ld(>0)", - cclass_name, max_level_value, number_of_level_values, range); + class_name_, max_level_value, number_of_level_values, range); return GRIB_DECODING_ERROR; } if (decimal_scale_factor > 127) { decimal_scale_factor = -(decimal_scale_factor - 128); } level_scale_factor = codes_power(-decimal_scale_factor, 10.0); - levels = (double*)grib_context_malloc_clear(a->context, sizeof(double) * (number_of_level_values + 1)); + levels = (double*)grib_context_malloc_clear(context_, sizeof(double) * (number_of_level_values + 1)); levels[0] = missingValue; for (i = 0; i < number_of_level_values; i++) { levels[i + 1] = level_values[i] * level_scale_factor; } - compressed_values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * number_of_compressed_values); - buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data; - offsetBeforeData = a->byte_offset(); + compressed_values = (long*)grib_context_malloc_clear(context_, sizeof(long) * number_of_compressed_values); + buf = (unsigned char*)grib_handle_of_accessor(this)->buffer->data; + offsetBeforeData = byte_offset(); buf += offsetBeforeData; pos = 0; grib_decode_long_array(buf, &pos, bits_per_value, number_of_compressed_values, compressed_values); @@ -108,10 +103,10 @@ int grib_accessor_class_data_run_length_packing_t::unpack_double(grib_accessor* i = 0; while (i < number_of_compressed_values) { if (compressed_values[i] > max_level_value) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: numberOfValues mismatch: i=%ld, " "compressed_values[i]=%ld, max_level_value=%ld", - cclass_name, i, compressed_values[i], max_level_value); + class_name_, i, compressed_values[i], max_level_value); break; } v = compressed_values[i++]; @@ -123,31 +118,29 @@ int grib_accessor_class_data_run_length_packing_t::unpack_double(grib_accessor* i++; } if (n > number_of_values) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: numberOfValues mismatch: n=%ld, number_of_values=%ld", - cclass_name, n, number_of_values); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: numberOfValues mismatch: n=%ld, number_of_values=%ld", + class_name_, n, number_of_values); break; } for (k = 0; k < n; k++) { val[j++] = levels[v]; } } - grib_context_free(a->context, level_values); - grib_context_free(a->context, levels); - grib_context_free(a->context, compressed_values); + grib_context_free(context_, level_values); + grib_context_free(context_, levels); + grib_context_free(context_, compressed_values); if (j != number_of_values) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: numberOfValues mismatch: j=%ld, number_of_values=%ld", - cclass_name, j, number_of_values); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: numberOfValues mismatch: j=%ld, number_of_values=%ld", + class_name_, j, number_of_values); return GRIB_DECODING_ERROR; } return err; } -int grib_accessor_class_data_run_length_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_run_length_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_run_length_packing_t* self = (grib_accessor_data_run_length_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; - int err = GRIB_SUCCESS; + grib_handle* gh = grib_handle_of_accessor(this); + int err = GRIB_SUCCESS; long number_of_values, bits_per_value, max_level_value, number_of_level_values, decimal_scale_factor; long* level_values = NULL; size_t level_values_size = 0; @@ -157,22 +150,22 @@ int grib_accessor_class_data_run_length_packing_t::pack_double(grib_accessor* a, double missingValue = 9999.0; size_t n_vals = *len; - if ((err = grib_get_long_internal(gh, self->number_of_values, &number_of_values)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, number_of_values_, &number_of_values)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->max_level_value, &max_level_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, max_level_value_, &max_level_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->number_of_level_values, &number_of_level_values)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, number_of_level_values_, &number_of_level_values)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return err; if ((err = grib_get_double(gh, "missingValue", &missingValue)) != GRIB_SUCCESS) return err; if (n_vals != number_of_values) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Parameters are invalid: n_vals=%ld(==number_of_values), number_of_values=%ld(==n_vals)", - cclass_name, n_vals, number_of_values); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Parameters are invalid: n_vals=%ld(==number_of_values), number_of_values=%ld(==n_vals)", + class_name_, n_vals, number_of_values); return GRIB_ENCODING_ERROR; } @@ -181,9 +174,9 @@ int grib_accessor_class_data_run_length_packing_t::pack_double(grib_accessor* a, return GRIB_SUCCESS; } - level_values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * number_of_level_values); + level_values = (long*)grib_context_malloc_clear(context_, sizeof(long) * number_of_level_values); level_values_size = number_of_level_values; - if ((err = grib_get_long_array_internal(gh, self->level_values, level_values, &level_values_size)) != GRIB_SUCCESS) + if ((err = grib_get_long_array_internal(gh, level_values_, level_values, &level_values_size)) != GRIB_SUCCESS) return err; if (decimal_scale_factor > 127) { decimal_scale_factor = -(decimal_scale_factor - 128); @@ -192,20 +185,20 @@ int grib_accessor_class_data_run_length_packing_t::pack_double(grib_accessor* a, missingValueLong = (long)(round(missingValue / level_scale_factor)); for (i = 0; i < number_of_level_values; i++) { if (missingValueLong == level_values[i]) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Parameters are invalid: level_values[%ld]=%ld, missingValueLong=%ld", - cclass_name, i, level_values[i], missingValueLong); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Parameters are invalid: level_values[%ld]=%ld, missingValueLong=%ld", + class_name_, i, level_values[i], missingValueLong); return GRIB_ENCODING_ERROR; } } range = (1 << bits_per_value) - 1 - max_level_value; if ((max_level_value <= 0) || (number_of_level_values <= 0) || (max_level_value > number_of_level_values) || (range <= 0)) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Parameters are invalid: max_level_value=%ld(>0, <=number_of_level_values), " "number_of_level_values=%ld(>0, >=max_level_value), range=%ld(>0)", - cclass_name, max_level_value, number_of_level_values, range); + class_name_, max_level_value, number_of_level_values, range); return GRIB_ENCODING_ERROR; } - buf = (unsigned char*)grib_context_malloc(a->context, 2 * number_of_values); + buf = (unsigned char*)grib_context_malloc(context_, 2 * number_of_values); for (i = 0; i < number_of_values; i++) { k = (long)(round(val[i] / level_scale_factor)); err = GRIB_ENCODING_ERROR; @@ -223,9 +216,9 @@ int grib_accessor_class_data_run_length_packing_t::pack_double(grib_accessor* a, } } if (err != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Values and/or parameters are invalid: val[%ld]=%lf, level_value=%ld, max_level_value=%ld", - cclass_name, i, val[i], k, max_level_value); + class_name_, i, val[i], k, max_level_value); return GRIB_ENCODING_ERROR; } if (i == 0) { @@ -275,8 +268,8 @@ int grib_accessor_class_data_run_length_packing_t::pack_double(grib_accessor* a, } l = k; } - grib_context_free(a->context, level_values); - grib_buffer_replace(a, buf, pos / 8, 1, 1); - grib_context_buffer_free(a->context, buf); + grib_context_free(context_, level_values); + grib_buffer_replace(this, buf, pos / 8, 1, 1); + grib_context_buffer_free(context_, buf); return err; } diff --git a/src/accessor/grib_accessor_class_data_run_length_packing.h b/src/accessor/grib_accessor_class_data_run_length_packing.h index 5a69a7ba0..f13e116eb 100644 --- a/src/accessor/grib_accessor_class_data_run_length_packing.h +++ b/src/accessor/grib_accessor_class_data_run_length_packing.h @@ -15,22 +15,19 @@ class grib_accessor_data_run_length_packing_t : public grib_accessor_values_t { public: - /* Members defined in data_run_length_packing */ - const char* number_of_values; - const char* bits_per_value; - const char* max_level_value; - const char* number_of_level_values; - const char* decimal_scale_factor; - const char* level_values; -}; - -class grib_accessor_class_data_run_length_packing_t : public grib_accessor_class_values_t -{ -public: - grib_accessor_class_data_run_length_packing_t(const char* name) : grib_accessor_class_values_t(name) {} + grib_accessor_data_run_length_packing_t() : + grib_accessor_values_t() { class_name_ = "data_run_length_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_run_length_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* number_of_values_ = nullptr; + const char* bits_per_value_ = nullptr; + const char* max_level_value_ = nullptr; + const char* number_of_level_values_ = nullptr; + const char* decimal_scale_factor_ = nullptr; + const char* level_values_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_secondary_bitmap.cc b/src/accessor/grib_accessor_class_data_secondary_bitmap.cc index 8e8f2b626..705ca6c80 100644 --- a/src/accessor/grib_accessor_class_data_secondary_bitmap.cc +++ b/src/accessor/grib_accessor_class_data_secondary_bitmap.cc @@ -10,31 +10,27 @@ #include "grib_accessor_class_data_secondary_bitmap.h" -grib_accessor_class_data_secondary_bitmap_t _grib_accessor_class_data_secondary_bitmap{ "data_secondary_bitmap" }; -grib_accessor_class* grib_accessor_class_data_secondary_bitmap = &_grib_accessor_class_data_secondary_bitmap; +grib_accessor_data_secondary_bitmap_t _grib_accessor_data_secondary_bitmap{}; +grib_accessor* grib_accessor_data_secondary_bitmap = &_grib_accessor_data_secondary_bitmap; - -void grib_accessor_class_data_secondary_bitmap_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_secondary_bitmap_t::init(const long v, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, v, args); - grib_accessor_data_secondary_bitmap_t* self = (grib_accessor_data_secondary_bitmap_t*)a; - self->primary_bitmap = grib_arguments_get_name(grib_handle_of_accessor(a), args, 0); - self->secondary_bitmap = grib_arguments_get_name(grib_handle_of_accessor(a), args, 1); - self->missing_value = grib_arguments_get_name(grib_handle_of_accessor(a), args, 2); - self->expand_by = grib_arguments_get_name(grib_handle_of_accessor(a), args, 3); + grib_accessor_gen_t::init(v, args); + primary_bitmap_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 0); + secondary_bitmap_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 1); + missing_value_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 2); + expand_by_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 3); - a->length = 0; + length_ = 0; } -void grib_accessor_class_data_secondary_bitmap_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_data_secondary_bitmap_t::dump(grib_dumper* dumper) { - grib_dump_values(dumper, a); + grib_dump_values(dumper, this); } -int grib_accessor_class_data_secondary_bitmap_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_secondary_bitmap_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_secondary_bitmap_t* self = (grib_accessor_data_secondary_bitmap_t*)a; - size_t i = 0; size_t j = 0; size_t k = 0; @@ -47,7 +43,7 @@ int grib_accessor_class_data_secondary_bitmap_t::unpack_double(grib_accessor* a, size_t secondary_len; double* primary_vals; double* secondary_vals; - err = a->value_count(&nn); + err = value_count(&nn); n_vals = nn; if (err) return err; @@ -57,34 +53,34 @@ int grib_accessor_class_data_secondary_bitmap_t::unpack_double(grib_accessor* a, return GRIB_ARRAY_TOO_SMALL; } - if ((err = grib_get_long(grib_handle_of_accessor(a), self->expand_by, &expand_by)) != GRIB_SUCCESS) + if ((err = grib_get_long(grib_handle_of_accessor(this), expand_by_, &expand_by)) != GRIB_SUCCESS) return err; - if ((err = grib_get_size(grib_handle_of_accessor(a), self->primary_bitmap, &primary_len)) != GRIB_SUCCESS) + if ((err = grib_get_size(grib_handle_of_accessor(this), primary_bitmap_, &primary_len)) != GRIB_SUCCESS) return err; - if ((err = grib_get_size(grib_handle_of_accessor(a), self->secondary_bitmap, &secondary_len)) != GRIB_SUCCESS) + if ((err = grib_get_size(grib_handle_of_accessor(this), secondary_bitmap_, &secondary_len)) != GRIB_SUCCESS) return err; - primary_vals = (double*)grib_context_malloc(a->context, primary_len * sizeof(double)); + primary_vals = (double*)grib_context_malloc(context_, primary_len * sizeof(double)); if (!primary_vals) return GRIB_OUT_OF_MEMORY; - secondary_vals = (double*)grib_context_malloc(a->context, secondary_len * sizeof(double)); + secondary_vals = (double*)grib_context_malloc(context_, secondary_len * sizeof(double)); if (!secondary_vals) { - grib_context_free(a->context, primary_vals); + grib_context_free(context_, primary_vals); return GRIB_OUT_OF_MEMORY; } - if ((err = grib_get_double_array_internal(grib_handle_of_accessor(a), self->primary_bitmap, primary_vals, &primary_len)) != GRIB_SUCCESS) { - grib_context_free(a->context, secondary_vals); - grib_context_free(a->context, primary_vals); + if ((err = grib_get_double_array_internal(grib_handle_of_accessor(this), primary_bitmap_, primary_vals, &primary_len)) != GRIB_SUCCESS) { + grib_context_free(context_, secondary_vals); + grib_context_free(context_, primary_vals); return err; } - if ((err = grib_get_double_array_internal(grib_handle_of_accessor(a), self->secondary_bitmap, secondary_vals, &secondary_len)) != GRIB_SUCCESS) { - grib_context_free(a->context, secondary_vals); - grib_context_free(a->context, primary_vals); + if ((err = grib_get_double_array_internal(grib_handle_of_accessor(this), secondary_bitmap_, secondary_vals, &secondary_len)) != GRIB_SUCCESS) { + grib_context_free(context_, secondary_vals); + grib_context_free(context_, primary_vals); return err; } @@ -109,14 +105,14 @@ int grib_accessor_class_data_secondary_bitmap_t::unpack_double(grib_accessor* a, *len = n_vals; - grib_context_free(a->context, primary_vals); - grib_context_free(a->context, secondary_vals); + grib_context_free(context_, primary_vals); + grib_context_free(context_, secondary_vals); return err; } -int grib_accessor_class_data_secondary_bitmap_t::get_native_type(grib_accessor* a) +long grib_accessor_data_secondary_bitmap_t::get_native_type() { // grib_accessor_data_secondary_bitmap_t* self = (grib_accessor_data_secondary_bitmap_t*)a; - // return grib_accessor_get_native_type(grib_find_accessor(grib_handle_of_accessor(a),self->coded_values)); + // return grib_accessor_get_native_type(grib_find_accessor(grib_handle_of_accessor(this),coded_values_ )); return GRIB_TYPE_DOUBLE; } diff --git a/src/accessor/grib_accessor_class_data_secondary_bitmap.h b/src/accessor/grib_accessor_class_data_secondary_bitmap.h index 2b7bccdbc..5d20f61ae 100644 --- a/src/accessor/grib_accessor_class_data_secondary_bitmap.h +++ b/src/accessor/grib_accessor_class_data_secondary_bitmap.h @@ -15,20 +15,17 @@ class grib_accessor_data_secondary_bitmap_t : public grib_accessor_gen_t { public: - /* Members defined in data_secondary_bitmap */ - const char* primary_bitmap; - const char* secondary_bitmap; - const char* missing_value; - const char* expand_by; -}; - -class grib_accessor_class_data_secondary_bitmap_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_data_secondary_bitmap_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_data_secondary_bitmap_t() : + grib_accessor_gen_t() { class_name_ = "data_secondary_bitmap"; } // grib_accessor* create_empty_accessor() override { return new grib_accessor_data_secondary_bitmap_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_double(double* val, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +protected: + const char* primary_bitmap_ = nullptr; + const char* secondary_bitmap_ = nullptr; + const char* missing_value_ = nullptr; + const char* expand_by_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_sh_packed.cc b/src/accessor/grib_accessor_class_data_sh_packed.cc index e1d3044f7..e753b7d07 100644 --- a/src/accessor/grib_accessor_class_data_sh_packed.cc +++ b/src/accessor/grib_accessor_class_data_sh_packed.cc @@ -11,40 +11,36 @@ #include "grib_accessor_class_data_sh_packed.h" #include "grib_scaling.h" -grib_accessor_class_data_sh_packed_t _grib_accessor_class_data_sh_packed{ "data_sh_packed" }; -grib_accessor_class* grib_accessor_class_data_sh_packed = &_grib_accessor_class_data_sh_packed; - +grib_accessor_data_sh_packed_t _grib_accessor_data_sh_packed{}; +grib_accessor* grib_accessor_data_sh_packed = &_grib_accessor_data_sh_packed; typedef unsigned long (*encode_float_proc)(double); typedef double (*decode_float_proc)(unsigned long); -void grib_accessor_class_data_sh_packed_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_sh_packed_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_simple_packing_t::init(a, v, args); - grib_accessor_data_sh_packed_t* self = (grib_accessor_data_sh_packed_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_data_simple_packing_t::init(v, args); + grib_handle* hand = grib_handle_of_accessor(this); - self->GRIBEX_sh_bug_present = grib_arguments_get_name(hand, args, self->carg++); - self->ieee_floats = grib_arguments_get_name(hand, args, self->carg++); - self->laplacianOperatorIsSet = grib_arguments_get_name(hand, args, self->carg++); - self->laplacianOperator = grib_arguments_get_name(hand, args, self->carg++); - self->sub_j = grib_arguments_get_name(hand, args, self->carg++); - self->sub_k = grib_arguments_get_name(hand, args, self->carg++); - self->sub_m = grib_arguments_get_name(hand, args, self->carg++); - self->pen_j = grib_arguments_get_name(hand, args, self->carg++); - self->pen_k = grib_arguments_get_name(hand, args, self->carg++); - self->pen_m = grib_arguments_get_name(hand, args, self->carg++); + GRIBEX_sh_bug_present_ = grib_arguments_get_name(hand, args, carg_++); + ieee_floats_ = grib_arguments_get_name(hand, args, carg_++); + laplacianOperatorIsSet_ = grib_arguments_get_name(hand, args, carg_++); + laplacianOperator_ = grib_arguments_get_name(hand, args, carg_++); + sub_j_ = grib_arguments_get_name(hand, args, carg_++); + sub_k_ = grib_arguments_get_name(hand, args, carg_++); + sub_m_ = grib_arguments_get_name(hand, args, carg_++); + pen_j_ = grib_arguments_get_name(hand, args, carg_++); + pen_k_ = grib_arguments_get_name(hand, args, carg_++); + pen_m_ = grib_arguments_get_name(hand, args, carg_++); - a->flags |= GRIB_ACCESSOR_FLAG_DATA; - a->length = 0; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; + length_ = 0; } -int grib_accessor_class_data_sh_packed_t::value_count(grib_accessor* a, long* count) +int grib_accessor_data_sh_packed_t::value_count(long* count) { - grib_accessor_data_sh_packed_t* self = (grib_accessor_data_sh_packed_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int ret = 0; - const char* cclass_name = a->cclass->name; + grib_handle* hand = grib_handle_of_accessor(this); + int ret = 0; long sub_j = 0; long sub_k = 0; @@ -53,33 +49,31 @@ int grib_accessor_class_data_sh_packed_t::value_count(grib_accessor* a, long* co long pen_k = 0; long pen_m = 0; - if ((ret = grib_get_long_internal(hand, self->sub_j, &sub_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, sub_j_, &sub_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->sub_k, &sub_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, sub_k_, &sub_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->sub_m, &sub_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, sub_m_, &sub_m)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->pen_j, &pen_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, pen_j_, &pen_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->pen_k, &pen_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, pen_k_, &pen_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->pen_m, &pen_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, pen_m_, &pen_m)) != GRIB_SUCCESS) return ret; if (pen_j != pen_k || pen_j != pen_m) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: pen_j=%ld, pen_k=%ld, pen_m=%ld\n", - cclass_name, pen_j, pen_k, pen_m); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: pen_j=%ld, pen_k=%ld, pen_m=%ld\n", + class_name_, pen_j, pen_k, pen_m); return GRIB_DECODING_ERROR; } *count = (pen_j + 1) * (pen_j + 2) - (sub_j + 1) * (sub_j + 2); return ret; } -int grib_accessor_class_data_sh_packed_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_sh_packed_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_sh_packed_t* self = (grib_accessor_data_sh_packed_t*)a; - size_t i = 0; int ret = GRIB_SUCCESS; // long lup = 0; @@ -112,7 +106,7 @@ int grib_accessor_class_data_sh_packed_t::unpack_double(grib_accessor* a, double decode_float_proc decode_float = NULL; n_vals = 0; - err = a->value_count(&n_vals); + err = value_count(&n_vals); if (err) return err; @@ -121,40 +115,40 @@ int grib_accessor_class_data_sh_packed_t::unpack_double(grib_accessor* a, double return GRIB_ARRAY_TOO_SMALL; } - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetdata, &offsetdata)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), offsetdata_, &offsetdata)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(grib_handle_of_accessor(this), reference_value_, &reference_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->GRIBEX_sh_bug_present, &GRIBEX_sh_bug_present)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), GRIBEX_sh_bug_present_, &GRIBEX_sh_bug_present)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->ieee_floats, &ieee_floats)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), ieee_floats_, &ieee_floats)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->laplacianOperator, &laplacianOperator)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(grib_handle_of_accessor(this), laplacianOperator_, &laplacianOperator)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_j, &sub_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), sub_j_, &sub_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_k, &sub_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), sub_k_, &sub_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_m, &sub_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), sub_m_, &sub_m)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->pen_j, &pen_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), pen_j_, &pen_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->pen_k, &pen_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), pen_k_, &pen_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->pen_m, &pen_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), pen_m_, &pen_m)) != GRIB_SUCCESS) return ret; - self->dirty = 0; + dirty_ = 0; switch (ieee_floats) { case 0: @@ -178,7 +172,7 @@ int grib_accessor_class_data_sh_packed_t::unpack_double(grib_accessor* a, double Assert(pen_j == pen_k); Assert(pen_j == pen_m); - buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data; + buf = (unsigned char*)grib_handle_of_accessor(this)->buffer->data; maxv = pen_j + 1; @@ -193,7 +187,7 @@ int grib_accessor_class_data_sh_packed_t::unpack_double(grib_accessor* a, double s = codes_power(binary_scale_factor, 2); d = codes_power(-decimal_scale_factor, 10); - scals = (double*)grib_context_malloc(a->context, maxv * sizeof(double)); + scals = (double*)grib_context_malloc(context_, maxv * sizeof(double)); if (!scals) return GRIB_OUT_OF_MEMORY; scals[0] = 0; @@ -212,7 +206,6 @@ int grib_accessor_class_data_sh_packed_t::unpack_double(grib_accessor* a, double // lup = mmax; if (sub_k >= 0) { for (hcount = 0; hcount < sub_k + 1; hcount++) { - decode_float(grib_decode_unsigned_long(hres, &hpos, 8 * bytes)); decode_float(grib_decode_unsigned_long(hres, &hpos, 8 * bytes)); // lup++; } @@ -242,7 +235,7 @@ int grib_accessor_class_data_sh_packed_t::unpack_double(grib_accessor* a, double Assert(*len >= i); *len = n_vals; - grib_context_free(a->context, scals); + grib_context_free(context_, scals); return ret; } diff --git a/src/accessor/grib_accessor_class_data_sh_packed.h b/src/accessor/grib_accessor_class_data_sh_packed.h index bbe3caafe..db74e60b6 100644 --- a/src/accessor/grib_accessor_class_data_sh_packed.h +++ b/src/accessor/grib_accessor_class_data_sh_packed.h @@ -15,25 +15,22 @@ class grib_accessor_data_sh_packed_t : public grib_accessor_data_simple_packing_t { public: - /* Members defined in data_sh_packed */ - const char* GRIBEX_sh_bug_present; - const char* ieee_floats; - const char* laplacianOperatorIsSet; - const char* laplacianOperator; - const char* sub_j; - const char* sub_k; - const char* sub_m; - const char* pen_j; - const char* pen_k; - const char* pen_m; -}; - -class grib_accessor_class_data_sh_packed_t : public grib_accessor_class_data_simple_packing_t -{ -public: - grib_accessor_class_data_sh_packed_t(const char* name) : grib_accessor_class_data_simple_packing_t(name) {} + grib_accessor_data_sh_packed_t() : + grib_accessor_data_simple_packing_t() { class_name_ = "data_sh_packed"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_sh_packed_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* GRIBEX_sh_bug_present_ = nullptr; + const char* ieee_floats_ = nullptr; + const char* laplacianOperatorIsSet_ = nullptr; + const char* laplacianOperator_ = nullptr; + const char* sub_j_ = nullptr; + const char* sub_k_ = nullptr; + const char* sub_m_ = nullptr; + const char* pen_j_ = nullptr; + const char* pen_k_ = nullptr; + const char* pen_m_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_sh_unpacked.cc b/src/accessor/grib_accessor_class_data_sh_unpacked.cc index 6a95eebb1..6ff72c1b3 100644 --- a/src/accessor/grib_accessor_class_data_sh_unpacked.cc +++ b/src/accessor/grib_accessor_class_data_sh_unpacked.cc @@ -11,62 +11,57 @@ #include "grib_accessor_class_data_sh_unpacked.h" #include "grib_scaling.h" -grib_accessor_class_data_sh_unpacked_t _grib_accessor_class_data_sh_unpacked{ "data_sh_unpacked" }; -grib_accessor_class* grib_accessor_class_data_sh_unpacked = &_grib_accessor_class_data_sh_unpacked; - +grib_accessor_data_sh_unpacked_t _grib_accessor_data_sh_unpacked{}; +grib_accessor* grib_accessor_data_sh_unpacked = &_grib_accessor_data_sh_unpacked; typedef unsigned long (*encode_float_proc)(double); typedef double (*decode_float_proc)(unsigned long); -void grib_accessor_class_data_sh_unpacked_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_sh_unpacked_t::init(const long v, grib_arguments* args) { - grib_accessor_class_data_simple_packing_t::init(a, v, args); - grib_accessor_data_sh_unpacked_t* self = (grib_accessor_data_sh_unpacked_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_data_simple_packing_t::init(v, args); + grib_handle* hand = grib_handle_of_accessor(this); - self->GRIBEX_sh_bug_present = grib_arguments_get_name(hand, args, self->carg++); - self->ieee_floats = grib_arguments_get_name(hand, args, self->carg++); - self->laplacianOperatorIsSet = grib_arguments_get_name(hand, args, self->carg++); - self->laplacianOperator = grib_arguments_get_name(hand, args, self->carg++); - self->sub_j = grib_arguments_get_name(hand, args, self->carg++); - self->sub_k = grib_arguments_get_name(hand, args, self->carg++); - self->sub_m = grib_arguments_get_name(hand, args, self->carg++); - self->pen_j = grib_arguments_get_name(hand, args, self->carg++); - self->pen_k = grib_arguments_get_name(hand, args, self->carg++); - self->pen_m = grib_arguments_get_name(hand, args, self->carg++); + GRIBEX_sh_bug_present_ = grib_arguments_get_name(hand, args, carg_++); + ieee_floats_ = grib_arguments_get_name(hand, args, carg_++); + laplacianOperatorIsSet_ = grib_arguments_get_name(hand, args, carg_++); + laplacianOperator_ = grib_arguments_get_name(hand, args, carg_++); + sub_j_ = grib_arguments_get_name(hand, args, carg_++); + sub_k_ = grib_arguments_get_name(hand, args, carg_++); + sub_m_ = grib_arguments_get_name(hand, args, carg_++); + pen_j_ = grib_arguments_get_name(hand, args, carg_++); + pen_k_ = grib_arguments_get_name(hand, args, carg_++); + pen_m_ = grib_arguments_get_name(hand, args, carg_++); - a->flags |= GRIB_ACCESSOR_FLAG_DATA; - a->length = 0; + flags_ |= GRIB_ACCESSOR_FLAG_DATA; + length_ = 0; } -int grib_accessor_class_data_sh_unpacked_t::value_count(grib_accessor* a, long* count) +int grib_accessor_data_sh_unpacked_t::value_count(long* count) { - grib_accessor_data_sh_unpacked_t* self = (grib_accessor_data_sh_unpacked_t*)a; - int ret = 0; + int ret = 0; long sub_j = 0; long sub_k = 0; long sub_m = 0; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_j, &sub_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), sub_j_, &sub_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_k, &sub_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), sub_k_, &sub_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_m, &sub_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), sub_m_, &sub_m)) != GRIB_SUCCESS) return ret; if (sub_j != sub_k || sub_j != sub_m) { - grib_context_log(a->context, GRIB_LOG_ERROR, "sub_j=%ld, sub_k=%ld, sub_m=%ld\n", sub_j, sub_k, sub_m); + grib_context_log(context_, GRIB_LOG_ERROR, "sub_j=%ld, sub_k=%ld, sub_m=%ld\n", sub_j, sub_k, sub_m); Assert((sub_j == sub_k) && (sub_j == sub_m)); } *count = (sub_j + 1) * (sub_j + 2); return ret; } -int grib_accessor_class_data_sh_unpacked_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_sh_unpacked_t::unpack_double(double* val, size_t* len) { - grib_accessor_data_sh_unpacked_t* self = (grib_accessor_data_sh_unpacked_t*)a; - size_t i = 0; int ret = GRIB_SUCCESS; long hcount = 0; @@ -112,7 +107,7 @@ int grib_accessor_class_data_sh_unpacked_t::unpack_double(grib_accessor* a, doub decode_float_proc decode_float = NULL; n_vals = 0; - err = a->value_count(&n_vals); + err = value_count(&n_vals); if (err) return err; @@ -121,29 +116,29 @@ int grib_accessor_class_data_sh_unpacked_t::unpack_double(grib_accessor* a, doub return GRIB_ARRAY_TOO_SMALL; } - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetdata, &offsetdata)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), offsetdata_, &offsetdata)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->GRIBEX_sh_bug_present, &GRIBEX_sh_bug_present)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), GRIBEX_sh_bug_present_, &GRIBEX_sh_bug_present)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->ieee_floats, &ieee_floats)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), ieee_floats_, &ieee_floats)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_j, &sub_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), sub_j_, &sub_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_k, &sub_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), sub_k_, &sub_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_m, &sub_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), sub_m_, &sub_m)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->pen_j, &pen_j)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), pen_j_, &pen_j)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->pen_k, &pen_k)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), pen_k_, &pen_k)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->pen_m, &pen_m)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), pen_m_, &pen_m)) != GRIB_SUCCESS) return ret; - self->dirty = 0; + dirty_ = 0; switch (ieee_floats) { case 0: @@ -167,7 +162,7 @@ int grib_accessor_class_data_sh_unpacked_t::unpack_double(grib_accessor* a, doub Assert(pen_j == pen_k); Assert(pen_j == pen_m); - buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data; + buf = (unsigned char*)grib_handle_of_accessor(this)->buffer->data; maxv = pen_j + 1; @@ -182,9 +177,9 @@ int grib_accessor_class_data_sh_unpacked_t::unpack_double(grib_accessor* a, doub s = codes_power(binary_scale_factor, 2); d = codes_power(-decimal_scale_factor, 10); - scals = (double*)grib_context_malloc(a->context, maxv * sizeof(double)); + scals = (double*)grib_context_malloc(context_, maxv * sizeof(double)); Assert(scals); - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->laplacianOperator, &laplacianOperator)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(grib_handle_of_accessor(this), laplacianOperator_, &laplacianOperator)) != GRIB_SUCCESS) return ret; scals[0] = 0; @@ -233,7 +228,7 @@ int grib_accessor_class_data_sh_unpacked_t::unpack_double(grib_accessor* a, doub Assert(*len >= i); *len = n_vals; - grib_context_free(a->context, scals); + grib_context_free(context_, scals); return ret; } diff --git a/src/accessor/grib_accessor_class_data_sh_unpacked.h b/src/accessor/grib_accessor_class_data_sh_unpacked.h index 7907b8c68..4d52bd231 100644 --- a/src/accessor/grib_accessor_class_data_sh_unpacked.h +++ b/src/accessor/grib_accessor_class_data_sh_unpacked.h @@ -15,25 +15,22 @@ class grib_accessor_data_sh_unpacked_t : public grib_accessor_data_simple_packing_t { public: - /* Members defined in data_sh_unpacked */ - const char* GRIBEX_sh_bug_present; - const char* ieee_floats; - const char* laplacianOperatorIsSet; - const char* laplacianOperator; - const char* sub_j; - const char* sub_k; - const char* sub_m; - const char* pen_j; - const char* pen_k; - const char* pen_m; -}; - -class grib_accessor_class_data_sh_unpacked_t : public grib_accessor_class_data_simple_packing_t -{ -public: - grib_accessor_class_data_sh_unpacked_t(const char* name) : grib_accessor_class_data_simple_packing_t(name) {} + grib_accessor_data_sh_unpacked_t() : + grib_accessor_data_simple_packing_t() { class_name_ = "data_sh_unpacked"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_data_sh_unpacked_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* GRIBEX_sh_bug_present_ = nullptr; + const char* ieee_floats_ = nullptr; + const char* laplacianOperatorIsSet_ = nullptr; + const char* laplacianOperator_ = nullptr; + const char* sub_j_ = nullptr; + const char* sub_k_ = nullptr; + const char* sub_m_ = nullptr; + const char* pen_j_ = nullptr; + const char* pen_k_ = nullptr; + const char* pen_m_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_shsimple_packing.cc b/src/accessor/grib_accessor_class_data_shsimple_packing.cc index 7f8b60e14..ae909b6c2 100644 --- a/src/accessor/grib_accessor_class_data_shsimple_packing.cc +++ b/src/accessor/grib_accessor_class_data_shsimple_packing.cc @@ -10,46 +10,43 @@ #include "grib_accessor_class_data_shsimple_packing.h" -grib_accessor_class_data_shsimple_packing_t _grib_accessor_class_data_shsimple_packing{ "data_shsimple_packing" }; -grib_accessor_class* grib_accessor_class_data_shsimple_packing = &_grib_accessor_class_data_shsimple_packing; +grib_accessor_data_shsimple_packing_t _grib_accessor_data_shsimple_packing{}; +grib_accessor* grib_accessor_data_shsimple_packing = &_grib_accessor_data_shsimple_packing; - -void grib_accessor_class_data_shsimple_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_shsimple_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, v, args); - grib_accessor_data_shsimple_packing_t* self = (grib_accessor_data_shsimple_packing_t*)a; + grib_accessor_gen_t::init(v, args); - self->coded_values = grib_arguments_get_name(grib_handle_of_accessor(a), args, 0); - self->real_part = grib_arguments_get_name(grib_handle_of_accessor(a), args, 1); - a->flags |= GRIB_ACCESSOR_FLAG_DATA; + coded_values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 0); + real_part_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 1); + flags_ |= GRIB_ACCESSOR_FLAG_DATA; - a->length = 0; + length_ = 0; } -void grib_accessor_class_data_shsimple_packing_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_data_shsimple_packing_t::dump(grib_dumper* dumper) { - grib_dump_values(dumper, a); + grib_dump_values(dumper, this); } -int grib_accessor_class_data_shsimple_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_shsimple_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_shsimple_packing_t* self = (grib_accessor_data_shsimple_packing_t*)a; - int err = GRIB_SUCCESS; + int err = GRIB_SUCCESS; size_t coded_n_vals = *len - 1; size_t n_vals = *len; - self->dirty = 1; + dirty_ = 1; if (*len == 0) return GRIB_NO_VALUES; - if ((err = grib_set_double_internal(grib_handle_of_accessor(a), self->real_part, *val)) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(grib_handle_of_accessor(this), real_part_, *val)) != GRIB_SUCCESS) return err; val++; - if ((err = grib_set_double_array_internal(grib_handle_of_accessor(a), self->coded_values, val, coded_n_vals)) != GRIB_SUCCESS) + if ((err = grib_set_double_array_internal(grib_handle_of_accessor(this), coded_values_, val, coded_n_vals)) != GRIB_SUCCESS) return err; *len = n_vals; @@ -57,7 +54,7 @@ int grib_accessor_class_data_shsimple_packing_t::pack_double(grib_accessor* a, c return err; } -int grib_accessor_class_data_shsimple_packing_t::get_native_type(grib_accessor* a) +long grib_accessor_data_shsimple_packing_t::get_native_type() { return GRIB_TYPE_DOUBLE; } diff --git a/src/accessor/grib_accessor_class_data_shsimple_packing.h b/src/accessor/grib_accessor_class_data_shsimple_packing.h index 1c5b909e5..b722dcbf1 100644 --- a/src/accessor/grib_accessor_class_data_shsimple_packing.h +++ b/src/accessor/grib_accessor_class_data_shsimple_packing.h @@ -15,19 +15,15 @@ class grib_accessor_data_shsimple_packing_t : public grib_accessor_gen_t { public: - /* Members defined in data_shsimple_packing */ - const char* coded_values; - const char* real_part; - int dirty; -}; - -class grib_accessor_class_data_shsimple_packing_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_data_shsimple_packing_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_data_shsimple_packing_t() : + grib_accessor_gen_t() { class_name_ = "data_shsimple_packing"; } // grib_accessor* create_empty_accessor() override { return new grib_accessor_data_shsimple_packing_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +protected: + const char* coded_values_ = nullptr; + const char* real_part_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_data_simple_packing.cc b/src/accessor/grib_accessor_class_data_simple_packing.cc index 591e89526..355067b25 100644 --- a/src/accessor/grib_accessor_class_data_simple_packing.cc +++ b/src/accessor/grib_accessor_class_data_simple_packing.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -15,26 +14,24 @@ #include #include -grib_accessor_class_data_simple_packing_t _grib_accessor_class_data_simple_packing{ "data_simple_packing" }; -grib_accessor_class* grib_accessor_class_data_simple_packing = &_grib_accessor_class_data_simple_packing; +grib_accessor_data_simple_packing_t _grib_accessor_data_simple_packing{}; +grib_accessor* grib_accessor_data_simple_packing = &_grib_accessor_data_simple_packing; - -void grib_accessor_class_data_simple_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_data_simple_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_values_t::init(a, v, args); - grib_accessor_data_simple_packing_t* self = (grib_accessor_data_simple_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); - self->units_factor = grib_arguments_get_name(gh, args, self->carg++); - self->units_bias = grib_arguments_get_name(gh, args, self->carg++); - self->changing_precision = grib_arguments_get_name(gh, args, self->carg++); - self->number_of_values = grib_arguments_get_name(gh, args, self->carg++); - self->bits_per_value = grib_arguments_get_name(gh, args, self->carg++); - self->reference_value = grib_arguments_get_name(gh, args, self->carg++); - self->binary_scale_factor = grib_arguments_get_name(gh, args, self->carg++); - self->decimal_scale_factor = grib_arguments_get_name(gh, args, self->carg++); - self->optimize_scaling_factor = grib_arguments_get_name(gh, args, self->carg++); - a->flags |= GRIB_ACCESSOR_FLAG_DATA; - self->dirty = 1; + grib_accessor_values_t::init(v, args); + grib_handle* gh = grib_handle_of_accessor(this); + units_factor_ = grib_arguments_get_name(gh, args, carg_++); + units_bias_ = grib_arguments_get_name(gh, args, carg_++); + changing_precision_ = grib_arguments_get_name(gh, args, carg_++); + number_of_values_ = grib_arguments_get_name(gh, args, carg_++); + bits_per_value_ = grib_arguments_get_name(gh, args, carg_++); + reference_value_ = grib_arguments_get_name(gh, args, carg_++); + binary_scale_factor_ = grib_arguments_get_name(gh, args, carg_++); + decimal_scale_factor_ = grib_arguments_get_name(gh, args, carg_++); + optimize_scaling_factor_ = grib_arguments_get_name(gh, args, carg_++); + flags_ |= GRIB_ACCESSOR_FLAG_DATA; + dirty_ = 1; } static const unsigned long nbits[32] = { @@ -61,48 +58,44 @@ static int number_of_bits(unsigned long x, long* result) return GRIB_SUCCESS; } -int grib_accessor_class_data_simple_packing_t::value_count(grib_accessor* a, long* number_of_values) +int grib_accessor_data_simple_packing_t::value_count(long* number_of_values) { - grib_accessor_data_simple_packing_t* self = (grib_accessor_data_simple_packing_t*)a; *number_of_values = 0; - return grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_values, number_of_values); + return grib_get_long_internal(grib_handle_of_accessor(this), number_of_values_, number_of_values); } -int grib_accessor_class_data_simple_packing_t::unpack_double_element(grib_accessor* a, size_t idx, double* val) +int grib_accessor_data_simple_packing_t::unpack_double_element(size_t idx, double* val) { - grib_accessor_data_simple_packing_t* self = (grib_accessor_data_simple_packing_t*)a; - const char* cclass_name = a->cclass->name; - - long n_vals = 0; - int err = 0; - grib_handle* gh = grib_handle_of_accessor(a); + long n_vals = 0; + int err = 0; + grib_handle* gh = grib_handle_of_accessor(this); double reference_value; long binary_scale_factor; long bits_per_value; long decimal_scale_factor; unsigned char* buf = (unsigned char*)gh->buffer->data; - double s = 0; - double d = 0; - long pos = 0; + double s = 0; + double d = 0; + long pos = 0; - err = a->value_count(&n_vals); + err = value_count(&n_vals); if (err) return err; - if ((err = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; - self->dirty = 0; + dirty_ = 0; - if ((err = grib_get_double_internal(gh, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(gh, reference_value_, &reference_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return err; /* Special case */ @@ -115,17 +108,17 @@ int grib_accessor_class_data_simple_packing_t::unpack_double_element(grib_access s = codes_power(binary_scale_factor, 2); d = codes_power(-decimal_scale_factor, 10); - grib_context_log(a->context, GRIB_LOG_DEBUG, + grib_context_log(context_, GRIB_LOG_DEBUG, "%s: %s: creating %s, %ld values (idx=%zu)", - cclass_name, __func__, a->name, n_vals, idx); + class_name_, __func__, name_, n_vals, idx); - buf += a->byte_offset(); + buf += byte_offset(); /*Assert(((bits_per_value*n_vals)/8) < (1<<29));*/ /* See GRIB-787 */ if (bits_per_value % 8) { - grib_context_log(a->context, GRIB_LOG_DEBUG, + grib_context_log(context_, GRIB_LOG_DEBUG, "%s: calling outline function : bpv %ld, rv: %g, bsf: %ld, dsf: %ld ", - cclass_name, bits_per_value, reference_value, binary_scale_factor, decimal_scale_factor); + class_name_, bits_per_value, reference_value, binary_scale_factor, decimal_scale_factor); pos = idx * bits_per_value; *val = (double)(((grib_decode_unsigned_long(buf, &pos, bits_per_value) * s) + reference_value) * d); /* val[i] = grib_decode_unsigned_long(buf, &pos, bits_per_value); */ @@ -151,26 +144,24 @@ int grib_accessor_class_data_simple_packing_t::unpack_double_element(grib_access return err; } -int grib_accessor_class_data_simple_packing_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_data_simple_packing_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { int err = 0; size_t i = 0; for (i = 0; i < len; ++i) { - if ((err = unpack_double_element(a, index_array[i], val_array + i)) != GRIB_SUCCESS) + if ((err = unpack_double_element(index_array[i], val_array + i)) != GRIB_SUCCESS) return err; } return GRIB_SUCCESS; } template -static int unpack(grib_accessor* a, T* val, size_t* len) +int grib_accessor_data_simple_packing_t::unpack(T* val, size_t* len) { static_assert(std::is_floating_point::value, "Requires floating point numbers"); - grib_accessor_data_simple_packing_t* self = (grib_accessor_data_simple_packing_t*)a; - const char* cclass_name = a->cclass->name; - grib_handle* gh = grib_handle_of_accessor(a); - unsigned char* buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data; + grib_handle* gh = grib_handle_of_accessor(this); + unsigned char* buf = (unsigned char*)grib_handle_of_accessor(this)->buffer->data; size_t i = 0; int err = 0; @@ -188,7 +179,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len) double units_factor = 1.0; double units_bias = 0.0; - err = a->value_count(&count); + err = value_count(&count); if (err) return err; n_vals = count; @@ -198,7 +189,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return GRIB_ARRAY_TOO_SMALL; } - if ((err = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; /* @@ -209,14 +200,14 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return GRIB_INVALID_BPV; } - if (self->units_factor && - (grib_get_double_internal(gh, self->units_factor, &units_factor) == GRIB_SUCCESS)) { - grib_set_double_internal(gh, self->units_factor, 1.0); + if (units_factor_ && + (grib_get_double_internal(gh, units_factor_, &units_factor) == GRIB_SUCCESS)) { + grib_set_double_internal(gh, units_factor_, 1.0); } - if (self->units_bias && - (grib_get_double_internal(gh, self->units_bias, &units_bias) == GRIB_SUCCESS)) { - grib_set_double_internal(gh, self->units_bias, 0.0); + if (units_bias_ && + (grib_get_double_internal(gh, units_bias_, &units_bias) == GRIB_SUCCESS)) { + grib_set_double_internal(gh, units_bias_, 0.0); } if (n_vals == 0) { @@ -224,15 +215,15 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return GRIB_SUCCESS; } - self->dirty = 0; + dirty_ = 0; - if ((err = grib_get_double_internal(gh, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(gh, reference_value_, &reference_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return err; /* Special case */ @@ -247,26 +238,26 @@ static int unpack(grib_accessor* a, T* val, size_t* len) s = codes_power(binary_scale_factor, 2); d = codes_power(-decimal_scale_factor, 10); - grib_context_log(a->context, GRIB_LOG_DEBUG, - "%s %s: Creating %s, %zu values", cclass_name, __func__, a->name, n_vals); + grib_context_log(context_, GRIB_LOG_DEBUG, + "%s %s: Creating %s, %zu values", class_name_, __func__, name_, n_vals); - offsetBeforeData = a->byte_offset(); + offsetBeforeData = byte_offset(); buf += offsetBeforeData; /*Assert(((bits_per_value*n_vals)/8) < (1<<29));*/ /* See GRIB-787 */ /* ECC-941 */ - if (!a->context->ieee_packing) { + if (!context_->ieee_packing) { /* Must turn off this check when the environment variable ECCODES_GRIB_IEEE_PACKING is on */ long offsetAfterData = 0; err = grib_get_long(gh, "offsetAfterData", &offsetAfterData); if (!err && offsetAfterData > offsetBeforeData) { const long valuesSize = (bits_per_value * n_vals) / 8; /*in bytes*/ if (offsetBeforeData + valuesSize > offsetAfterData) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Data section size mismatch: " "offset before data=%ld, offset after data=%ld (num values=%zu, bits per value=%ld)", - cclass_name, offsetBeforeData, offsetAfterData, n_vals, bits_per_value); + class_name_, offsetBeforeData, offsetAfterData, n_vals, bits_per_value); return GRIB_DECODING_ERROR; } } @@ -279,9 +270,9 @@ static int unpack(grib_accessor* a, T* val, size_t* len) // } } - grib_context_log(a->context, GRIB_LOG_DEBUG, + grib_context_log(context_, GRIB_LOG_DEBUG, "%s %s: calling outline function: bpv: %ld, rv: %g, bsf: %ld, dsf: %ld", - cclass_name, __func__, bits_per_value, reference_value, binary_scale_factor, decimal_scale_factor); + class_name_, __func__, bits_per_value, reference_value, binary_scale_factor, decimal_scale_factor); grib_decode_array(buf, &pos, bits_per_value, reference_value, s, d, n_vals, val); *len = (long)n_vals; @@ -306,21 +297,20 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return err; } -int grib_accessor_class_data_simple_packing_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_data_simple_packing_t::unpack_double(double* val, size_t* len) { - return unpack(a, val, len); + return unpack(val, len); } -int grib_accessor_class_data_simple_packing_t::unpack_float(grib_accessor* a, float* val, size_t* len) +int grib_accessor_data_simple_packing_t::unpack_float(float* val, size_t* len) { - return unpack(a, val, len); + return unpack(val, len); } -static int _unpack_double(grib_accessor* a, double* val, size_t* len, unsigned char* buf, long pos, size_t n_vals) +int grib_accessor_data_simple_packing_t::_unpack_double(double* val, size_t* len, unsigned char* buf, long pos, size_t n_vals) { - grib_accessor_data_simple_packing_t* self = (grib_accessor_data_simple_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; + grib_accessor_data_simple_packing_t* self = (grib_accessor_data_simple_packing_t*)this; + grib_handle* gh = grib_handle_of_accessor(this); size_t i = 0; int err = 0; @@ -340,7 +330,7 @@ static int _unpack_double(grib_accessor* a, double* val, size_t* len, unsigned c return GRIB_ARRAY_TOO_SMALL; } - if ((err = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, self->bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; /* @@ -351,14 +341,14 @@ static int _unpack_double(grib_accessor* a, double* val, size_t* len, unsigned c return GRIB_INVALID_BPV; } - if (self->units_factor && - (grib_get_double_internal(gh, self->units_factor, &units_factor) == GRIB_SUCCESS)) { - grib_set_double_internal(gh, self->units_factor, 1.0); + if (self->units_factor_ && + (grib_get_double_internal(gh, self->units_factor_, &units_factor) == GRIB_SUCCESS)) { + grib_set_double_internal(gh, self->units_factor_, 1.0); } - if (self->units_bias && - (grib_get_double_internal(gh, self->units_bias, &units_bias) == GRIB_SUCCESS)) { - grib_set_double_internal(gh, self->units_bias, 0.0); + if (self->units_bias_ && + (grib_get_double_internal(gh, self->units_bias_, &units_bias) == GRIB_SUCCESS)) { + grib_set_double_internal(gh, self->units_bias_, 0.0); } if (n_vals == 0) { @@ -366,15 +356,15 @@ static int _unpack_double(grib_accessor* a, double* val, size_t* len, unsigned c return GRIB_SUCCESS; } - self->dirty = 0; + dirty_ = 0; - if ((err = grib_get_double_internal(gh, self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(gh, self->reference_value_, &reference_value)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, self->binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, self->decimal_scale_factor_, &decimal_scale_factor)) != GRIB_SUCCESS) return err; /* Special case */ @@ -389,23 +379,23 @@ static int _unpack_double(grib_accessor* a, double* val, size_t* len, unsigned c s = codes_power(binary_scale_factor, 2); d = codes_power(-decimal_scale_factor, 10); - grib_context_log(a->context, GRIB_LOG_DEBUG, - "%s %s: Creating %s, %zu values", cclass_name, __func__, a->name, n_vals); + grib_context_log(context_, GRIB_LOG_DEBUG, + "%s %s: Creating %s, %zu values", class_name_, __func__, name_, n_vals); - offsetBeforeData = a->byte_offset(); + offsetBeforeData = byte_offset(); buf += offsetBeforeData; /*Assert(((bits_per_value*n_vals)/8) < (1<<29));*/ /* See GRIB-787 */ /* ECC-941 */ - if (!a->context->ieee_packing) { + if (!context_->ieee_packing) { /* Must turn off this check when the environment variable ECCODES_GRIB_IEEE_PACKING is on */ long offsetAfterData = 0; err = grib_get_long(gh, "offsetAfterData", &offsetAfterData); if (!err && offsetAfterData > offsetBeforeData) { const long valuesSize = (bits_per_value * n_vals) / 8; /*in bytes*/ if (offsetBeforeData + valuesSize > offsetAfterData) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "Data section size mismatch: offset before data=%ld, offset after data=%ld (num values=%ld, bits per value=%ld)", offsetBeforeData, offsetAfterData, n_vals, bits_per_value); return GRIB_DECODING_ERROR; @@ -421,7 +411,7 @@ static int _unpack_double(grib_accessor* a, double* val, size_t* len, unsigned c // } } - grib_context_log(a->context, GRIB_LOG_DEBUG, + grib_context_log(context_, GRIB_LOG_DEBUG, "unpack_double: calling outline function : bpv %d, rv : %g, sf : %d, dsf : %d ", bits_per_value, reference_value, binary_scale_factor, decimal_scale_factor); grib_decode_array(buf, &pos, bits_per_value, reference_value, s, d, n_vals, val); @@ -443,31 +433,27 @@ static int _unpack_double(grib_accessor* a, double* val, size_t* len, unsigned c return err; } -int grib_accessor_class_data_simple_packing_t::unpack_double_subarray(grib_accessor* a, double* val, size_t start, size_t len) +int grib_accessor_data_simple_packing_t::unpack_double_subarray(double* val, size_t start, size_t len) { - grib_accessor_data_simple_packing_t* self = (grib_accessor_data_simple_packing_t*)a; - - unsigned char* buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data; - size_t nvals = len; - size_t* plen = &len; + unsigned char* buf = (unsigned char*)grib_handle_of_accessor(this)->buffer->data; + size_t nvals = len; + size_t* plen = &len; long bits_per_value = 0; - long pos = 0; - int err = GRIB_SUCCESS; + long pos = 0; + int err = GRIB_SUCCESS; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->bits_per_value, &bits_per_value)) != + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; buf += (start * bits_per_value) / 8; pos = start * bits_per_value % 8; - return _unpack_double(a, val, plen, buf, pos, nvals); + return _unpack_double(val, plen, buf, pos, nvals); } -int grib_accessor_class_data_simple_packing_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_data_simple_packing_t::pack_double(const double* val, size_t* len) { - grib_accessor_data_simple_packing_t* self = (grib_accessor_data_simple_packing_t*)a; - grib_handle* gh = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; + grib_handle* gh = grib_handle_of_accessor(this); size_t i = 0; size_t n_vals = *len; @@ -487,7 +473,7 @@ int grib_accessor_class_data_simple_packing_t::pack_double(grib_accessor* a, con double range = 0; double minrange = 0, maxrange = 0; long changing_precision = 0; - grib_context* c = a->context; + grib_context* c = context_; decimal_scale_factor = 0; @@ -495,15 +481,15 @@ int grib_accessor_class_data_simple_packing_t::pack_double(grib_accessor* a, con return GRIB_NO_VALUES; } - if ((err = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, bits_per_value_, &bits_per_value)) != GRIB_SUCCESS) return err; if (*len == 0) return GRIB_SUCCESS; - if ((err = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor_get)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, decimal_scale_factor_, &decimal_scale_factor_get)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->optimize_scaling_factor, &optimize_scaling_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, optimize_scaling_factor_, &optimize_scaling_factor)) != GRIB_SUCCESS) return err; /* check we don't encode bpv > max(ulong)-1 as it is not currently supported by the algorithm */ @@ -511,7 +497,7 @@ int grib_accessor_class_data_simple_packing_t::pack_double(grib_accessor* a, con return GRIB_INVALID_BPV; } - self->dirty = 1; + dirty_ = 1; max = val[0]; min = max; @@ -529,34 +515,34 @@ int grib_accessor_class_data_simple_packing_t::pack_double(grib_accessor* a, con /* constant field only reference_value is set and bits_per_value=0 */ if (max == min) { int large_constant_fields = 0; - if (grib_get_nearest_smaller_value(gh, self->reference_value, val[0], &reference_value) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to find nearest_smaller_value of %g for %s", min, self->reference_value); + if (grib_get_nearest_smaller_value(gh, reference_value_, val[0], &reference_value) != GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to find nearest_smaller_value of %g for %s", min, reference_value_); return GRIB_INTERNAL_ERROR; } - if ((err = grib_set_double_internal(gh, self->reference_value, reference_value)) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(gh, reference_value_, reference_value)) != GRIB_SUCCESS) return err; { /* Make sure we can decode it again */ double ref = 1e-100; - grib_get_double_internal(gh, self->reference_value, &ref); + grib_get_double_internal(gh, reference_value_, &ref); if (ref != reference_value) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s %s: %s (ref=%.10e != reference_value=%.10e)", - cclass_name, __func__, self->reference_value, ref, reference_value); + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: %s (ref=%.10e != reference_value=%.10e)", + class_name_, __func__, reference_value_, ref, reference_value); return GRIB_INTERNAL_ERROR; } } - large_constant_fields = grib_producing_large_constant_fields(gh, self->edition); + large_constant_fields = grib_producing_large_constant_fields(gh, edition_); if (large_constant_fields) { - if ((err = grib_set_long_internal(gh, self->binary_scale_factor, 0)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, binary_scale_factor_, 0)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->decimal_scale_factor, 0)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, decimal_scale_factor_, 0)) != GRIB_SUCCESS) return err; if (bits_per_value == 0) { - if ((err = grib_set_long_internal(gh, self->bits_per_value, 16)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, bits_per_value_, 16)) != GRIB_SUCCESS) return err; } @@ -564,29 +550,29 @@ int grib_accessor_class_data_simple_packing_t::pack_double(grib_accessor* a, con } else { bits_per_value = 0; - if ((err = grib_set_long_internal(gh, self->bits_per_value, bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, bits_per_value_, bits_per_value)) != GRIB_SUCCESS) return err; return GRIB_CONSTANT_FIELD; } } - if ((err = grib_get_long_internal(gh, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, binary_scale_factor_, &binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(gh, self->changing_precision, &changing_precision)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(gh, changing_precision_, &changing_precision)) != GRIB_SUCCESS) return err; /* the packing parameters are not properly defined, this is a safe way of fixing the problem */ if (changing_precision == 0 && bits_per_value == 0 && decimal_scale_factor_get == 0) { - grib_context_log(a->context, GRIB_LOG_WARNING, + grib_context_log(context_, GRIB_LOG_WARNING, "%s==0 and %s==0 (setting %s=24)", - self->bits_per_value, - self->decimal_scale_factor, - self->bits_per_value); + bits_per_value_, + decimal_scale_factor_, + bits_per_value_); bits_per_value = 24; - if ((err = grib_set_long_internal(gh, self->bits_per_value, bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, bits_per_value_, bits_per_value)) != GRIB_SUCCESS) return err; } @@ -602,38 +588,38 @@ int grib_accessor_class_data_simple_packing_t::pack_double(grib_accessor* a, con /* See GRIB-540 for why we use ceil */ err = number_of_bits((unsigned long)ceil(fabs(max - min)), &bits_per_value); if (err) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: Range of values too large. Try a smaller value for decimal precision (less than %ld)", - cclass_name, __func__, decimal_scale_factor); + class_name_, __func__, decimal_scale_factor); return err; } - if ((err = grib_set_long_internal(gh, self->bits_per_value, bits_per_value)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, bits_per_value_, bits_per_value)) != GRIB_SUCCESS) return err; - if (grib_get_nearest_smaller_value(gh, self->reference_value, min, &reference_value) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Unable to find nearest_smaller_value of %g for %s", min, self->reference_value); + if (grib_get_nearest_smaller_value(gh, reference_value_, min, &reference_value) != GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, + "Unable to find nearest_smaller_value of %g for %s", min, reference_value_); return GRIB_INTERNAL_ERROR; } /* divisor=1; */ } else { int last = 127; /* 'last' should be a parameter coming from a definitions file */ - if (c->gribex_mode_on && self->edition == 1) + if (c->gribex_mode_on && edition_ == 1) last = 99; /* bits_per_value is given and decimal_scale_factor and binary_scale_factor are calcualated */ if (max == min) { binary_scale_factor = 0; /* divisor=1; */ - if (grib_get_nearest_smaller_value(gh, self->reference_value, min, &reference_value) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Unable to find nearest_smaller_value of %g for %s", min, self->reference_value); + if (grib_get_nearest_smaller_value(gh, reference_value_, min, &reference_value) != GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, + "Unable to find nearest_smaller_value of %g for %s", min, reference_value_); return GRIB_INTERNAL_ERROR; } } else if (optimize_scaling_factor) { - int compat_gribex = c->gribex_mode_on && self->edition == 1; - if ((err = grib_optimize_decimal_factor(a, self->reference_value, + int compat_gribex = c->gribex_mode_on && edition_ == 1; + if ((err = grib_optimize_decimal_factor(this, reference_value_, max, min, bits_per_value, compat_gribex, 1, &decimal_scale_factor, &binary_scale_factor, &reference_value)) != GRIB_SUCCESS) @@ -664,9 +650,9 @@ int grib_accessor_class_data_simple_packing_t::pack_double(grib_accessor* a, con range = (max - min); } - if (grib_get_nearest_smaller_value(gh, self->reference_value, + if (grib_get_nearest_smaller_value(gh, reference_value_, min, &reference_value) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to find nearest_smaller_value of %g for %s", min, self->reference_value); + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to find nearest_smaller_value of %g for %s", min, reference_value_); return GRIB_INTERNAL_ERROR; } @@ -675,13 +661,13 @@ int grib_accessor_class_data_simple_packing_t::pack_double(grib_accessor* a, con } } - if ((err = grib_set_double_internal(gh, self->reference_value, reference_value)) != GRIB_SUCCESS) + if ((err = grib_set_double_internal(gh, reference_value_, reference_value)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->changing_precision, 0)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, changing_precision_, 0)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->binary_scale_factor, binary_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, binary_scale_factor_, binary_scale_factor)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(gh, self->decimal_scale_factor, decimal_scale_factor)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(gh, decimal_scale_factor_, decimal_scale_factor)) != GRIB_SUCCESS) return err; return GRIB_SUCCESS; diff --git a/src/accessor/grib_accessor_class_data_simple_packing.h b/src/accessor/grib_accessor_class_data_simple_packing.h index e1c9da33c..6fa71b324 100644 --- a/src/accessor/grib_accessor_class_data_simple_packing.h +++ b/src/accessor/grib_accessor_class_data_simple_packing.h @@ -16,30 +16,31 @@ class grib_accessor_data_simple_packing_t : public grib_accessor_values_t { public: - /* Members defined in data_simple_packing */ - int edition; - const char* units_factor; - const char* units_bias; - const char* changing_precision; - const char* number_of_values; - const char* bits_per_value; - const char* reference_value; - const char* binary_scale_factor; - const char* decimal_scale_factor; - const char* optimize_scaling_factor; -}; + grib_accessor_data_simple_packing_t() : + grib_accessor_values_t() { class_name_ = "data_simple_packing"; } + //grib_accessor* create_empty_accessor() override { return new grib_accessor_data_simple_packing_t{}; } + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; + int unpack_double_subarray(double* val, size_t start, size_t len) override; -class grib_accessor_class_data_simple_packing_t : public grib_accessor_class_values_t -{ -public: - grib_accessor_class_data_simple_packing_t(const char* name) : grib_accessor_class_values_t(name) {} - // grib_accessor* create_empty_accessor() override { return new grib_accessor_data_simple_packing_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; - int unpack_double_subarray(grib_accessor*, double* val, size_t start, size_t len) override; +protected: + int edition_ = 0; + const char* units_factor_ = nullptr; + const char* units_bias_ = nullptr; + const char* changing_precision_ = nullptr; + const char* number_of_values_ = nullptr; + const char* bits_per_value_ = nullptr; + const char* reference_value_ = nullptr; + const char* binary_scale_factor_ = nullptr; + const char* decimal_scale_factor_ = nullptr; + const char* optimize_scaling_factor_ = nullptr; + +private: + template int unpack(T* val, size_t* len); + int _unpack_double(double* val, size_t* len, unsigned char* buf, long pos, size_t n_vals); }; diff --git a/src/accessor/grib_accessor_class_decimal_precision.cc b/src/accessor/grib_accessor_class_decimal_precision.cc index 05d156ad1..cff70e669 100644 --- a/src/accessor/grib_accessor_class_decimal_precision.cc +++ b/src/accessor/grib_accessor_class_decimal_precision.cc @@ -10,57 +10,52 @@ #include "grib_accessor_class_decimal_precision.h" -grib_accessor_class_decimal_precision_t _grib_accessor_class_decimal_precision{ "decimal_precision" }; -grib_accessor_class* grib_accessor_class_decimal_precision = &_grib_accessor_class_decimal_precision; +grib_accessor_decimal_precision_t _grib_accessor_decimal_precision{}; +grib_accessor* grib_accessor_decimal_precision = &_grib_accessor_decimal_precision; - -void grib_accessor_class_decimal_precision_t::init(grib_accessor* a, const long l, grib_arguments* args) +void grib_accessor_decimal_precision_t::init(const long l, grib_arguments* args) { - grib_accessor_class_long_t::init(a, l, args); - grib_accessor_decimal_precision_t* self = (grib_accessor_decimal_precision_t*)a; - + grib_accessor_long_t::init(l, args); int n = 0; - self->bits_per_value = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->decimal_scale_factor = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->changing_precision = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + bits_per_value_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + decimal_scale_factor_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + changing_precision_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -int grib_accessor_class_decimal_precision_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_decimal_precision_t::unpack_long(long* val, size_t* len) { - grib_accessor_decimal_precision_t* self = (grib_accessor_decimal_precision_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + int ret = 0; + grib_handle* h = grib_handle_of_accessor(this); - int ret = GRIB_SUCCESS; - if ((ret = grib_get_long_internal(h, self->decimal_scale_factor, val)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, decimal_scale_factor_, val)) != GRIB_SUCCESS) return ret; *len = 1; return ret; } -int grib_accessor_class_decimal_precision_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_decimal_precision_t::pack_long(const long* val, size_t* len) { - grib_accessor_decimal_precision_t* self = (grib_accessor_decimal_precision_t*)a; - long bitsPerValue = 0; double* values = NULL; size_t size = 0; int ret = 0; - grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + grib_context* c = context_; + grib_handle* h = grib_handle_of_accessor(this); - if (!self->values) { - if ((ret = grib_set_long_internal(h, self->bits_per_value, 0)) != GRIB_SUCCESS) + if (!values_) { + if ((ret = grib_set_long_internal(h, bits_per_value_, 0)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(h, self->decimal_scale_factor, *val)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, decimal_scale_factor_, *val)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(h, self->changing_precision, 1)) != GRIB_SUCCESS) { + if ((ret = grib_set_long_internal(h, changing_precision_, 1)) != GRIB_SUCCESS) { grib_context_free(c, values); return ret; } @@ -68,34 +63,34 @@ int grib_accessor_class_decimal_precision_t::pack_long(grib_accessor* a, const l return GRIB_SUCCESS; } - if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) return ret; values = (double*)grib_context_malloc(c, size * sizeof(double)); if (!values) return GRIB_OUT_OF_MEMORY; - if ((ret = grib_get_double_array_internal(h, self->values, values, &size)) != GRIB_SUCCESS) { + if ((ret = grib_get_double_array_internal(h, values_, values, &size)) != GRIB_SUCCESS) { grib_context_buffer_free(c, values); return ret; } - if ((ret = grib_set_long_internal(h, self->decimal_scale_factor, *val)) != GRIB_SUCCESS) { + if ((ret = grib_set_long_internal(h, decimal_scale_factor_, *val)) != GRIB_SUCCESS) { grib_context_buffer_free(c, values); return ret; } - if ((ret = grib_set_long_internal(h, self->bits_per_value, bitsPerValue)) != GRIB_SUCCESS) { + if ((ret = grib_set_long_internal(h, bits_per_value_, bitsPerValue)) != GRIB_SUCCESS) { grib_context_free(c, values); return ret; } - if ((ret = grib_set_long_internal(h, self->changing_precision, 1)) != GRIB_SUCCESS) { + if ((ret = grib_set_long_internal(h, changing_precision_, 1)) != GRIB_SUCCESS) { grib_context_free(c, values); return ret; } - if ((ret = grib_set_double_array_internal(h, self->values, values, size)) != GRIB_SUCCESS) { + if ((ret = grib_set_double_array_internal(h, values_, values, size)) != GRIB_SUCCESS) { grib_context_buffer_free(c, values); return ret; } diff --git a/src/accessor/grib_accessor_class_decimal_precision.h b/src/accessor/grib_accessor_class_decimal_precision.h index a6b6d4839..d86677589 100644 --- a/src/accessor/grib_accessor_class_decimal_precision.h +++ b/src/accessor/grib_accessor_class_decimal_precision.h @@ -15,19 +15,16 @@ class grib_accessor_decimal_precision_t : public grib_accessor_long_t { public: - /* Members defined in decimal_precision */ - const char* values; - const char* bits_per_value; - const char* changing_precision; - const char* decimal_scale_factor; -}; - -class grib_accessor_class_decimal_precision_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_decimal_precision_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_decimal_precision_t() : + grib_accessor_long_t() { class_name_ = "decimal_precision"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_decimal_precision_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; + const char* bits_per_value_ = nullptr; + const char* changing_precision_ = nullptr; + const char* decimal_scale_factor_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_dictionary.cc b/src/accessor/grib_accessor_class_dictionary.cc index c5667e43a..04086c416 100644 --- a/src/accessor/grib_accessor_class_dictionary.cc +++ b/src/accessor/grib_accessor_class_dictionary.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,30 +10,26 @@ #include "grib_accessor_class_dictionary.h" -grib_accessor_class_dictionary_t _grib_accessor_class_dictionary{ "dictionary" }; -grib_accessor_class* grib_accessor_class_dictionary = &_grib_accessor_class_dictionary; +grib_accessor_dictionary_t _grib_accessor_dictionary{}; +grib_accessor* grib_accessor_dictionary = &_grib_accessor_dictionary; - -void grib_accessor_class_dictionary_t::init(grib_accessor* a, const long len, grib_arguments* params) +void grib_accessor_dictionary_t::init(const long len, grib_arguments* params) { - grib_accessor_class_gen_t::init(a, len, params); - int n = 0; - grib_accessor_dictionary_t* self = (grib_accessor_dictionary_t*)a; + grib_accessor_gen_t::init(len, params); + int n = 0; - self->dictionary = grib_arguments_get_string(grib_handle_of_accessor(a), params, n++); - self->key = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - self->column = grib_arguments_get_long(grib_handle_of_accessor(a), params, n++); - self->masterDir = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - self->localDir = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); + dictionary_ = grib_arguments_get_string(grib_handle_of_accessor(this), params, n++); + key_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + column_ = grib_arguments_get_long(grib_handle_of_accessor(this), params, n++); + masterDir_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + localDir_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -static grib_trie* load_dictionary(grib_accessor* a, int* err) +grib_trie* grib_accessor_dictionary_t::load_dictionary(int* err) { - grib_accessor_dictionary_t* self = (grib_accessor_dictionary_t*)a; - char* filename = NULL; char line[1024] = {0,}; char key[1024] = {0,}; @@ -47,33 +42,33 @@ static grib_trie* load_dictionary(grib_accessor* a, int* err) grib_trie* dictionary = NULL; FILE* f = NULL; int i = 0; - grib_handle* h = grib_handle_of_accessor(a); - grib_context* c = a->context; + grib_handle* h = grib_handle_of_accessor(this); + grib_context* c = context_; *err = GRIB_SUCCESS; len = 1024; - if (self->masterDir != NULL) - grib_get_string(h, self->masterDir, masterDir, &len); + if (masterDir_ != NULL) + grib_get_string(h, masterDir_, masterDir, &len); len = 1024; - if (self->localDir != NULL) - grib_get_string(h, self->localDir, localDir, &len); + if (localDir_ != NULL) + grib_get_string(h, localDir_, localDir, &len); if (*masterDir != 0) { char name[2048] = {0,}; char recomposed[2048] = {0,}; - snprintf(name, sizeof(name), "%s/%s", masterDir, self->dictionary); + snprintf(name, sizeof(name), "%s/%s", masterDir, dictionary_); grib_recompose_name(h, NULL, name, recomposed, 0); filename = grib_context_full_defs_path(c, recomposed); } else { - filename = grib_context_full_defs_path(c, self->dictionary); + filename = grib_context_full_defs_path(c, dictionary_); } if (*localDir != 0) { char localName[2048] = {0,}; char localRecomposed[1024] = {0,}; - snprintf(localName, sizeof(localName), "%s/%s", localDir, self->dictionary); + snprintf(localName, sizeof(localName), "%s/%s", localDir, dictionary_); grib_recompose_name(h, NULL, localName, localRecomposed, 0); localFilename = grib_context_full_defs_path(c, localRecomposed); snprintf(dictName, sizeof(dictName), "%s:%s", localFilename, filename); @@ -83,7 +78,7 @@ static grib_trie* load_dictionary(grib_accessor* a, int* err) } if (!filename) { - grib_context_log(c, GRIB_LOG_ERROR, "Unable to find def file %s", self->dictionary); + grib_context_log(c, GRIB_LOG_ERROR, "Unable to find def file %s", dictionary_); *err = GRIB_FILE_NOT_FOUND; return NULL; } @@ -92,11 +87,11 @@ static grib_trie* load_dictionary(grib_accessor* a, int* err) } dictionary = (grib_trie*)grib_trie_get(c->lists, dictName); if (dictionary) { - grib_context_log(c, GRIB_LOG_DEBUG, "using dictionary %s from cache", self->dictionary); + grib_context_log(c, GRIB_LOG_DEBUG, "using dictionary %s from cache", dictionary_); return dictionary; } else { - grib_context_log(c, GRIB_LOG_DEBUG, "using dictionary %s from file %s", self->dictionary, filename); + grib_context_log(c, GRIB_LOG_DEBUG, "using dictionary %s from file %s", dictionary_, filename); } f = codes_fopen(filename, "r"); @@ -130,43 +125,43 @@ static grib_trie* load_dictionary(grib_accessor* a, int* err) // return NULL; // } - // while (fgets(line, sizeof(line) - 1, f)) { - // i = 0; - // while (line[i] != '|' && line[i] != 0) { - // key[i] = line[i]; - // i++; - // } - // key[i] = 0; - // list = (char*)grib_context_malloc_clear(c, strlen(line) + 1); - // memcpy(list, line, strlen(line)); - // grib_trie_insert(dictionary, key, list); + //while (fgets(line, sizeof(line) - 1, f)) { + // i = 0; + // while (line[i] != '|' && line[i] != 0) { + // key[i] = line[i]; + // i++; + // } + // key[i] = 0; + // list = (char*)grib_context_malloc_clear(c, strlen(line) + 1); + // memcpy(list, line, strlen(line)); + // grib_trie_insert(dictionary, key, list); //} + //fclose(f); } grib_trie_insert(c->lists, filename, dictionary); return dictionary; } -void grib_accessor_class_dictionary_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_dictionary_t::dump(grib_dumper* dumper) { - switch (get_native_type(a)) { + switch (get_native_type()) { case GRIB_TYPE_STRING: - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); break; case GRIB_TYPE_LONG: - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); break; case GRIB_TYPE_DOUBLE: - grib_dump_double(dumper, a, NULL); + grib_dump_double(dumper, this, NULL); break; } } -int grib_accessor_class_dictionary_t::unpack_string(grib_accessor* a, char* buffer, size_t* len) +int grib_accessor_dictionary_t::unpack_string(char* buffer, size_t* len) { - grib_accessor_dictionary_t* self = (grib_accessor_dictionary_t*)a; - int err = GRIB_SUCCESS; - char key[1024] = {0,}; + int err = GRIB_SUCCESS; + char key[1024] = {0,}; size_t size = 1024; char* list = NULL; char* start = NULL; @@ -174,11 +169,11 @@ int grib_accessor_class_dictionary_t::unpack_string(grib_accessor* a, char* buff size_t rsize = 0; int i = 0; - grib_trie* dictionary = load_dictionary(a, &err); + grib_trie* dictionary = load_dictionary(&err); if (err) return err; - if ((err = grib_get_string_internal(grib_handle_of_accessor(a), self->key, key, &size)) != GRIB_SUCCESS) { + if ((err = grib_get_string_internal(grib_handle_of_accessor(this), key_, key, &size)) != GRIB_SUCCESS) { /* grib_trie_delete(dictionary); */ return err; } @@ -190,7 +185,7 @@ int grib_accessor_class_dictionary_t::unpack_string(grib_accessor* a, char* buff } end = list; - for (i = 0; i <= self->column; i++) { + for (i = 0; i <= column_; i++) { start = end; while (*end != '|' && *end != 0) end++; @@ -217,29 +212,29 @@ int grib_accessor_class_dictionary_t::unpack_string(grib_accessor* a, char* buff return err; } -int grib_accessor_class_dictionary_t::value_count(grib_accessor* a, long* count) +int grib_accessor_dictionary_t::value_count(long* count) { *count = 1; return 0; } -int grib_accessor_class_dictionary_t::get_native_type(grib_accessor* a) +long grib_accessor_dictionary_t::get_native_type() { int type = GRIB_TYPE_DOUBLE; - if (a->flags & GRIB_ACCESSOR_FLAG_LONG_TYPE) + if (flags_ & GRIB_ACCESSOR_FLAG_LONG_TYPE) type = GRIB_TYPE_LONG; - if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) + if (flags_ & GRIB_ACCESSOR_FLAG_STRING_TYPE) type = GRIB_TYPE_STRING; return type; } -int grib_accessor_class_dictionary_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_dictionary_t::unpack_long(long* val, size_t* len) { int err = 0; char buffer[1024] = {0,}; size_t size = 1024; - err = unpack_string(a, buffer, &size); + err = unpack_string(buffer, &size); if (err) return err; @@ -249,13 +244,13 @@ int grib_accessor_class_dictionary_t::unpack_long(grib_accessor* a, long* val, s return GRIB_SUCCESS; } -int grib_accessor_class_dictionary_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_dictionary_t::unpack_double(double* val, size_t* len) { int err = 0; char buffer[1024] = {0,}; size_t size = 1024; - err = unpack_string(a, buffer, &size); + err = unpack_string(buffer, &size); if (err) return err; diff --git a/src/accessor/grib_accessor_class_dictionary.h b/src/accessor/grib_accessor_class_dictionary.h index 8dc976e51..c0096c402 100644 --- a/src/accessor/grib_accessor_class_dictionary.h +++ b/src/accessor/grib_accessor_class_dictionary.h @@ -15,24 +15,23 @@ class grib_accessor_dictionary_t : public grib_accessor_gen_t { public: - /* Members defined in dictionary */ - const char* dictionary; - const char* key; - long column; - const char* masterDir; - const char* localDir; -}; - -class grib_accessor_class_dictionary_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_dictionary_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_dictionary_t() : + grib_accessor_gen_t() { class_name_ = "dictionary"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_dictionary_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* dictionary_ = nullptr; + const char* key_ = nullptr; + long column_ = 0; + const char* masterDir_ = nullptr; + const char* localDir_ = nullptr; + + grib_trie* load_dictionary(int* err); }; diff --git a/src/accessor/grib_accessor_class_dirty.cc b/src/accessor/grib_accessor_class_dirty.cc index 80c51835e..f743957f3 100644 --- a/src/accessor/grib_accessor_class_dirty.cc +++ b/src/accessor/grib_accessor_class_dirty.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,42 +10,39 @@ #include "grib_accessor_class_dirty.h" -grib_accessor_class_dirty_t _grib_accessor_class_dirty{ "dirty" }; -grib_accessor_class* grib_accessor_class_dirty = &_grib_accessor_class_dirty; +grib_accessor_dirty_t _grib_accessor_dirty{}; +grib_accessor* grib_accessor_dirty = &_grib_accessor_dirty; - -void grib_accessor_class_dirty_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_dirty_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_dirty_t* self = (grib_accessor_dirty_t*)a; - self->accessor = grib_arguments_get_name(grib_handle_of_accessor(a), c, 0); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; - a->length = 0; + grib_accessor_long_t::init(l, c); + accessor_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, 0); + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + flags_ |= GRIB_ACCESSOR_FLAG_HIDDEN; + length_ = 0; } -int grib_accessor_class_dirty_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_dirty_t::pack_long(const long* val, size_t* len) { - grib_accessor_dirty_t* self = (grib_accessor_dirty_t*)a; - grib_accessor* x = grib_find_accessor(grib_handle_of_accessor(a), self->accessor); + grib_accessor* x = grib_find_accessor(grib_handle_of_accessor(this), accessor_); + + if (x) + x->dirty_ = *val; - if (x) { - //printf("\ngrib_accessor_class_dirty_t::pack_long: Setting dirty to %ld on %s\n", *val, x->name); - x->dirty = *val; - } return GRIB_SUCCESS; } -int grib_accessor_class_dirty_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_dirty_t::unpack_long(long* val, size_t* len) { - grib_accessor_dirty_t* self = (grib_accessor_dirty_t*)a; - grib_accessor* x = grib_find_accessor(grib_handle_of_accessor(a), self->accessor); + grib_accessor* x = grib_find_accessor(grib_handle_of_accessor(this), accessor_); if (x) { - //printf("\ngrib_accessor_class_dirty_t::unpack_long: Getting dirty for %s\n", x->name); - *val = x->dirty; - } else { + // printf("\ngrib_accessor_class_dirty_t::unpack_long: Getting dirty for %s\n", x->name); + *val = x->dirty_; + } + else { *val = 1; } + return GRIB_SUCCESS; } diff --git a/src/accessor/grib_accessor_class_dirty.h b/src/accessor/grib_accessor_class_dirty.h index b024b69f7..87dbc74c5 100644 --- a/src/accessor/grib_accessor_class_dirty.h +++ b/src/accessor/grib_accessor_class_dirty.h @@ -15,16 +15,13 @@ class grib_accessor_dirty_t : public grib_accessor_long_t { public: - /* Members defined in dirty */ - const char* accessor; -}; - -class grib_accessor_class_dirty_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_dirty_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_dirty_t() : + grib_accessor_long_t() { class_name_ = "dirty"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_dirty_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* accessor_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_divdouble.cc b/src/accessor/grib_accessor_class_divdouble.cc index 49e675230..f590ca3a9 100644 --- a/src/accessor/grib_accessor_class_divdouble.cc +++ b/src/accessor/grib_accessor_class_divdouble.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,34 +10,31 @@ #include "grib_accessor_class_divdouble.h" -grib_accessor_class_divdouble_t _grib_accessor_class_divdouble{ "divdouble" }; -grib_accessor_class* grib_accessor_class_divdouble = &_grib_accessor_class_divdouble; +grib_accessor_divdouble_t _grib_accessor_divdouble{}; +grib_accessor* grib_accessor_divdouble = &_grib_accessor_divdouble; - -void grib_accessor_class_divdouble_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_divdouble_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_divdouble_t* self = (grib_accessor_divdouble_t*)a; + grib_accessor_double_t::init(l, c); int n = 0; - self->val = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->divisor = grib_arguments_get_double(grib_handle_of_accessor(a), c, n++); + val_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + divisor_ = grib_arguments_get_double(grib_handle_of_accessor(this), c, n++); } -int grib_accessor_class_divdouble_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_divdouble_t::unpack_double(double* val, size_t* len) { - const grib_accessor_divdouble_t* self = (grib_accessor_divdouble_t*)a; - int ret = GRIB_SUCCESS; + int ret = GRIB_SUCCESS; double value = 0; - ret = grib_get_double_internal(grib_handle_of_accessor(a), self->val, &value); + ret = grib_get_double_internal(grib_handle_of_accessor(this), val_, &value); if (ret != GRIB_SUCCESS) return ret; - if (self->divisor == 0) { + if (divisor_ == 0) { return GRIB_INVALID_ARGUMENT; } - *val = value / self->divisor; + *val = value / divisor_; *len = 1; return GRIB_SUCCESS; diff --git a/src/accessor/grib_accessor_class_divdouble.h b/src/accessor/grib_accessor_class_divdouble.h index 9408b073a..2366fa5a6 100644 --- a/src/accessor/grib_accessor_class_divdouble.h +++ b/src/accessor/grib_accessor_class_divdouble.h @@ -15,16 +15,13 @@ class grib_accessor_divdouble_t : public grib_accessor_double_t { public: - /* Members defined in divdouble */ - const char* val; - double divisor; -}; - -class grib_accessor_class_divdouble_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_divdouble_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_divdouble_t() : + grib_accessor_double_t() { class_name_ = "divdouble"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_divdouble_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* val_ = nullptr; + double divisor_ = 0.; }; diff --git a/src/accessor/grib_accessor_class_double.cc b/src/accessor/grib_accessor_class_double.cc index 2a78446bc..91b22280d 100644 --- a/src/accessor/grib_accessor_class_double.cc +++ b/src/accessor/grib_accessor_class_double.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,26 +10,24 @@ #include "grib_accessor_class_double.h" -grib_accessor_class_double_t _grib_accessor_class_double{ "double" }; -grib_accessor_class* grib_accessor_class_double = &_grib_accessor_class_double; +grib_accessor_double_t _grib_accessor_double{}; +grib_accessor* grib_accessor_double = &_grib_accessor_double; - -int grib_accessor_class_double_t::get_native_type(grib_accessor* a) +long grib_accessor_double_t::get_native_type() { return GRIB_TYPE_DOUBLE; } -int grib_accessor_class_double_t::unpack_string(grib_accessor* a, char* v, size_t* len) +int grib_accessor_double_t::unpack_string(char* v, size_t* len) { double val = 0; size_t l = 1; char repres[1024]; char format[32] = "%g"; - grib_handle* h = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; + grib_handle* h = grib_handle_of_accessor(this); - a->unpack_double(&val, &l); - if ((val == GRIB_MISSING_DOUBLE) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0)) { + unpack_double(&val, &l); + if ((val == GRIB_MISSING_DOUBLE) && ((flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0)) { snprintf(repres, sizeof(repres), "MISSING"); } else { @@ -42,13 +39,13 @@ int grib_accessor_class_double_t::unpack_string(grib_accessor* a, char* v, size_ l = strlen(repres) + 1; if (l > *len) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, l, *len); + class_name_, name_, l, *len); *len = l; return GRIB_BUFFER_TOO_SMALL; } - grib_context_log(a->context, GRIB_LOG_DEBUG, "grib_accessor_long: Casting double %s to string ", a->name); + grib_context_log(context_, GRIB_LOG_DEBUG, "grib_accessor_long: Casting double %s to string ", name_); *len = l; @@ -56,12 +53,12 @@ int grib_accessor_class_double_t::unpack_string(grib_accessor* a, char* v, size_ return GRIB_SUCCESS; } -void grib_accessor_class_double_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_double_t::dump(grib_dumper* dumper) { - grib_dump_values(dumper, a); + grib_dump_values(dumper, this); } -int grib_accessor_class_double_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_double_t::compare(grib_accessor* b) { int retval = 0; double* aval = 0; @@ -72,7 +69,7 @@ int grib_accessor_class_double_t::compare(grib_accessor* a, grib_accessor* b) long count = 0; int err = 0; - err = a->value_count(&count); + err = value_count(&count); if (err) return err; alen = count; @@ -85,10 +82,10 @@ int grib_accessor_class_double_t::compare(grib_accessor* a, grib_accessor* b) if (alen != blen) return GRIB_COUNT_MISMATCH; - aval = (double*)grib_context_malloc(a->context, alen * sizeof(double)); - bval = (double*)grib_context_malloc(b->context, blen * sizeof(double)); + aval = (double*)grib_context_malloc(context_, alen * sizeof(double)); + bval = (double*)grib_context_malloc(b->context_, blen * sizeof(double)); - a->unpack_double(aval, &alen); + unpack_double(aval, &alen); b->unpack_double(bval, &blen); retval = GRIB_SUCCESS; while (alen != 0) { @@ -97,18 +94,18 @@ int grib_accessor_class_double_t::compare(grib_accessor* a, grib_accessor* b) alen--; } - grib_context_free(a->context, aval); - grib_context_free(b->context, bval); + grib_context_free(context_, aval); + grib_context_free(b->context_, bval); return retval; } -int grib_accessor_class_double_t::pack_missing(grib_accessor* a) +int grib_accessor_double_t::pack_missing() { size_t len = 1; double value = GRIB_MISSING_DOUBLE; - if (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) - return a->pack_double(&value, &len); + if (flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + return pack_double(&value, &len); return GRIB_VALUE_CANNOT_BE_MISSING; } diff --git a/src/accessor/grib_accessor_class_double.h b/src/accessor/grib_accessor_class_double.h index 3bc0ffdcd..cde2e0c50 100644 --- a/src/accessor/grib_accessor_class_double.h +++ b/src/accessor/grib_accessor_class_double.h @@ -12,16 +12,15 @@ #include "grib_accessor_class_gen.h" -class grib_accessor_double_t : public grib_accessor_gen_t {}; - -class grib_accessor_class_double_t : public grib_accessor_class_gen_t +class grib_accessor_double_t : public grib_accessor_gen_t { public: - grib_accessor_class_double_t(const char* name) : grib_accessor_class_gen_t(name) {} - //grib_accessor* create_empty_accessor() override { return new grib_accessor_double_t{}; } - int get_native_type(grib_accessor*) override; - int pack_missing(grib_accessor*) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - int compare(grib_accessor*, grib_accessor*) override; + grib_accessor_double_t() : + grib_accessor_gen_t() { class_name_ = "double"; } + // grib_accessor* create_empty_accessor() override { return new grib_accessor_double_t{}; } + long get_native_type() override; + int pack_missing() override; + int unpack_string(char*, size_t* len) override; + void dump(grib_dumper*) override; + int compare(grib_accessor*) override; }; diff --git a/src/accessor/grib_accessor_class_element.cc b/src/accessor/grib_accessor_class_element.cc index 3d150d79e..ac361dac0 100644 --- a/src/accessor/grib_accessor_class_element.cc +++ b/src/accessor/grib_accessor_class_element.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,19 +10,17 @@ #include "grib_accessor_class_element.h" -grib_accessor_class_element_t _grib_accessor_class_element{"element"}; -grib_accessor_class* grib_accessor_class_element = &_grib_accessor_class_element; +grib_accessor_element_t _grib_accessor_element{}; +grib_accessor* grib_accessor_element = &_grib_accessor_element; - -void grib_accessor_class_element_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_element_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_element_t* self = (grib_accessor_element_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_long_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); - int n = 0; - self->array = grib_arguments_get_name(hand, c, n++); - self->element = grib_arguments_get_long(hand, c, n++); + int n = 0; + array_ = grib_arguments_get_name(hand, c, n++); + element_ = grib_arguments_get_long(hand, c, n++); } static int check_element_index(const char* func, const char* array_name, long index, size_t size) @@ -31,28 +28,27 @@ static int check_element_index(const char* func, const char* array_name, long in const grib_context* c = grib_context_get_default(); if (index < 0 || index >= size) { grib_context_log(c, GRIB_LOG_ERROR, "%s: Invalid element index %ld for array '%s'. Value must be between 0 and %zu", - func, index, array_name, size - 1); + func, index, array_name, size - 1); return GRIB_INVALID_ARGUMENT; } return GRIB_SUCCESS; } -int grib_accessor_class_element_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_element_t::unpack_long(long* val, size_t* len) { - grib_accessor_element_t* self = (grib_accessor_element_t*)a; - int ret = 0; - size_t size = 0; - long* ar = NULL; - const grib_context* c = a->context; - grib_handle* hand = grib_handle_of_accessor(a); - long index = self->element; + int ret = 0; + size_t size = 0; + long* ar = NULL; + const grib_context* c = context_; + grib_handle* hand = grib_handle_of_accessor(this); + long index = element_; if (*len < 1) { ret = GRIB_ARRAY_TOO_SMALL; return ret; } - if ((ret = grib_get_size(hand, self->array, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_size(hand, array_, &size)) != GRIB_SUCCESS) return ret; ar = (long*)grib_context_malloc_clear(c, size * sizeof(long)); @@ -61,7 +57,7 @@ int grib_accessor_class_element_t::unpack_long(grib_accessor* a, long* val, size return GRIB_OUT_OF_MEMORY; } - if ((ret = grib_get_long_array_internal(hand, self->array, ar, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_long_array_internal(hand, array_, ar, &size)) != GRIB_SUCCESS) return ret; // An index of -x means the xth item from the end of the list, so ar[-1] means the last item in ar @@ -69,7 +65,7 @@ int grib_accessor_class_element_t::unpack_long(grib_accessor* a, long* val, size index = size + index; } - if ((ret = check_element_index(__func__, self->array, index, size)) != GRIB_SUCCESS) { + if ((ret = check_element_index(__func__, array_, index, size)) != GRIB_SUCCESS) { goto the_end; } @@ -80,22 +76,21 @@ the_end: return ret; } -int grib_accessor_class_element_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_element_t::pack_long(const long* val, size_t* len) { - grib_accessor_element_t* self = (grib_accessor_element_t*)a; - int ret = 0; - size_t size = 0; - long* ar = NULL; - const grib_context* c = a->context; - grib_handle* hand = grib_handle_of_accessor(a); - long index = self->element; + int ret = 0; + size_t size = 0; + long* ar = NULL; + const grib_context* c = context_; + grib_handle* hand = grib_handle_of_accessor(this); + long index = element_; if (*len < 1) { ret = GRIB_ARRAY_TOO_SMALL; return ret; } - if ((ret = grib_get_size(hand, self->array, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_size(hand, array_, &size)) != GRIB_SUCCESS) return ret; ar = (long*)grib_context_malloc_clear(c, size * sizeof(long)); @@ -104,7 +99,7 @@ int grib_accessor_class_element_t::pack_long(grib_accessor* a, const long* val, return GRIB_OUT_OF_MEMORY; } - if ((ret = grib_get_long_array_internal(hand, self->array, ar, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_long_array_internal(hand, array_, ar, &size)) != GRIB_SUCCESS) return ret; // An index of -x means the xth item from the end of the list, so ar[-1] means the last item in ar @@ -112,7 +107,7 @@ int grib_accessor_class_element_t::pack_long(grib_accessor* a, const long* val, index = size + index; } - if ((ret = check_element_index(__func__, self->array, index, size)) != GRIB_SUCCESS) { + if ((ret = check_element_index(__func__, array_, index, size)) != GRIB_SUCCESS) { goto the_end; } @@ -120,7 +115,7 @@ int grib_accessor_class_element_t::pack_long(grib_accessor* a, const long* val, Assert(index < size); ar[index] = *val; - if ((ret = grib_set_long_array_internal(hand, self->array, ar, size)) != GRIB_SUCCESS) + if ((ret = grib_set_long_array_internal(hand, array_, ar, size)) != GRIB_SUCCESS) goto the_end; the_end: @@ -128,22 +123,21 @@ the_end: return ret; } -int grib_accessor_class_element_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_element_t::unpack_double(double* val, size_t* len) { - grib_accessor_element_t* self = (grib_accessor_element_t*)a; - int ret = 0; - size_t size = 0; - double* ar = NULL; - const grib_context* c = a->context; - const grib_handle* hand = grib_handle_of_accessor(a); - long index = self->element; + int ret = 0; + size_t size = 0; + double* ar = NULL; + const grib_context* c = context_; + const grib_handle* hand = grib_handle_of_accessor(this); + long index = element_; if (*len < 1) { ret = GRIB_ARRAY_TOO_SMALL; return ret; } - if ((ret = grib_get_size(hand, self->array, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_size(hand, array_, &size)) != GRIB_SUCCESS) return ret; ar = (double*)grib_context_malloc_clear(c, size * sizeof(double)); @@ -152,7 +146,7 @@ int grib_accessor_class_element_t::unpack_double(grib_accessor* a, double* val, return GRIB_OUT_OF_MEMORY; } - if ((ret = grib_get_double_array_internal(hand, self->array, ar, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_double_array_internal(hand, array_, ar, &size)) != GRIB_SUCCESS) return ret; // An index of -x means the xth item from the end of the list, so ar[-1] means the last item in ar @@ -160,7 +154,7 @@ int grib_accessor_class_element_t::unpack_double(grib_accessor* a, double* val, index = size + index; } - if ((ret = check_element_index(__func__, self->array, index, size)) != GRIB_SUCCESS) { + if ((ret = check_element_index(__func__, array_, index, size)) != GRIB_SUCCESS) { goto the_end; } diff --git a/src/accessor/grib_accessor_class_element.h b/src/accessor/grib_accessor_class_element.h index 220b8ff84..0a93b282d 100644 --- a/src/accessor/grib_accessor_class_element.h +++ b/src/accessor/grib_accessor_class_element.h @@ -15,18 +15,15 @@ class grib_accessor_element_t : public grib_accessor_long_t { public: - /* Members defined in element */ - const char* array; - long element; -}; - -class grib_accessor_class_element_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_element_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_element_t() : + grib_accessor_long_t() { class_name_ = "element"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_element_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* array_ = nullptr; + long element_ = 0; }; diff --git a/src/accessor/grib_accessor_class_evaluate.cc b/src/accessor/grib_accessor_class_evaluate.cc index 0312107a4..9cca2b034 100644 --- a/src/accessor/grib_accessor_class_evaluate.cc +++ b/src/accessor/grib_accessor_class_evaluate.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,24 +10,22 @@ #include "grib_accessor_class_evaluate.h" -grib_accessor_class_evaluate_t _grib_accessor_class_evaluate{ "evaluate" }; -grib_accessor_class* grib_accessor_class_evaluate = &_grib_accessor_class_evaluate; +grib_accessor_evaluate_t _grib_accessor_evaluate{}; +grib_accessor* grib_accessor_evaluate = &_grib_accessor_evaluate; - -void grib_accessor_class_evaluate_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_evaluate_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_evaluate_t* self = (grib_accessor_evaluate_t*)a; - self->arg = c; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_long_t::init(l, c); + arg_ = c; // the expression to be evaluated + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_evaluate_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_evaluate_t::unpack_long(long* val, size_t* len) { - grib_accessor_evaluate_t* self = (grib_accessor_evaluate_t*)a; - grib_expression* e = grib_arguments_get_expression(grib_handle_of_accessor(a), self->arg, 0); + grib_handle* h = grib_handle_of_accessor(this); + grib_expression* e = grib_arguments_get_expression(h, arg_, 0); - int ret = grib_expression_evaluate_long(grib_handle_of_accessor(a), e, val); + int ret = grib_expression_evaluate_long(h, e, val); *len = 1; return ret; diff --git a/src/accessor/grib_accessor_class_evaluate.h b/src/accessor/grib_accessor_class_evaluate.h index 0e40cf206..cb0403411 100644 --- a/src/accessor/grib_accessor_class_evaluate.h +++ b/src/accessor/grib_accessor_class_evaluate.h @@ -15,15 +15,12 @@ class grib_accessor_evaluate_t : public grib_accessor_long_t { public: - /* Members defined in evaluate */ - grib_arguments* arg; -}; - -class grib_accessor_class_evaluate_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_evaluate_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_evaluate_t() : + grib_accessor_long_t() { class_name_ = "evaluate"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_evaluate_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +protected: + grib_arguments* arg_ = nullptr; // expression to be evaluated }; diff --git a/src/accessor/grib_accessor_class_expanded_descriptors.cc b/src/accessor/grib_accessor_class_expanded_descriptors.cc index b30e745a9..6acb4e878 100644 --- a/src/accessor/grib_accessor_class_expanded_descriptors.cc +++ b/src/accessor/grib_accessor_class_expanded_descriptors.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -12,24 +11,13 @@ #include "grib_accessor_class_expanded_descriptors.h" #include "grib_scaling.h" -grib_accessor_class_expanded_descriptors_t _grib_accessor_class_expanded_descriptors{"expanded_descriptors"}; -grib_accessor_class* grib_accessor_class_expanded_descriptors = &_grib_accessor_class_expanded_descriptors; +grib_accessor_expanded_descriptors_t _grib_accessor_expanded_descriptors{}; +grib_accessor* grib_accessor_expanded_descriptors = &_grib_accessor_expanded_descriptors; - -#define MYDEBUG 0 +#define MYDEBUG 0 #define DESC_SIZE_INIT 400 /* Initial size for grib_bufr_descriptors_array_new */ #define DESC_SIZE_INCR 400 /* Increment size for grib_bufr_descriptors_array_new */ -typedef struct change_coding_params -{ - int associatedFieldWidth; - int localDescriptorWidth; - int extraWidth; - int extraScale; - int newStringWidth; - double referenceFactor; -} change_coding_params; - /* Handy macro to catch errors. * Arguments: array is a pointer to 'bufr_descriptors_array', result is pointer to 'bufr_descriptor' */ #define DESCRIPTORS_POP_FRONT_OR_RETURN(array, result) \ @@ -41,32 +29,31 @@ typedef struct change_coding_params result = grib_bufr_descriptors_array_pop_front(array); \ } -void grib_accessor_class_expanded_descriptors_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_expanded_descriptors_t::init(const long len, grib_arguments* args) { - grib_accessor_class_long_t::init(a, len, args); - grib_accessor_expanded_descriptors_t* self = (grib_accessor_expanded_descriptors_t*)a; - int n = 0; - grib_handle* hand = grib_handle_of_accessor(a); - self->tablesAccessorName = grib_arguments_get_name(hand, args, n++); - self->expandedName = grib_arguments_get_name(hand, args, n++); - self->rank = grib_arguments_get_long(hand, args, n++); - if (self->rank != 0) { - self->expandedAccessor = grib_find_accessor(hand, self->expandedName); + grib_accessor_long_t::init(len, args); + int n = 0; + grib_handle* hand = grib_handle_of_accessor(this); + tablesAccessorName_ = grib_arguments_get_name(hand, args, n++); + expandedName_ = grib_arguments_get_name(hand, args, n++); + rank_ = grib_arguments_get_long(hand, args, n++); + if (rank_ != 0) { + expandedAccessor_ = dynamic_cast(grib_find_accessor(hand, expandedName_)); } else { - self->expandedAccessor = 0; + expandedAccessor_ = 0; } - self->unexpandedDescriptors = grib_arguments_get_name(hand, args, n++); - self->sequence = grib_arguments_get_name(hand, args, n++); - self->do_expand = 1; - self->expanded = 0; - a->length = 0; + unexpandedDescriptors_ = grib_arguments_get_name(hand, args, n++); + sequence_ = grib_arguments_get_name(hand, args, n++); + do_expand_ = 1; + expanded_ = 0; + length_ = 0; + + tablesAccessor_ = NULL; } -static bufr_descriptors_array* do_expand(grib_accessor* a, bufr_descriptors_array* unexpanded, change_coding_params* ccp, int* err); - #define BUFR_DESCRIPTORS_ARRAY_USED_SIZE(v) ((v)->n) -#define SILENT 1 +#define SILENT 1 #if MYDEBUG static int global_depth = -1; @@ -74,40 +61,50 @@ static int global_depth = -1; static char* descriptor_type_name(int dtype) { switch (dtype) { - case BUFR_DESCRIPTOR_TYPE_STRING: return "string"; - case BUFR_DESCRIPTOR_TYPE_LONG: return "long"; - case BUFR_DESCRIPTOR_TYPE_DOUBLE: return "double"; - case BUFR_DESCRIPTOR_TYPE_TABLE: return "table"; - case BUFR_DESCRIPTOR_TYPE_FLAG: return "flag"; - case BUFR_DESCRIPTOR_TYPE_UNKNOWN: return "unknown"; - case BUFR_DESCRIPTOR_TYPE_REPLICATION: return "replication"; - case BUFR_DESCRIPTOR_TYPE_OPERATOR: return "operator"; - case BUFR_DESCRIPTOR_TYPE_SEQUENCE: return "sequence"; + case BUFR_DESCRIPTOR_TYPE_STRING: + return "string"; + case BUFR_DESCRIPTOR_TYPE_LONG: + return "long"; + case BUFR_DESCRIPTOR_TYPE_DOUBLE: + return "double"; + case BUFR_DESCRIPTOR_TYPE_TABLE: + return "table"; + case BUFR_DESCRIPTOR_TYPE_FLAG: + return "flag"; + case BUFR_DESCRIPTOR_TYPE_UNKNOWN: + return "unknown"; + case BUFR_DESCRIPTOR_TYPE_REPLICATION: + return "replication"; + case BUFR_DESCRIPTOR_TYPE_OPERATOR: + return "operator"; + case BUFR_DESCRIPTOR_TYPE_SEQUENCE: + return "sequence"; } Assert(!"bufr_descriptor_type_name failed"); return "unknown"; } #endif -static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_descriptors_array* expanded, change_coding_params* ccp, int* err) +void grib_accessor_expanded_descriptors_t::__expand(bufr_descriptors_array* unexpanded, bufr_descriptors_array* expanded, change_coding_params* ccp, int* err) { int k, j, i; - grib_accessor_expanded_descriptors_t* self = (grib_accessor_expanded_descriptors_t*)a; - size_t size = 0; - long* v_array = NULL; - bufr_descriptor* u = NULL; - bufr_descriptor* vv = NULL; + size_t size = 0; + long* v_array = NULL; + bufr_descriptor* u = NULL; + bufr_descriptor* vv = NULL; /* ECC-1422: 'ur' is the array of bufr_descriptor pointers for replications. * Its max size is X (from FXY) which is 6 bits so no need for malloc */ - bufr_descriptor* ur[65] = {0,}; + bufr_descriptor* ur[65] = { + 0, + }; bufr_descriptor* urc = NULL; size_t idx = 0; bufr_descriptor* u0 = NULL; - grib_context* c = a->context; + grib_context* c = context_; bufr_descriptor* us = NULL; bufr_descriptors_array* inner_expanded = NULL; bufr_descriptors_array* inner_unexpanded = NULL; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); #if MYDEBUG int idepth; #endif @@ -115,7 +112,7 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ if (BUFR_DESCRIPTORS_ARRAY_USED_SIZE(unexpanded) == 0) return; - us = grib_bufr_descriptor_clone(grib_bufr_descriptors_array_get(unexpanded, 0)); + us = grib_bufr_descriptor_clone(grib_bufr_descriptors_array_get(unexpanded, 0)); us->context = c; *err = 0; @@ -134,23 +131,23 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ printf("+++ pop %06ld [%s]\n", u->code, descriptor_type_name(u->type)); #endif /*this is to get the sequence elements of the sequence unexpanded[i] */ - *err = grib_set_long(hand, self->sequence, u->code); - *err = grib_get_size(hand, self->sequence, &size); + *err = grib_set_long(hand, sequence_, u->code); + *err = grib_get_size(hand, sequence_, &size); grib_bufr_descriptor_delete(u); if (*err) goto cleanup; v_array = (long*)grib_context_malloc_clear(c, sizeof(long) * size); - *err = grib_get_long_array(hand, self->sequence, v_array, &size); + *err = grib_get_long_array(hand, sequence_, v_array, &size); if (*err) goto cleanup; - inner_unexpanded = grib_bufr_descriptors_array_new(c, DESC_SIZE_INIT, DESC_SIZE_INCR); + inner_unexpanded = grib_bufr_descriptors_array_new(DESC_SIZE_INIT, DESC_SIZE_INCR); for (i = 0; i < size; i++) { - vv = grib_bufr_descriptor_new(self->tablesAccessor, v_array[i], !SILENT, err); + vv = grib_bufr_descriptor_new(tablesAccessor_, v_array[i], !SILENT, err); inner_unexpanded = grib_bufr_descriptors_array_push(inner_unexpanded, vv); } grib_context_free(c, v_array); - inner_expanded = do_expand(a, inner_unexpanded, ccp, err); + inner_expanded = do_expand(inner_unexpanded, ccp, err); if (*err) return; grib_bufr_descriptors_array_delete(inner_unexpanded); @@ -161,7 +158,7 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ printf("+++ push %06ld\n", inner_expanded->v[i]->code); } #endif - size = BUFR_DESCRIPTORS_ARRAY_USED_SIZE(inner_expanded); + size = BUFR_DESCRIPTORS_ARRAY_USED_SIZE(inner_expanded); grib_bufr_descriptors_array_append(expanded, inner_expanded); break; @@ -181,7 +178,7 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ grib_bufr_descriptors_array_push(expanded, u); idx = expanded->n - 1; size = 0; - inner_unexpanded = grib_bufr_descriptors_array_new(c, DESC_SIZE_INIT, DESC_SIZE_INCR); + inner_unexpanded = grib_bufr_descriptors_array_new(DESC_SIZE_INIT, DESC_SIZE_INCR); /* Number of descriptors to replicate cannot be more than what's left */ if (us->X + 1 > unexpanded->n) { @@ -200,7 +197,7 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ printf("+++ pop %06ld [%s]\n", u0->code, descriptor_type_name(u0->type)); #endif } - inner_expanded = do_expand(a, inner_unexpanded, ccp, err); + inner_expanded = do_expand(inner_unexpanded, ccp, err); if (*err) return; grib_bufr_descriptors_array_delete(inner_unexpanded); @@ -217,7 +214,8 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ if (size > 100) { grib_context_log(c, GRIB_LOG_ERROR, "Delayed replication %06ld: Too many elements (%lu). " - "Hint: This may be due to associated field descriptors", uidx->code, size); + "Hint: This may be due to associated field descriptors", + uidx->code, size); *err = GRIB_DECODING_ERROR; return; } @@ -243,7 +241,7 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ printf("+++ pop %06ld [%s]\n", ur[j]->code, descriptor_type_name(ur[j]->type)); #endif } - inner_unexpanded = grib_bufr_descriptors_array_new(c, DESC_SIZE_INIT, DESC_SIZE_INCR); + inner_unexpanded = grib_bufr_descriptors_array_new(DESC_SIZE_INIT, DESC_SIZE_INCR); for (j = 0; j < us->X; j++) { urc = grib_bufr_descriptor_clone(ur[j]); grib_bufr_descriptors_array_push(inner_unexpanded, urc); @@ -257,7 +255,7 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ for (i = 0; i < us->X; i++) grib_bufr_descriptor_delete(ur[i]); - inner_expanded = do_expand(a, inner_unexpanded, ccp, err); + inner_expanded = do_expand(inner_unexpanded, ccp, err); if (*err) return; grib_bufr_descriptors_array_delete(inner_unexpanded); @@ -268,7 +266,7 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ printf("+++ push %06ld\n", inner_expanded->v[i]->code); } #endif - size = BUFR_DESCRIPTORS_ARRAY_USED_SIZE(inner_expanded); + size = BUFR_DESCRIPTORS_ARRAY_USED_SIZE(inner_expanded); grib_bufr_descriptors_array_append(expanded, inner_expanded); } break; @@ -277,7 +275,7 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ DESCRIPTORS_POP_FRONT_OR_RETURN(unexpanded, u); size = 1; if (ccp->associatedFieldWidth && u->X != 31) { - bufr_descriptor* au = grib_bufr_descriptor_new(self->tablesAccessor, 999999, !SILENT, err); + bufr_descriptor* au = grib_bufr_descriptor_new(tablesAccessor_, 999999, !SILENT, err); au->width = ccp->associatedFieldWidth; grib_bufr_descriptor_set_scale(au, 0); strcpy(au->shortName, "associatedField"); @@ -403,16 +401,16 @@ cleanup: if (us) grib_bufr_descriptor_delete(us); } -static bufr_descriptors_array* do_expand(grib_accessor* a, bufr_descriptors_array* unexpanded, change_coding_params* ccp, int* err) +bufr_descriptors_array* grib_accessor_expanded_descriptors_t::do_expand(bufr_descriptors_array* unexpanded, change_coding_params* ccp, int* err) { bufr_descriptors_array* expanded = NULL; - grib_context* c = a->context; + #if MYDEBUG int idepth; global_depth++; #endif - expanded = grib_bufr_descriptors_array_new(c, DESC_SIZE_INIT, DESC_SIZE_INCR); + expanded = grib_bufr_descriptors_array_new(DESC_SIZE_INIT, DESC_SIZE_INCR); #if MYDEBUG { @@ -432,7 +430,7 @@ static bufr_descriptors_array* do_expand(grib_accessor* a, bufr_descriptors_arra } #endif while (unexpanded->n) { - __expand(a, unexpanded, expanded, ccp, err); + __expand(unexpanded, expanded, ccp, err); if (*err) { grib_bufr_descriptors_array_delete(expanded); return NULL; @@ -465,11 +463,10 @@ static bufr_descriptors_array* do_expand(grib_accessor* a, bufr_descriptors_arra return expanded; } -static int expand(grib_accessor* a) +int grib_accessor_expanded_descriptors_t::expand() { - grib_accessor_expanded_descriptors_t* self = (grib_accessor_expanded_descriptors_t*)a; - int err = 0; - size_t unexpandedSize = 0; + int err = 0; + size_t unexpandedSize = 0; /* grib_iarray* unexp=0; */ int i; long* u = 0; @@ -479,25 +476,25 @@ static int expand(grib_accessor* a) bufr_descriptors_array* unexpanded = NULL; bufr_descriptors_array* unexpanded_copy = NULL; bufr_descriptors_array* expanded = NULL; - grib_context* c = a->context; - const grib_handle* h = grib_handle_of_accessor(a); + grib_context* c = context_; + const grib_handle* h = grib_handle_of_accessor(this); int operator206yyy_width = 0; /* width specified by operator 206YYY */ - if (!self->do_expand) { + if (!do_expand_) { return err; } - self->do_expand = 0; - if (self->rank != 0) { - err = expand(self->expandedAccessor); - self->expanded = ((grib_accessor_expanded_descriptors_t*)self->expandedAccessor)->expanded; + do_expand_ = 0; + if (rank_ != 0) { + err = expandedAccessor_->expand(); + expanded_ = ((grib_accessor_expanded_descriptors_t*)expandedAccessor_)->expanded_; return err; } - err = grib_get_size(h, self->unexpandedDescriptors, &unexpandedSize); + err = grib_get_size(h, unexpandedDescriptors_, &unexpandedSize); if (err) return err; if (unexpandedSize == 0) { - grib_context_log(c, GRIB_LOG_ERROR, "%s: Unexpanded size is zero!", a->name); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unexpanded size is zero!", name_); return GRIB_DECODING_ERROR; } @@ -506,7 +503,7 @@ static int expand(grib_accessor* a) err = GRIB_OUT_OF_MEMORY; return err; } - err = grib_get_long_array(h, self->unexpandedDescriptors, u, &unexpandedSize); + err = grib_get_long_array(h, unexpandedDescriptors_, u, &unexpandedSize); if (err) return err; @@ -526,26 +523,26 @@ static int expand(grib_accessor* a) snprintf(key, sizeof(key), "%ld_%ld_%ld_%ld_%ld", centre, masterTablesVersionNumber, localTablesVersionNumber, masterTablesNumber, u[0]); expanded = grib_context_expanded_descriptors_list_get(c, key, u, unexpandedSize); if (expanded) { - self->expanded = expanded; + expanded_ = expanded; grib_context_free(c, u); return GRIB_SUCCESS; } - if (!self->tablesAccessor) { - self->tablesAccessor = grib_find_accessor(h, self->tablesAccessorName); - Assert(self->tablesAccessor); + if (!tablesAccessor_) { + tablesAccessor_ = grib_find_accessor(h, tablesAccessorName_); + Assert(tablesAccessor_); } - unexpanded = grib_bufr_descriptors_array_new(c, unexpandedSize, DESC_SIZE_INCR); - unexpanded_copy = grib_bufr_descriptors_array_new(c, unexpandedSize, DESC_SIZE_INCR); + unexpanded = grib_bufr_descriptors_array_new(unexpandedSize, DESC_SIZE_INCR); + unexpanded_copy = grib_bufr_descriptors_array_new(unexpandedSize, DESC_SIZE_INCR); operator206yyy_width = 0; for (i = 0; i < unexpandedSize; i++) { bufr_descriptor *aDescriptor1, *aDescriptor2; /* ECC-1274: clear error and only issue msg once */ - err = 0; - aDescriptor1 = grib_bufr_descriptor_new(self->tablesAccessor, u[i], SILENT, &err); - err = 0; - aDescriptor2 = grib_bufr_descriptor_new(self->tablesAccessor, u[i], !SILENT, &err); + err = 0; + aDescriptor1 = grib_bufr_descriptor_new(tablesAccessor_, u[i], SILENT, &err); + err = 0; + aDescriptor2 = grib_bufr_descriptor_new(tablesAccessor_, u[i], !SILENT, &err); /* ECC-433: Operator 206YYY */ if (aDescriptor1->F == 2 && aDescriptor1->X == 6) { @@ -576,173 +573,168 @@ static int expand(grib_accessor* a) ccp.referenceFactor = 1; ccp.associatedFieldWidth = 0; ccp.newStringWidth = 0; - self->expanded = do_expand(a, unexpanded, &ccp, &err); + expanded_ = do_expand(unexpanded, &ccp, &err); if (err) { grib_bufr_descriptors_array_delete(unexpanded); grib_bufr_descriptors_array_delete(unexpanded_copy); return err; } - grib_context_expanded_descriptors_list_push(c, key, self->expanded, unexpanded_copy); + grib_context_expanded_descriptors_list_push(c, key, expanded_, unexpanded_copy); grib_bufr_descriptors_array_delete(unexpanded); return err; } -int grib_accessor_class_expanded_descriptors_set_do_expand(grib_accessor* a, long do_expand) +int grib_accessor_expanded_descriptors_t::grib_accessor_expanded_descriptors_set_do_expand(long do_expand) { - grib_accessor_expanded_descriptors_t* self = (grib_accessor_expanded_descriptors_t*)a; - self->do_expand = do_expand; + do_expand_ = do_expand; return 0; } -bufr_descriptors_array* grib_accessor_class_expanded_descriptors_get_expanded(grib_accessor* a, int* err) +bufr_descriptors_array* grib_accessor_expanded_descriptors_t::grib_accessor_expanded_descriptors_get_expanded(int* err) { - const grib_accessor_expanded_descriptors_t* self = (grib_accessor_expanded_descriptors_t*)a; - *err = expand(a); - return self->expanded; + *err = expand(); + return expanded_; } -int grib_accessor_class_expanded_descriptors_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_expanded_descriptors_t::unpack_double(double* val, size_t* len) { - grib_accessor_expanded_descriptors_t* self = (grib_accessor_expanded_descriptors_t*)a; - int ret = 0; + int ret = 0; size_t i = 0; size_t expandedSize; - if (self->rank != 2) { - long* lval = (long*)grib_context_malloc_clear(a->context, *len * sizeof(long)); - ret = unpack_long(a, lval, len); + if (rank_ != 2) { + long* lval = (long*)grib_context_malloc_clear(context_, *len * sizeof(long)); + ret = unpack_long(lval, len); if (ret) return ret; for (i = 0; i < *len; i++) val[i] = (double)lval[i]; - grib_context_free(a->context, lval); + grib_context_free(context_, lval); } else { - ret = expand(a); + ret = expand(); if (ret) return ret; - expandedSize = BUFR_DESCRIPTORS_ARRAY_USED_SIZE(self->expanded); + expandedSize = BUFR_DESCRIPTORS_ARRAY_USED_SIZE(expanded_); if (*len < expandedSize) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Wrong size (%ld) for %s, it contains %lu values", *len, a->name, expandedSize); + grib_context_log(context_, GRIB_LOG_ERROR, + "Wrong size (%ld) for %s, it contains %lu values", *len, name_, expandedSize); *len = 0; return GRIB_ARRAY_TOO_SMALL; } *len = expandedSize; for (i = 0; i < *len; i++) - val[i] = self->expanded->v[i]->reference; + val[i] = expanded_->v[i]->reference; } return ret; } -int grib_accessor_class_expanded_descriptors_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_expanded_descriptors_t::unpack_long(long* val, size_t* len) { - grib_accessor_expanded_descriptors_t* self = (grib_accessor_expanded_descriptors_t*)a; int ret = 0; size_t rlen = 0; size_t i = 0; - ret = expand(a); + ret = expand(); if (ret) return ret; - if (!self->expanded) + if (!expanded_) return GRIB_DECODING_ERROR; - rlen = BUFR_DESCRIPTORS_ARRAY_USED_SIZE(self->expanded); + rlen = BUFR_DESCRIPTORS_ARRAY_USED_SIZE(expanded_); if (*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Wrong size (%ld) for %s, it contains %lu values", *len, a->name, rlen); + grib_context_log(context_, GRIB_LOG_ERROR, + "Wrong size (%ld) for %s, it contains %lu values", *len, name_, rlen); *len = 0; return GRIB_ARRAY_TOO_SMALL; } *len = rlen; - switch (self->rank) { + switch (rank_) { case 0: for (i = 0; i < *len; i++) - val[i] = self->expanded->v[i]->code; + val[i] = expanded_->v[i]->code; break; case 1: for (i = 0; i < *len; i++) - val[i] = self->expanded->v[i]->scale; + val[i] = expanded_->v[i]->scale; break; case 2: return GRIB_INVALID_TYPE; case 3: for (i = 0; i < *len; i++) - val[i] = self->expanded->v[i]->width; + val[i] = expanded_->v[i]->width; break; case 4: for (i = 0; i < *len; i++) - val[i] = self->expanded->v[i]->type; + val[i] = expanded_->v[i]->type; break; } return GRIB_SUCCESS; } -int grib_accessor_class_expanded_descriptors_t::unpack_string_array(grib_accessor* a, char** buffer, size_t* len) +int grib_accessor_expanded_descriptors_t::unpack_string_array(char** buffer, size_t* len) { - int err = 0; - long* v = NULL; + int err = 0; + long* v = NULL; char buf[25] = {0,}; long llen = 0; size_t i = 0, size = 0; - const grib_context* c = a->context; + const grib_context* c = context_; - err = a->value_count(&llen); if (err) return err; + err = value_count(&llen); + if (err) return err; size = llen; - v = (long*)grib_context_malloc_clear(c, sizeof(long) * size); - err = a->unpack_long(v, &size); if (err) return err; + v = (long*)grib_context_malloc_clear(c, sizeof(long) * size); + err = unpack_long(v, &size); + if (err) return err; for (i = 0; i < size; i++) { snprintf(buf, sizeof(buf), "%06ld", v[i]); buffer[i] = grib_context_strdup(c, buf); } *len = size; - grib_context_free(c,v); + grib_context_free(c, v); return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_expanded_descriptors_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_expanded_descriptors_t::pack_long(const long* val, size_t* len) { - grib_accessor_expanded_descriptors_t* self = (grib_accessor_expanded_descriptors_t*)a; - self->do_expand = 1; + do_expand_ = 1; return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_expanded_descriptors_t::value_count(grib_accessor* a, long* rlen) +int grib_accessor_expanded_descriptors_t::value_count(long* rlen) { - grib_accessor_expanded_descriptors_t* self = (grib_accessor_expanded_descriptors_t*)a; int err = 0; *rlen = 0; - err = expand(a); + err = expand(); if (err) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s unable to compute size", a->name); - grib_bufr_descriptors_array_delete(self->expanded); + grib_context_log(context_, GRIB_LOG_ERROR, "%s unable to compute size", name_); + grib_bufr_descriptors_array_delete(expanded_); return err; } - *rlen = BUFR_DESCRIPTORS_ARRAY_USED_SIZE(self->expanded); + *rlen = BUFR_DESCRIPTORS_ARRAY_USED_SIZE(expanded_); return err; } -void grib_accessor_class_expanded_descriptors_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_expanded_descriptors_t::destroy(grib_context* c) { - grib_accessor_class_long_t::destroy(c, a); + grib_accessor_long_t::destroy(c); // grib_accessor_expanded_descriptors_t* self = (grib_accessor_expanded_descriptors_t*)a; - // if (self->rank==0 && self->expanded) - // grib_bufr_descriptors_array_delete(self->expanded); + // if (rank==0 && expanded_ ) + // grib_bufr_descriptors_array_delete(expanded_ ); } -int grib_accessor_class_expanded_descriptors_t::get_native_type(grib_accessor* a) +long grib_accessor_expanded_descriptors_t::get_native_type() { - grib_accessor_expanded_descriptors_t* self = (grib_accessor_expanded_descriptors_t*)a; - if (self->rank == 2) + if (rank_ == 2) return GRIB_TYPE_DOUBLE; else return GRIB_TYPE_LONG; diff --git a/src/accessor/grib_accessor_class_expanded_descriptors.h b/src/accessor/grib_accessor_class_expanded_descriptors.h index 7e42ad28c..b763d6733 100644 --- a/src/accessor/grib_accessor_class_expanded_descriptors.h +++ b/src/accessor/grib_accessor_class_expanded_descriptors.h @@ -12,32 +12,46 @@ #include "grib_accessor_class_long.h" +typedef struct change_coding_params +{ + int associatedFieldWidth; + int localDescriptorWidth; + int extraWidth; + int extraScale; + int newStringWidth; + double referenceFactor; +} change_coding_params; + class grib_accessor_expanded_descriptors_t : public grib_accessor_long_t { public: - /* Members defined in expanded_descriptors */ - const char* unexpandedDescriptors; - const char* sequence; - const char* expandedName; - const char* tablesAccessorName; - bufr_descriptors_array* expanded; - int rank; - grib_accessor* expandedAccessor; - int do_expand; - grib_accessor* tablesAccessor; -}; - -class grib_accessor_class_expanded_descriptors_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_expanded_descriptors_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_expanded_descriptors_t() : + grib_accessor_long_t() { class_name_ = "expanded_descriptors"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_expanded_descriptors_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string_array(grib_accessor*, char**, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string_array(char**, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void init(const long, grib_arguments*) override; + + int grib_accessor_expanded_descriptors_set_do_expand(long do_expand); + bufr_descriptors_array* grib_accessor_expanded_descriptors_get_expanded(int* err); + +private: + const char* unexpandedDescriptors_ = nullptr; + const char* sequence_ = nullptr; + const char* expandedName_ = nullptr; + const char* tablesAccessorName_ = nullptr; + bufr_descriptors_array* expanded_ = nullptr; + int rank_ = 0; + grib_accessor_expanded_descriptors_t* expandedAccessor_ = nullptr; + int do_expand_ = 0; + grib_accessor* tablesAccessor_ = nullptr; + + int expand(); + void __expand(bufr_descriptors_array* unexpanded, bufr_descriptors_array* expanded, change_coding_params* ccp, int* err); + bufr_descriptors_array* do_expand(bufr_descriptors_array* unexpanded, change_coding_params* ccp, int* err); }; diff --git a/src/accessor/grib_accessor_class_from_scale_factor_scaled_value.cc b/src/accessor/grib_accessor_class_from_scale_factor_scaled_value.cc index f2c598f8f..dfe77afcf 100644 --- a/src/accessor/grib_accessor_class_from_scale_factor_scaled_value.cc +++ b/src/accessor/grib_accessor_class_from_scale_factor_scaled_value.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -10,113 +9,109 @@ */ #include "grib_accessor_class_from_scale_factor_scaled_value.h" +#include "ecc_numeric_limits.h" -grib_accessor_class_from_scale_factor_scaled_value_t _grib_accessor_class_from_scale_factor_scaled_value{ "from_scale_factor_scaled_value" }; -grib_accessor_class* grib_accessor_class_from_scale_factor_scaled_value = &_grib_accessor_class_from_scale_factor_scaled_value; +grib_accessor_from_scale_factor_scaled_value_t _grib_accessor_from_scale_factor_scaled_value{}; +grib_accessor* grib_accessor_from_scale_factor_scaled_value = &_grib_accessor_from_scale_factor_scaled_value; - -void grib_accessor_class_from_scale_factor_scaled_value_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_from_scale_factor_scaled_value_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_from_scale_factor_scaled_value_t* self = (grib_accessor_from_scale_factor_scaled_value_t*)a; - int n = 0; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_double_t::init(l, c); + int n = 0; + grib_handle* hand = grib_handle_of_accessor(this); - self->scaleFactor = grib_arguments_get_name(hand, c, n++); - self->scaledValue = grib_arguments_get_name(hand, c, n++); // Can be scalar or array + scaleFactor_ = grib_arguments_get_name(hand, c, n++); + scaledValue_ = grib_arguments_get_name(hand, c, n++); // Can be scalar or array // ECC-979: Allow user to encode - // a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + // flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_from_scale_factor_scaled_value_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_from_scale_factor_scaled_value_t::pack_double(const double* val, size_t* len) { // See ECC-979 and ECC-1416 - // Evaluate self->scaleFactor and self->scaledValue from input double '*val' - grib_accessor_from_scale_factor_scaled_value_t* self = (grib_accessor_from_scale_factor_scaled_value_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - - int err = 0; - int64_t factor = 0; - int64_t value = 0; - double exact = *val; // the input + // Evaluate scaleFactor and scaledValue_ from input double '*val' + grib_handle* hand = grib_handle_of_accessor(this); + int err = 0; + int64_t factor = 0; + int64_t value = 0; + double exact = *val; // the input int64_t maxval_value, maxval_factor; // maximum allowable values int value_accessor_num_bits = 0, factor_accessor_num_bits = 0; grib_accessor *factor_accessor, *value_accessor; if (exact == 0) { - if ((err = grib_set_long_internal(hand, self->scaleFactor, 0)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(hand, scaleFactor_, 0)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(hand, self->scaledValue, 0)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(hand, scaledValue_, 0)) != GRIB_SUCCESS) return err; return GRIB_SUCCESS; } if (exact == GRIB_MISSING_DOUBLE) { - if ((err = grib_set_missing(hand, self->scaleFactor)) != GRIB_SUCCESS) + if ((err = grib_set_missing(hand, scaleFactor_)) != GRIB_SUCCESS) return err; - if ((err = grib_set_missing(hand, self->scaledValue)) != GRIB_SUCCESS) + if ((err = grib_set_missing(hand, scaledValue_)) != GRIB_SUCCESS) return err; return GRIB_SUCCESS; } - factor_accessor = grib_find_accessor(hand, self->scaleFactor); - value_accessor = grib_find_accessor(hand, self->scaledValue); + factor_accessor = grib_find_accessor(hand, scaleFactor_); + value_accessor = grib_find_accessor(hand, scaledValue_); if (!factor_accessor || !value_accessor) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Could not access keys %s and %s", self->scaleFactor, self->scaledValue); + grib_context_log(context_, GRIB_LOG_ERROR, "Could not access keys %s and %s", scaleFactor_, scaledValue_); return GRIB_ENCODING_ERROR; } - value_accessor_num_bits = value_accessor->length * 8; - factor_accessor_num_bits = factor_accessor->length * 8; - maxval_value = (1UL << value_accessor_num_bits) - 2; // exclude missing - maxval_factor = (1UL << factor_accessor_num_bits) - 2; // exclude missing - if (strcmp(factor_accessor->cclass->name, "signed") == 0) { + value_accessor_num_bits = value_accessor->length_ * 8; + factor_accessor_num_bits = factor_accessor->length_ * 8; + maxval_value = NumericLimits::max(value_accessor_num_bits); // exclude missing + maxval_factor = NumericLimits::max(factor_accessor_num_bits); // exclude missing + if (strcmp(factor_accessor->class_name_, "signed") == 0) { maxval_factor = (1UL << (factor_accessor_num_bits - 1)) - 1; } err = compute_scaled_value_and_scale_factor(exact, maxval_value, maxval_factor, &value, &factor); if (err) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Failed to compute %s and %s from %g", self->scaleFactor, self->scaledValue, exact); + grib_context_log(context_, GRIB_LOG_ERROR, "Failed to compute %s and %s from %g", scaleFactor_, scaledValue_, exact); return err; } - if ((err = grib_set_long_internal(hand, self->scaleFactor, factor)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(hand, scaleFactor_, factor)) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(hand, self->scaledValue, value)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(hand, scaledValue_, value)) != GRIB_SUCCESS) return err; return GRIB_SUCCESS; } -int grib_accessor_class_from_scale_factor_scaled_value_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_from_scale_factor_scaled_value_t::unpack_double(double* val, size_t* len) { - grib_accessor_from_scale_factor_scaled_value_t* self = (grib_accessor_from_scale_factor_scaled_value_t*)a; - int err = 0; + int err = 0; long scaleFactor = 0, scaledValue = 0; - grib_handle* hand = grib_handle_of_accessor(a); - grib_context* c = a->context; + grib_handle* hand = grib_handle_of_accessor(this); + grib_context* c = context_; size_t vsize = 0; - if ((err = grib_get_long_internal(hand, self->scaleFactor, &scaleFactor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, scaleFactor_, &scaleFactor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_size(hand, self->scaledValue, &vsize)) != GRIB_SUCCESS) + if ((err = grib_get_size(hand, scaledValue_, &vsize)) != GRIB_SUCCESS) return err; if (vsize == 1) { - if ((err = grib_get_long_internal(hand, self->scaledValue, &scaledValue)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, scaledValue_, &scaledValue)) != GRIB_SUCCESS) return err; - if (grib_is_missing(hand, self->scaledValue, &err) && err == GRIB_SUCCESS) { + if (grib_is_missing(hand, scaledValue_, &err) && err == GRIB_SUCCESS) { *val = GRIB_MISSING_DOUBLE; *len = 1; return GRIB_SUCCESS; } else { // ECC-966: If scale factor is missing, print error and treat it as zero (as a fallback) - if (grib_is_missing(hand, self->scaleFactor, &err) && err == GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "unpack_double for %s: %s is missing! Using zero instead", a->name, self->scaleFactor); + if (grib_is_missing(hand, scaleFactor_, &err) && err == GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, + "unpack_double for %s: %s is missing! Using zero instead", name_, scaleFactor_); scaleFactor = 0; } } @@ -143,7 +138,7 @@ int grib_accessor_class_from_scale_factor_scaled_value_t::unpack_double(grib_acc long* lvalues = (long*)grib_context_malloc(c, vsize * sizeof(long)); if (!lvalues) return GRIB_OUT_OF_MEMORY; - if ((err = grib_get_long_array_internal(hand, self->scaledValue, lvalues, &vsize)) != GRIB_SUCCESS) { + if ((err = grib_get_long_array_internal(hand, scaledValue_, lvalues, &vsize)) != GRIB_SUCCESS) { grib_context_free(c, lvalues); return err; } @@ -166,30 +161,28 @@ int grib_accessor_class_from_scale_factor_scaled_value_t::unpack_double(grib_acc return err; } -int grib_accessor_class_from_scale_factor_scaled_value_t::is_missing(grib_accessor* a) +int grib_accessor_from_scale_factor_scaled_value_t::is_missing() { - grib_accessor_from_scale_factor_scaled_value_t* self = (grib_accessor_from_scale_factor_scaled_value_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int err = 0; + grib_handle* hand = grib_handle_of_accessor(this); + int err = 0; long scaleFactor = 0, scaledValue = 0; - if ((err = grib_get_long_internal(hand, self->scaleFactor, &scaleFactor)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, scaleFactor_, &scaleFactor)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(hand, self->scaledValue, &scaledValue)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(hand, scaledValue_, &scaledValue)) != GRIB_SUCCESS) return err; return ((scaleFactor == GRIB_MISSING_LONG) || (scaledValue == GRIB_MISSING_LONG)); } -int grib_accessor_class_from_scale_factor_scaled_value_t::value_count(grib_accessor* a, long* len) +int grib_accessor_from_scale_factor_scaled_value_t::value_count(long* len) { - grib_accessor_from_scale_factor_scaled_value_t* self = (grib_accessor_from_scale_factor_scaled_value_t*)a; - int err = 0; - grib_handle* hand = grib_handle_of_accessor(a); - size_t vsize = 0; + int err = 0; + grib_handle* hand = grib_handle_of_accessor(this); + size_t vsize; - if ((err = grib_get_size(hand, self->scaledValue, &vsize)) != GRIB_SUCCESS) + if ((err = grib_get_size(hand, scaledValue_, &vsize)) != GRIB_SUCCESS) return err; *len = (long)vsize; return GRIB_SUCCESS; diff --git a/src/accessor/grib_accessor_class_from_scale_factor_scaled_value.h b/src/accessor/grib_accessor_class_from_scale_factor_scaled_value.h index d8dc1bcb8..c14c522f8 100644 --- a/src/accessor/grib_accessor_class_from_scale_factor_scaled_value.h +++ b/src/accessor/grib_accessor_class_from_scale_factor_scaled_value.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_from_scale_factor_scaled_value_t : public grib_accessor_double_t { public: - /* Members defined in from_scale_factor_scaled_value */ - const char* scaleFactor; - const char* scaledValue; -}; - -class grib_accessor_class_from_scale_factor_scaled_value_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_from_scale_factor_scaled_value_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_from_scale_factor_scaled_value_t() : + grib_accessor_double_t() { class_name_ = "from_scale_factor_scaled_value"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_from_scale_factor_scaled_value_t{}; } - int is_missing(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int is_missing() override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* scaleFactor_ = nullptr; + const char* scaledValue_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g1_half_byte_codeflag.cc b/src/accessor/grib_accessor_class_g1_half_byte_codeflag.cc index f73a146dc..940a1e6d4 100644 --- a/src/accessor/grib_accessor_class_g1_half_byte_codeflag.cc +++ b/src/accessor/grib_accessor_class_g1_half_byte_codeflag.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,55 +10,54 @@ #include "grib_accessor_class_g1_half_byte_codeflag.h" -grib_accessor_class_g1_half_byte_codeflag_t _grib_accessor_class_g1_half_byte_codeflag{ "g1_half_byte_codeflag" }; -grib_accessor_class* grib_accessor_class_g1_half_byte_codeflag = &_grib_accessor_class_g1_half_byte_codeflag; +grib_accessor_g1_half_byte_codeflag_t _grib_accessor_g1_half_byte_codeflag{}; +grib_accessor* grib_accessor_g1_half_byte_codeflag = &_grib_accessor_g1_half_byte_codeflag; - -void grib_accessor_class_g1_half_byte_codeflag_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_g1_half_byte_codeflag_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + grib_accessor_gen_t::init(len, arg); + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; } -void grib_accessor_class_g1_half_byte_codeflag_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_g1_half_byte_codeflag_t::dump(grib_dumper* dumper) { - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); } -int grib_accessor_class_g1_half_byte_codeflag_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g1_half_byte_codeflag_t::unpack_long(long* val, size_t* len) { unsigned char dat = 0; if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", name_, 1); *len = 0; return GRIB_ARRAY_TOO_SMALL; } - dat = grib_handle_of_accessor(a)->buffer->data[a->offset] & 0x0f; + dat = grib_handle_of_accessor(this)->buffer->data[offset_] & 0x0f; *val = dat; *len = 1; return GRIB_SUCCESS; } -int grib_accessor_class_g1_half_byte_codeflag_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g1_half_byte_codeflag_t::pack_long(const long* val, size_t* len) { int ret = 0; if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", name_, 1); *len = 0; return GRIB_ARRAY_TOO_SMALL; } - /* printf("HALF BYTE pack long %ld %02x\n",*val,grib_handle_of_accessor(a)->buffer->data[a->offset]);*/ - grib_handle_of_accessor(a)->buffer->data[a->offset] = (a->parent->h->buffer->data[a->offset] & 0xf0) | (*val & 0x0f); - /* printf("HALF BYTE pack long %ld %02x\n",*val,grib_handle_of_accessor(a)->buffer->data[a->offset]);*/ + /* printf("HALF BYTE pack long %ld %02x\n",*val,grib_handle_of_accessor(this)->buffer->data[offset_ ]);*/ + grib_handle_of_accessor(this)->buffer->data[offset_] = (parent_->h->buffer->data[offset_] & 0xf0) | (*val & 0x0f); + /* printf("HALF BYTE pack long %ld %02x\n",*val,grib_handle_of_accessor(this)->buffer->data[offset_ ]);*/ *len = 1; return ret; } -int grib_accessor_class_g1_half_byte_codeflag_t::get_native_type(grib_accessor* a) +long grib_accessor_g1_half_byte_codeflag_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_g1_half_byte_codeflag.h b/src/accessor/grib_accessor_class_g1_half_byte_codeflag.h index 662a75569..9b70ac93a 100644 --- a/src/accessor/grib_accessor_class_g1_half_byte_codeflag.h +++ b/src/accessor/grib_accessor_class_g1_half_byte_codeflag.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,12 @@ class grib_accessor_g1_half_byte_codeflag_t : public grib_accessor_gen_t { public: - /* Members defined in g1_half_byte_codeflag */ -}; - -class grib_accessor_class_g1_half_byte_codeflag_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_g1_half_byte_codeflag_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_g1_half_byte_codeflag_t() : + grib_accessor_gen_t() { class_name_ = "g1_half_byte_codeflag"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1_half_byte_codeflag_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_g1_message_length.cc b/src/accessor/grib_accessor_class_g1_message_length.cc index af06d2e98..d09f1dd0a 100644 --- a/src/accessor/grib_accessor_class_g1_message_length.cc +++ b/src/accessor/grib_accessor_class_g1_message_length.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,15 +10,13 @@ #include "grib_accessor_class_g1_message_length.h" -grib_accessor_class_g1_message_length_t _grib_accessor_class_g1_message_length{ "g1_message_length" }; -grib_accessor_class* grib_accessor_class_g1_message_length = &_grib_accessor_class_g1_message_length; +grib_accessor_g1_message_length_t _grib_accessor_g1_message_length{}; +grib_accessor* grib_accessor_g1_message_length = &_grib_accessor_g1_message_length; - -void grib_accessor_class_g1_message_length_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_g1_message_length_t::init(const long len, grib_arguments* args) { - grib_accessor_class_section_length_t::init(a, len, args); - grib_accessor_g1_message_length_t* self = (grib_accessor_g1_message_length_t*)a; - self->sec4_length = grib_arguments_get_name(grib_handle_of_accessor(a), args, 0); + grib_accessor_section_length_t::init(len, args); + sec4_length_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 0); } int grib_get_g1_message_size(grib_handle* h, grib_accessor* tl, grib_accessor* s4, @@ -32,16 +29,16 @@ int grib_get_g1_message_size(grib_handle* h, grib_accessor* tl, grib_accessor* s return GRIB_NOT_FOUND; if (!s4) { *sec4_len = 0; - off = tl->offset * 8; - *total_length = grib_decode_unsigned_long(h->buffer->data, &off, tl->length * 8); + off = tl->offset_ * 8; + *total_length = grib_decode_unsigned_long(h->buffer->data, &off, tl->length_ * 8); return GRIB_SUCCESS; } - off = tl->offset * 8; - tlen = grib_decode_unsigned_long(h->buffer->data, &off, tl->length * 8); + off = tl->offset_ * 8; + tlen = grib_decode_unsigned_long(h->buffer->data, &off, tl->length_ * 8); - off = s4->offset * 8; - slen = grib_decode_unsigned_long(h->buffer->data, &off, s4->length * 8); + off = s4->offset_ * 8; + slen = grib_decode_unsigned_long(h->buffer->data, &off, s4->length_ * 8); /* printf("\nlarge grib tlen=%ld slen=%ld diff=%ld\n",tlen&0x7fffff,slen,tlen-slen); */ @@ -52,7 +49,7 @@ int grib_get_g1_message_size(grib_handle* h, grib_accessor* tl, grib_accessor* s tlen -= slen; tlen += 4; - slen = tlen - s4->offset - 4; /* 4 is for 7777 */ + slen = tlen - s4->offset_ - 4; /* 4 is for 7777 */ } *total_length = tlen; @@ -61,28 +58,27 @@ int grib_get_g1_message_size(grib_handle* h, grib_accessor* tl, grib_accessor* s return GRIB_SUCCESS; } -int grib_accessor_class_g1_message_length_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g1_message_length_t::pack_long(const long* val, size_t* len) { - grib_accessor_g1_message_length_t* self = (grib_accessor_g1_message_length_t*)a; - /*grib_accessor_class* super = *(a->cclass->super);*/ + /*grib_accessor* super = *(cclass_ ->super);*/ /* Here we assume that the totalLength will be coded AFTER the section4 length, and the section4 length will be overwritten by the totalLength accessor for large GRIBs */ - grib_accessor* s4 = grib_find_accessor(grib_handle_of_accessor(a), self->sec4_length); + grib_accessor* s4 = grib_find_accessor(grib_handle_of_accessor(this), sec4_length_); long tlen, slen; long t120; int ret; tlen = *val; - if ((tlen < 0x800000 || !a->context->gribex_mode_on) && tlen < 0xFFFFFF) { + if ((tlen < 0x800000 || !context_->gribex_mode_on) && tlen < 0xFFFFFF) { /* printf("ENCODING small grib total = %ld\n",tlen); */ /*return super->pack_long(a,val,len);*/ /* Do not directly call pack_long on base class */ /* because in this special case we want to skip the checks. */ /* So we call the helper function which has an extra argument */ - return pack_long_unsigned_helper(a, val, len, /*check=*/0); + return pack_long_unsigned_helper(val, len, /*check=*/0); } if (!s4) @@ -100,23 +96,22 @@ int grib_accessor_class_g1_message_length_t::pack_long(grib_accessor* a, const l *len = 1; /* Do not do the length checks in this special case */ - if ((ret = pack_long_unsigned_helper(a, &tlen, len, /*check=*/0)) != GRIB_SUCCESS) + if ((ret = pack_long_unsigned_helper(&tlen, len, /*check=*/0)) != GRIB_SUCCESS) return ret; // if((ret = super->pack_long(a,&tlen,len)) != GRIB_SUCCESS) return ret; { long total_length = -1, sec4_length = -1; - grib_get_g1_message_size(grib_handle_of_accessor(a), a, - grib_find_accessor(grib_handle_of_accessor(a), self->sec4_length), + grib_get_g1_message_size(grib_handle_of_accessor(this), this, + grib_find_accessor(grib_handle_of_accessor(this), sec4_length_), &total_length, &sec4_length); if (total_length != *val) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s %s: Failed to set GRIB1 message length to %ld" " (actual length=%ld)", - cclass_name, __func__, *val, total_length); - grib_context_log(a->context, GRIB_LOG_ERROR, "Hint: Try encoding as GRIB2\n"); + class_name_, __func__, *val, total_length); + grib_context_log(context_, GRIB_LOG_ERROR, "Hint: Try encoding as GRIB2\n"); return GRIB_ENCODING_ERROR; } } @@ -124,14 +119,13 @@ int grib_accessor_class_g1_message_length_t::pack_long(grib_accessor* a, const l return GRIB_SUCCESS; } -int grib_accessor_class_g1_message_length_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g1_message_length_t::unpack_long(long* val, size_t* len) { - grib_accessor_g1_message_length_t* self = (grib_accessor_g1_message_length_t*)a; int ret; long total_length, sec4_length; - if ((ret = grib_get_g1_message_size(grib_handle_of_accessor(a), a, - grib_find_accessor(grib_handle_of_accessor(a), self->sec4_length), + if ((ret = grib_get_g1_message_size(grib_handle_of_accessor(this), this, + grib_find_accessor(grib_handle_of_accessor(this), sec4_length_), &total_length, &sec4_length)) != GRIB_SUCCESS) { return ret; } diff --git a/src/accessor/grib_accessor_class_g1_message_length.h b/src/accessor/grib_accessor_class_g1_message_length.h index 9a24e3213..aef8142a8 100644 --- a/src/accessor/grib_accessor_class_g1_message_length.h +++ b/src/accessor/grib_accessor_class_g1_message_length.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_g1_message_length_t : public grib_accessor_section_length_t { public: - /* Members defined in g1_message_length */ - const char *sec4_length; -}; - -class grib_accessor_class_g1_message_length_t : public grib_accessor_class_section_length_t -{ -public: - grib_accessor_class_g1_message_length_t(const char* name) : grib_accessor_class_section_length_t(name) {} + grib_accessor_g1_message_length_t() : + grib_accessor_section_length_t() { class_name_ = "g1_message_length"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1_message_length_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* sec4_length_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g1_section4_length.cc b/src/accessor/grib_accessor_class_g1_section4_length.cc index fe80e70e8..b4ff3bff6 100644 --- a/src/accessor/grib_accessor_class_g1_section4_length.cc +++ b/src/accessor/grib_accessor_class_g1_section4_length.cc @@ -11,40 +11,37 @@ #include "grib_accessor_class_g1_section4_length.h" -grib_accessor_class_g1_section4_length_t _grib_accessor_class_g1_section4_length{ "g1_section4_length" }; -grib_accessor_class* grib_accessor_class_g1_section4_length = &_grib_accessor_class_g1_section4_length; +grib_accessor_g1_section4_length_t _grib_accessor_g1_section4_length{}; +grib_accessor* grib_accessor_g1_section4_length = &_grib_accessor_g1_section4_length; - -void grib_accessor_class_g1_section4_length_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_g1_section4_length_t::init(const long len, grib_arguments* args) { - grib_accessor_class_section_length_t::init(a, len, args); - grib_accessor_g1_section4_length_t* self = (grib_accessor_g1_section4_length_t*)a; - self->total_length = grib_arguments_get_name(grib_handle_of_accessor(a), args, 0); + grib_accessor_section_length_t::init(len, args); + total_length_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 0); } -int grib_accessor_class_g1_section4_length_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g1_section4_length_t::pack_long(const long* val, size_t* len) { // Old implementation: // Here we assume that the totalLength will be coded AFTER the section4 length, and // the section4 length will be overwritten by the totalLength accessor for large GRIBs - // grib_accessor_class* super = *(a->cclass->super); + // grib_accessor* super = *(cclass_ ->super); // return super->pack_long(a,val,len); // Note: Do not directly call pack_long on base class // because in this special case we want to skip the checks. // So we call the helper function which has an extra argument - return pack_long_unsigned_helper(a, val, len, /*check=*/0); + return pack_long_unsigned_helper(val, len, /*check=*/0); } -int grib_accessor_class_g1_section4_length_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g1_section4_length_t::unpack_long(long* val, size_t* len) { - grib_accessor_g1_section4_length_t* self = (grib_accessor_g1_section4_length_t*)a; - int ret = 0; + int ret = 0; long total_length = 0, sec4_length = 0; - if ((ret = grib_get_g1_message_size(grib_handle_of_accessor(a), - grib_find_accessor(grib_handle_of_accessor(a), self->total_length), - a, + if ((ret = grib_get_g1_message_size(grib_handle_of_accessor(this), + grib_find_accessor(grib_handle_of_accessor(this), total_length_), + this, &total_length, &sec4_length)) != GRIB_SUCCESS) { return ret; diff --git a/src/accessor/grib_accessor_class_g1_section4_length.h b/src/accessor/grib_accessor_class_g1_section4_length.h index 9e805985c..f2c630968 100644 --- a/src/accessor/grib_accessor_class_g1_section4_length.h +++ b/src/accessor/grib_accessor_class_g1_section4_length.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_g1_section4_length_t : public grib_accessor_section_length_t { public: - /* Members defined in g1_section4_length */ - const char* total_length; -}; - -class grib_accessor_class_g1_section4_length_t : public grib_accessor_class_section_length_t -{ -public: - grib_accessor_class_g1_section4_length_t(const char* name) : grib_accessor_class_section_length_t(name) {} + grib_accessor_g1_section4_length_t() : + grib_accessor_section_length_t() { class_name_ = "g1_section4_length"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1_section4_length_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* total_length_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g1bitmap.cc b/src/accessor/grib_accessor_class_g1bitmap.cc index 331b800c5..6c9e6461f 100644 --- a/src/accessor/grib_accessor_class_g1bitmap.cc +++ b/src/accessor/grib_accessor_class_g1bitmap.cc @@ -10,20 +10,17 @@ #include "grib_accessor_class_g1bitmap.h" -grib_accessor_class_g1bitmap_t _grib_accessor_class_g1bitmap{ "g1bitmap" }; -grib_accessor_class* grib_accessor_class_g1bitmap = &_grib_accessor_class_g1bitmap; +grib_accessor_g1bitmap_t _grib_accessor_g1bitmap{}; +grib_accessor* grib_accessor_g1bitmap = &_grib_accessor_g1bitmap; - -void grib_accessor_class_g1bitmap_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_g1bitmap_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_bitmap_t::init(a, len, arg); - grib_accessor_g1bitmap_t* self = (grib_accessor_g1bitmap_t*)a; - self->unusedBits = grib_arguments_get_name(grib_handle_of_accessor(a), arg, 4); + grib_accessor_bitmap_t::init(len, arg); + unusedBits_ = grib_arguments_get_name(grib_handle_of_accessor(this), arg, 4); } -int grib_accessor_class_g1bitmap_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_g1bitmap_t::pack_double(const double* val, size_t* len) { - grib_accessor_g1bitmap_t* self = (grib_accessor_g1bitmap_t*)a; size_t tlen; unsigned char* buf = NULL; @@ -35,10 +32,10 @@ int grib_accessor_class_g1bitmap_t::pack_double(grib_accessor* a, const double* double miss_values = 0; tlen = ((*len + bit_padding - 1) / bit_padding * bit_padding) / 8; - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->missing_value, &miss_values)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(grib_handle_of_accessor(this), missing_value_, &miss_values)) != GRIB_SUCCESS) return err; - buf = (unsigned char*)grib_context_malloc_clear(a->context, tlen); + buf = (unsigned char*)grib_context_malloc_clear(context_, tlen); if (!buf) return GRIB_OUT_OF_MEMORY; pos = 0; @@ -51,47 +48,45 @@ int grib_accessor_class_g1bitmap_t::pack_double(grib_accessor* a, const double* } } - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), self->unusedBits, tlen * 8 - *len)) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(grib_handle_of_accessor(this), unusedBits_, tlen * 8 - *len)) != GRIB_SUCCESS) return err; - err = grib_buffer_replace(a, buf, tlen, 1, 1); + err = grib_buffer_replace(this, buf, tlen, 1, 1); if (err) return err; - grib_context_free(a->context, buf); + grib_context_free(context_, buf); return GRIB_SUCCESS; } -int grib_accessor_class_g1bitmap_t::value_count(grib_accessor* a, long* count) +int grib_accessor_g1bitmap_t::value_count(long* count) { - grib_accessor_g1bitmap_t* self = (grib_accessor_g1bitmap_t*)a; long tlen; int err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->unusedBits, &tlen)) != GRIB_SUCCESS) - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_class_bitmap.value_count : cannot get %s err=%d", self->unusedBits, err); + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), unusedBits_, &tlen)) != GRIB_SUCCESS) + grib_context_log(context_, GRIB_LOG_ERROR, "grib_accessor_bitmap.value_count : cannot get %s err=%d", unusedBits_, err); - *count = (a->length * 8) - tlen; + *count = (length_ * 8) - tlen; return err; } -int grib_accessor_class_g1bitmap_t::unpack_bytes(grib_accessor* a, unsigned char* val, size_t* len) +int grib_accessor_g1bitmap_t::unpack_bytes(unsigned char* val, size_t* len) { - unsigned char* buf = grib_handle_of_accessor(a)->buffer->data; - grib_accessor_g1bitmap_t* self = (grib_accessor_g1bitmap_t*)a; + unsigned char* buf = grib_handle_of_accessor(this)->buffer->data; long tlen; int err; - long length = a->byte_count(); - long offset = a->byte_offset(); + long length = byte_count(); + long offset = byte_offset(); if (*len < (size_t)length) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it is %ld bytes long\n", a->name, length); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s it is %ld bytes long\n", name_, length); *len = length; return GRIB_ARRAY_TOO_SMALL; } - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->unusedBits, &tlen)) != GRIB_SUCCESS) - grib_context_log(a->context, GRIB_LOG_ERROR, - "grib_accessor_class_bitmap.unpack_bytes : cannot get %s err=%d", self->unusedBits, err); + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), unusedBits_, &tlen)) != GRIB_SUCCESS) + grib_context_log(context_, GRIB_LOG_ERROR, + "grib_accessor_bitmap.unpack_bytes : cannot get %s err=%d", unusedBits_, err); length -= tlen / 8; memcpy(val, buf + offset, length); diff --git a/src/accessor/grib_accessor_class_g1bitmap.h b/src/accessor/grib_accessor_class_g1bitmap.h index 28914c591..458e0de58 100644 --- a/src/accessor/grib_accessor_class_g1bitmap.h +++ b/src/accessor/grib_accessor_class_g1bitmap.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,14 @@ class grib_accessor_g1bitmap_t : public grib_accessor_bitmap_t { public: - /* Members defined in g1bitmap */ - const char* unusedBits; -}; - -class grib_accessor_class_g1bitmap_t : public grib_accessor_class_bitmap_t -{ -public: - grib_accessor_class_g1bitmap_t(const char* name) : grib_accessor_class_bitmap_t(name) {} + grib_accessor_g1bitmap_t() : + grib_accessor_bitmap_t() { class_name_ = "g1bitmap"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1bitmap_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_bytes(grib_accessor*, unsigned char*, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_bytes(unsigned char*, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* unusedBits_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g1date.cc b/src/accessor/grib_accessor_class_g1date.cc index c9a3055dd..167265361 100644 --- a/src/accessor/grib_accessor_class_g1date.cc +++ b/src/accessor/grib_accessor_class_g1date.cc @@ -10,38 +10,35 @@ #include "grib_accessor_class_g1date.h" -grib_accessor_class_g1date_t _grib_accessor_class_g1date{ "g1date" }; -grib_accessor_class* grib_accessor_class_g1date = &_grib_accessor_class_g1date; +grib_accessor_g1date_t _grib_accessor_g1date{}; +grib_accessor* grib_accessor_g1date = &_grib_accessor_g1date; - -void grib_accessor_class_g1date_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g1date_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_g1date_t* self = (grib_accessor_g1date_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_long_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - self->century = grib_arguments_get_name(hand, c, n++); - self->year = grib_arguments_get_name(hand, c, n++); - self->month = grib_arguments_get_name(hand, c, n++); - self->day = grib_arguments_get_name(hand, c, n++); + century_ = grib_arguments_get_name(hand, c, n++); + year_ = grib_arguments_get_name(hand, c, n++); + month_ = grib_arguments_get_name(hand, c, n++); + day_ = grib_arguments_get_name(hand, c, n++); } -int grib_accessor_class_g1date_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g1date_t::unpack_long(long* val, size_t* len) { - grib_accessor_g1date_t* self = (grib_accessor_g1date_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); int ret = 0; long year = 0, century = 0, month = 0, day = 0; - if ((ret = grib_get_long_internal(hand, self->century, ¢ury)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, century_, ¢ury)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->day, &day)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, day_, &day)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->month, &month)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, month_, &month)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->year, &year)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, year_, &year)) != GRIB_SUCCESS) return ret; if (*len < 1) @@ -60,10 +57,9 @@ int grib_accessor_class_g1date_t::unpack_long(grib_accessor* a, long* val, size_ return GRIB_SUCCESS; } -int grib_accessor_class_g1date_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g1date_t::pack_long(const long* val, size_t* len) { - grib_accessor_g1date_t* self = (grib_accessor_g1date_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); int ret = 0; long v = val[0]; @@ -74,7 +70,7 @@ int grib_accessor_class_g1date_t::pack_long(grib_accessor* a, const long* val, s long d = grib_julian_to_date(grib_date_to_julian(v)); if (v != d) { - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_g1date_t: pack_long invalid date %ld, changed to %ld", v, d); + grib_context_log(context_, GRIB_LOG_ERROR, "grib_accessor_g1date_t: pack_long invalid date %ld, changed to %ld", v, d); return GRIB_ENCODING_ERROR; } @@ -91,13 +87,13 @@ int grib_accessor_class_g1date_t::pack_long(grib_accessor* a, const long* val, s else century++; - if ((ret = grib_set_long_internal(hand, self->century, century)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, century_, century)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(hand, self->day, day)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, day_, day)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(hand, self->month, month)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, month_, month)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(hand, self->year, year)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, year_, year)) != GRIB_SUCCESS) return ret; return GRIB_SUCCESS; @@ -118,22 +114,21 @@ static const char* months[] = { "dec", }; -int grib_accessor_class_g1date_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_g1date_t::unpack_string(char* val, size_t* len) { - grib_accessor_g1date_t* self = (grib_accessor_g1date_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); int ret = 0; char tmp[1024]; long year = 0, century = 0, month = 0, day = 0; - if ((ret = grib_get_long_internal(hand, self->century, ¢ury)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, century_, ¢ury)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->day, &day)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, day_, &day)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->month, &month)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, month_, &month)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->year, &year)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, year_, &year)) != GRIB_SUCCESS) return ret; if (*len < 1) @@ -162,7 +157,7 @@ int grib_accessor_class_g1date_t::unpack_string(grib_accessor* a, char* val, siz return GRIB_SUCCESS; } -int grib_accessor_class_g1date_t::value_count(grib_accessor* a, long* count) +int grib_accessor_g1date_t::value_count(long* count) { *count = 1; return 0; diff --git a/src/accessor/grib_accessor_class_g1date.h b/src/accessor/grib_accessor_class_g1date.h index 1195ac01c..d9eb0a586 100644 --- a/src/accessor/grib_accessor_class_g1date.h +++ b/src/accessor/grib_accessor_class_g1date.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,21 +15,18 @@ class grib_accessor_g1date_t : public grib_accessor_long_t { public: - /* Members defined in g1date */ - const char* century; - const char* year; - const char* month; - const char* day; -}; - -class grib_accessor_class_g1date_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_g1date_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_g1date_t() : + grib_accessor_long_t() { class_name_ = "g1date"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1date_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +protected: + const char* century_ = nullptr; + const char* year_ = nullptr; + const char* month_ = nullptr; + const char* day_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g1day_of_the_year_date.cc b/src/accessor/grib_accessor_class_g1day_of_the_year_date.cc index 9ca30593b..ba77d0cf0 100644 --- a/src/accessor/grib_accessor_class_g1day_of_the_year_date.cc +++ b/src/accessor/grib_accessor_class_g1day_of_the_year_date.cc @@ -10,26 +10,24 @@ #include "grib_accessor_class_g1day_of_the_year_date.h" -grib_accessor_class_g1day_of_the_year_date_t _grib_accessor_class_g1day_of_the_year_date{ "g1day_of_the_year_date" }; -grib_accessor_class* grib_accessor_class_g1day_of_the_year_date = &_grib_accessor_class_g1day_of_the_year_date; +grib_accessor_g1day_of_the_year_date_t _grib_accessor_g1day_of_the_year_date{}; +grib_accessor* grib_accessor_g1day_of_the_year_date = &_grib_accessor_g1day_of_the_year_date; - -void grib_accessor_class_g1day_of_the_year_date_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g1day_of_the_year_date_t::init(const long l, grib_arguments* c) { - grib_accessor_class_g1date_t::init(a, l, c); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_g1date_t::init(l, c); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -void grib_accessor_class_g1day_of_the_year_date_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_g1day_of_the_year_date_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } -int grib_accessor_class_g1day_of_the_year_date_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_g1day_of_the_year_date_t::unpack_string(char* val, size_t* len) { /* special clim case where each mont have 30 days.. to comply with mars*/ - grib_accessor_g1day_of_the_year_date_t* self = (grib_accessor_g1day_of_the_year_date_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); char tmp[1024]; long year = 0; @@ -39,10 +37,10 @@ int grib_accessor_class_g1day_of_the_year_date_t::unpack_string(grib_accessor* a long fullyear = 0; long fake_day_of_year = 0; - grib_get_long_internal(hand, self->century, ¢ury); - grib_get_long_internal(hand, self->day, &day); - grib_get_long_internal(hand, self->month, &month); - grib_get_long_internal(hand, self->year, &year); + grib_get_long_internal(hand, century_, ¢ury); + grib_get_long_internal(hand, day_, &day); + grib_get_long_internal(hand, month_, &month); + grib_get_long_internal(hand, year_, &year); fullyear = ((century - 1) * 100 + year); fake_day_of_year = ((month - 1) * 30) + day; diff --git a/src/accessor/grib_accessor_class_g1day_of_the_year_date.h b/src/accessor/grib_accessor_class_g1day_of_the_year_date.h index 5e484686c..372114ff0 100644 --- a/src/accessor/grib_accessor_class_g1day_of_the_year_date.h +++ b/src/accessor/grib_accessor_class_g1day_of_the_year_date.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,15 +15,10 @@ class grib_accessor_g1day_of_the_year_date_t : public grib_accessor_g1date_t { public: - /* Members defined in g1day_of_the_year_date */ -}; - -class grib_accessor_class_g1day_of_the_year_date_t : public grib_accessor_class_g1date_t -{ -public: - grib_accessor_class_g1day_of_the_year_date_t(const char* name) : grib_accessor_class_g1date_t(name) {} + grib_accessor_g1day_of_the_year_date_t() : + grib_accessor_g1date_t() { class_name_ = "g1day_of_the_year_date"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1day_of_the_year_date_t{}; } - int unpack_string(grib_accessor*, char*, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_string(char*, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_g1end_of_interval_monthly.cc b/src/accessor/grib_accessor_class_g1end_of_interval_monthly.cc index 3bf953598..43f7dbbb4 100644 --- a/src/accessor/grib_accessor_class_g1end_of_interval_monthly.cc +++ b/src/accessor/grib_accessor_class_g1end_of_interval_monthly.cc @@ -10,47 +10,42 @@ #include "grib_accessor_class_g1end_of_interval_monthly.h" -grib_accessor_class_g1end_of_interval_monthly_t _grib_accessor_class_g1end_of_interval_monthly{ "g1end_of_interval_monthly" }; -grib_accessor_class* grib_accessor_class_g1end_of_interval_monthly = &_grib_accessor_class_g1end_of_interval_monthly; +grib_accessor_g1end_of_interval_monthly_t _grib_accessor_g1end_of_interval_monthly{}; +grib_accessor* grib_accessor_g1end_of_interval_monthly = &_grib_accessor_g1end_of_interval_monthly; - -void grib_accessor_class_g1end_of_interval_monthly_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g1end_of_interval_monthly_t::init(const long l, grib_arguments* c) { - grib_accessor_class_abstract_vector_t::init(a, l, c); - grib_accessor_g1end_of_interval_monthly_t* self = (grib_accessor_g1end_of_interval_monthly_t*)a; - int n = 0; + grib_accessor_abstract_vector_t::init(l, c); + int n = 0; - self->verifyingMonth = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; + verifyingMonth_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + flags_ |= GRIB_ACCESSOR_FLAG_HIDDEN; - self->number_of_elements = 6; - self->v = (double*)grib_context_malloc(a->context, sizeof(double) * self->number_of_elements); + number_of_elements_ = 6; + v_ = (double*)grib_context_malloc(context_, sizeof(double) * number_of_elements_); - a->length = 0; - a->dirty = 1; + length_ = 0; + dirty_ = 1; } -int grib_accessor_class_g1end_of_interval_monthly_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_g1end_of_interval_monthly_t::unpack_double(double* val, size_t* len) { - grib_accessor_g1end_of_interval_monthly_t* self = (grib_accessor_g1end_of_interval_monthly_t*)a; - int ret = 0; - char verifyingMonth[7] = { - 0, - }; + int ret = 0; + char verifyingMonth[7] = {0,}; size_t slen = 7; long year = 0, month = 0, date = 0; const long mdays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; long days = 0; - if (!a->dirty) + if (!dirty_) return GRIB_SUCCESS; - if (*len != (size_t)self->number_of_elements) + if (*len != (size_t)number_of_elements_) return GRIB_ARRAY_TOO_SMALL; - if ((ret = grib_get_string(grib_handle_of_accessor(a), self->verifyingMonth, verifyingMonth, &slen)) != GRIB_SUCCESS) + if ((ret = grib_get_string(grib_handle_of_accessor(this), verifyingMonth_, verifyingMonth, &slen)) != GRIB_SUCCESS) return ret; date = atoi(verifyingMonth); @@ -68,41 +63,39 @@ int grib_accessor_class_g1end_of_interval_monthly_t::unpack_double(grib_accessor if (month < 1 || month > 12) return GRIB_INVALID_ARGUMENT; days = mdays[month - 1]; } - self->v[0] = year; - self->v[1] = month; + v_[0] = year; + v_[1] = month; - self->v[2] = days; - self->v[3] = 24; - self->v[4] = 00; - self->v[5] = 00; + v_[2] = days; + v_[3] = 24; + v_[4] = 00; + v_[5] = 00; - a->dirty = 0; + dirty_ = 0; - val[0] = self->v[0]; - val[1] = self->v[1]; - val[2] = self->v[2]; - val[3] = self->v[3]; - val[4] = self->v[4]; - val[5] = self->v[5]; + val[0] = v_[0]; + val[1] = v_[1]; + val[2] = v_[2]; + val[3] = v_[3]; + val[4] = v_[4]; + val[5] = v_[5]; return ret; } -int grib_accessor_class_g1end_of_interval_monthly_t::value_count(grib_accessor* a, long* count) +int grib_accessor_g1end_of_interval_monthly_t::value_count(long* count) { - grib_accessor_g1end_of_interval_monthly_t* self = (grib_accessor_g1end_of_interval_monthly_t*)a; - *count = self->number_of_elements; + *count = number_of_elements_; return 0; } -void grib_accessor_class_g1end_of_interval_monthly_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_g1end_of_interval_monthly_t::destroy(grib_context* c) { - grib_accessor_g1end_of_interval_monthly_t* self = (grib_accessor_g1end_of_interval_monthly_t*)a; - grib_context_free(c, self->v); - grib_accessor_class_abstract_vector_t::destroy(c, a); + grib_context_free(c, v_); + grib_accessor_abstract_vector_t::destroy(c); } -int grib_accessor_class_g1end_of_interval_monthly_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_g1end_of_interval_monthly_t::compare(grib_accessor* b) { int retval = GRIB_SUCCESS; double* aval = 0; @@ -111,9 +104,8 @@ int grib_accessor_class_g1end_of_interval_monthly_t::compare(grib_accessor* a, g long count = 0; size_t alen = 0; size_t blen = 0; - int err = 0; - err = a->value_count(&count); + int err = value_count(&count); if (err) return err; alen = count; @@ -126,20 +118,23 @@ int grib_accessor_class_g1end_of_interval_monthly_t::compare(grib_accessor* a, g if (alen != blen) return GRIB_COUNT_MISMATCH; - aval = (double*)grib_context_malloc(a->context, alen * sizeof(double)); - bval = (double*)grib_context_malloc(b->context, blen * sizeof(double)); + aval = (double*)grib_context_malloc(context_, alen * sizeof(double)); + bval = (double*)grib_context_malloc(b->context_, blen * sizeof(double)); - b->dirty = 1; - a->dirty = 1; + b->dirty_ = 1; + dirty_ = 1; - err = a->unpack_double(aval, &alen); + err = unpack_double(aval, &alen); + if (err) return err; err = b->unpack_double(bval, &blen); + if (err) return err; + for (size_t i = 0; i < alen && retval == GRIB_SUCCESS; ++i) { if (aval[i] != bval[i]) retval = GRIB_DOUBLE_VALUE_MISMATCH; } - grib_context_free(a->context, aval); - grib_context_free(b->context, bval); + grib_context_free(context_, aval); + grib_context_free(b->context_, bval); return retval; } diff --git a/src/accessor/grib_accessor_class_g1end_of_interval_monthly.h b/src/accessor/grib_accessor_class_g1end_of_interval_monthly.h index baaea5320..a0e0aaa1b 100644 --- a/src/accessor/grib_accessor_class_g1end_of_interval_monthly.h +++ b/src/accessor/grib_accessor_class_g1end_of_interval_monthly.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,18 +15,15 @@ class grib_accessor_g1end_of_interval_monthly_t : public grib_accessor_abstract_vector_t { public: - /* Members defined in g1end_of_interval_monthly */ - const char* verifyingMonth; -}; - -class grib_accessor_class_g1end_of_interval_monthly_t : public grib_accessor_class_abstract_vector_t -{ -public: - grib_accessor_class_g1end_of_interval_monthly_t(const char* name) : grib_accessor_class_abstract_vector_t(name) {} + grib_accessor_g1end_of_interval_monthly_t() : + grib_accessor_abstract_vector_t() { class_name_ = "g1end_of_interval_monthly"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1end_of_interval_monthly_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int compare(grib_accessor*, grib_accessor*) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void init(const long, grib_arguments*) override; + int compare(grib_accessor*) override; + +private: + const char* verifyingMonth_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g1fcperiod.cc b/src/accessor/grib_accessor_class_g1fcperiod.cc index 454a684d0..46acfbbf5 100644 --- a/src/accessor/grib_accessor_class_g1fcperiod.cc +++ b/src/accessor/grib_accessor_class_g1fcperiod.cc @@ -10,16 +10,15 @@ #include "grib_accessor_class_g1fcperiod.h" -grib_accessor_class_g1fcperiod_t _grib_accessor_class_g1fcperiod{ "g1fcperiod" }; -grib_accessor_class* grib_accessor_class_g1fcperiod = &_grib_accessor_class_g1fcperiod; +grib_accessor_g1fcperiod_t _grib_accessor_g1fcperiod{}; +grib_accessor* grib_accessor_g1fcperiod = &_grib_accessor_g1fcperiod; - -int grib_accessor_class_g1fcperiod_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_g1fcperiod_t::unpack_string(char* val, size_t* len) { long start = 0, theEnd = 0; char tmp[1024]; const size_t tmpLen = sizeof(tmp); - int err = grib_g1_step_get_steps(a, &start, &theEnd); + int err = grib_g1_step_get_steps(&start, &theEnd); size_t l = 0; if (err) diff --git a/src/accessor/grib_accessor_class_g1fcperiod.h b/src/accessor/grib_accessor_class_g1fcperiod.h index 1b5b8dc7e..8943966dc 100644 --- a/src/accessor/grib_accessor_class_g1fcperiod.h +++ b/src/accessor/grib_accessor_class_g1fcperiod.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,13 +15,8 @@ class grib_accessor_g1fcperiod_t : public grib_accessor_g1step_range_t { public: - /* Members defined in g1fcperiod */ -}; - -class grib_accessor_class_g1fcperiod_t : public grib_accessor_class_g1step_range_t -{ -public: - grib_accessor_class_g1fcperiod_t(const char* name) : grib_accessor_class_g1step_range_t(name) {} + grib_accessor_g1fcperiod_t() : + grib_accessor_g1step_range_t() { class_name_ = "g1fcperiod"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1fcperiod_t{}; } - int unpack_string(grib_accessor*, char*, size_t* len) override; + int unpack_string(char*, size_t* len) override; }; diff --git a/src/accessor/grib_accessor_class_g1forecastmonth.cc b/src/accessor/grib_accessor_class_g1forecastmonth.cc index c7745cfa7..6f9e00a64 100644 --- a/src/accessor/grib_accessor_class_g1forecastmonth.cc +++ b/src/accessor/grib_accessor_class_g1forecastmonth.cc @@ -10,30 +10,28 @@ #include "grib_accessor_class_g1forecastmonth.h" -grib_accessor_class_g1forecastmonth_t _grib_accessor_class_g1forecastmonth{ "g1forecastmonth" }; -grib_accessor_class* grib_accessor_class_g1forecastmonth = &_grib_accessor_class_g1forecastmonth; +grib_accessor_g1forecastmonth_t _grib_accessor_g1forecastmonth{}; +grib_accessor* grib_accessor_g1forecastmonth = &_grib_accessor_g1forecastmonth; - -void grib_accessor_class_g1forecastmonth_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g1forecastmonth_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_g1forecastmonth_t* self = (grib_accessor_g1forecastmonth_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_long_t::init(l, c); + grib_handle* h = grib_handle_of_accessor(this); + int n = 0; const int count = grib_arguments_get_count(c); if (count == 6) { /* GRIB1 case -- this needs to be refactored */ - self->verification_yearmonth = grib_arguments_get_name(h, c, n++); - self->base_date = grib_arguments_get_name(h, c, n++); - self->day = grib_arguments_get_name(h, c, n++); - self->hour = grib_arguments_get_name(h, c, n++); - self->fcmonth = grib_arguments_get_name(h, c, n++); - self->check = grib_arguments_get_name(h, c, n++); + verification_yearmonth_ = grib_arguments_get_name(h, c, n++); + base_date_ = grib_arguments_get_name(h, c, n++); + day_ = grib_arguments_get_name(h, c, n++); + hour_ = grib_arguments_get_name(h, c, n++); + fcmonth_ = grib_arguments_get_name(h, c, n++); + check_ = grib_arguments_get_name(h, c, n++); } } -void grib_accessor_class_g1forecastmonth_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_g1forecastmonth_t::dump(grib_dumper* dumper) { - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); } static int calculate_fcmonth(grib_accessor* a, long verification_yearmonth, long base_date, long day, long hour, long* result) @@ -62,8 +60,8 @@ static int calculate_fcmonth(grib_accessor* a, long verification_yearmonth, long static int unpack_long_edition2(grib_accessor* a, long* val, size_t* len) { - int err = 0; - grib_handle* h = grib_handle_of_accessor(a); + int err = 0; + grib_handle* h = grib_handle_of_accessor(a); long dataDate, verification_yearmonth; long year, month, day, hour, minute, second; long year2, month2, day2, hour2, minute2, second2; @@ -85,7 +83,7 @@ static int unpack_long_edition2(grib_accessor* a, long* val, size_t* len) if ((err = grib_get_long_internal(h, "indicatorOfUnitOfTimeRange", &indicatorOfUnitOfTimeRange)) != GRIB_SUCCESS) return err; if (indicatorOfUnitOfTimeRange != 1) { /* must be hour */ - grib_context_log(a->context, GRIB_LOG_ERROR, "indicatorOfUnitOfTimeRange must be 1 (hour)"); + grib_context_log(a->context_, GRIB_LOG_ERROR, "indicatorOfUnitOfTimeRange must be 1 (hour)"); return GRIB_DECODING_ERROR; } @@ -105,10 +103,9 @@ static int unpack_long_edition2(grib_accessor* a, long* val, size_t* len) return GRIB_SUCCESS; } -static int unpack_long_edition1(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g1forecastmonth_t::unpack_long_edition1(long* val, size_t* len) { - int err = 0; - grib_accessor_g1forecastmonth_t* self = (grib_accessor_g1forecastmonth_t*)a; + int err = 0; long verification_yearmonth = 0; long base_date = 0; @@ -118,29 +115,29 @@ static int unpack_long_edition1(grib_accessor* a, long* val, size_t* len) long check = 0; long fcmonth = 0; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), - self->verification_yearmonth, &verification_yearmonth)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), + verification_yearmonth_, &verification_yearmonth)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->base_date, &base_date)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), base_date_, &base_date)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->day, &day)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), day_, &day)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->hour, &hour)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), hour_, &hour)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->fcmonth, &gribForecastMonth)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), fcmonth_, &gribForecastMonth)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->check, &check)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), check_, &check)) != GRIB_SUCCESS) return err; - if ((err = calculate_fcmonth(a, verification_yearmonth, base_date, day, hour, val)) != GRIB_SUCCESS) + if ((err = calculate_fcmonth(this, verification_yearmonth, base_date, day, hour, val)) != GRIB_SUCCESS) return err; /* Verification - compare gribForecastMonth with fcmonth */ fcmonth = *val; if (gribForecastMonth != 0 && gribForecastMonth != fcmonth) { if (check) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s=%ld (%s-%s)=%ld", self->fcmonth, - gribForecastMonth, self->base_date, self->verification_yearmonth, fcmonth); + grib_context_log(context_, GRIB_LOG_ERROR, "%s=%ld (%s-%s)=%ld", fcmonth_, + gribForecastMonth, base_date, verification_yearmonth_, fcmonth); Assert(gribForecastMonth == fcmonth); } else { @@ -152,26 +149,25 @@ static int unpack_long_edition1(grib_accessor* a, long* val, size_t* len) return GRIB_SUCCESS; } -int grib_accessor_class_g1forecastmonth_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g1forecastmonth_t::unpack_long(long* val, size_t* len) { int err = 0; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); long edition = 0; if ((err = grib_get_long(hand, "edition", &edition)) != GRIB_SUCCESS) return err; if (edition == 1) - return unpack_long_edition1(a, val, len); + return unpack_long_edition1(val, len); if (edition == 2) - return unpack_long_edition2(a, val, len); + return unpack_long_edition2(this, val, len); return GRIB_UNSUPPORTED_EDITION; } /* TODO: Check for a valid date */ -int grib_accessor_class_g1forecastmonth_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g1forecastmonth_t::pack_long(const long* val, size_t* len) { - grib_accessor_g1forecastmonth_t* self = (grib_accessor_g1forecastmonth_t*)a; - return grib_set_long_internal(grib_handle_of_accessor(a), self->fcmonth, *val); + return grib_set_long_internal(grib_handle_of_accessor(this), fcmonth_, *val); } diff --git a/src/accessor/grib_accessor_class_g1forecastmonth.h b/src/accessor/grib_accessor_class_g1forecastmonth.h index cd3a6d5f6..8963103c7 100644 --- a/src/accessor/grib_accessor_class_g1forecastmonth.h +++ b/src/accessor/grib_accessor_class_g1forecastmonth.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,22 +15,21 @@ class grib_accessor_g1forecastmonth_t : public grib_accessor_long_t { public: - /* Members defined in g1forecastmonth */ - const char* verification_yearmonth; - const char* base_date; - const char* day; - const char* hour; - const char* fcmonth; - const char* check; -}; - -class grib_accessor_class_g1forecastmonth_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_g1forecastmonth_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_g1forecastmonth_t() : + grib_accessor_long_t() { class_name_ = "g1forecastmonth"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1forecastmonth_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* verification_yearmonth_ = nullptr; + const char* base_date_ = nullptr; + const char* day_ = nullptr; + const char* hour_ = nullptr; + const char* fcmonth_ = nullptr; + const char* check_ = nullptr; + + int unpack_long_edition1(long* val, size_t* len); }; diff --git a/src/accessor/grib_accessor_class_g1monthlydate.cc b/src/accessor/grib_accessor_class_g1monthlydate.cc index 04ee6c5f3..851f27988 100644 --- a/src/accessor/grib_accessor_class_g1monthlydate.cc +++ b/src/accessor/grib_accessor_class_g1monthlydate.cc @@ -10,26 +10,23 @@ #include "grib_accessor_class_g1monthlydate.h" -grib_accessor_class_g1monthlydate_t _grib_accessor_class_g1monthlydate{ "g1monthlydate" }; -grib_accessor_class* grib_accessor_class_g1monthlydate = &_grib_accessor_class_g1monthlydate; +grib_accessor_g1monthlydate_t _grib_accessor_g1monthlydate{}; +grib_accessor* grib_accessor_g1monthlydate = &_grib_accessor_g1monthlydate; - -void grib_accessor_class_g1monthlydate_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g1monthlydate_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_g1monthlydate_t* self = (grib_accessor_g1monthlydate_t*)a; + grib_accessor_long_t::init(l, c); + int n = 0; - self->date = grib_arguments_get_name(grib_handle_of_accessor(a), c, 0); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + date_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_g1monthlydate_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g1monthlydate_t::unpack_long(long* val, size_t* len) { - grib_accessor_g1monthlydate_t* self = (grib_accessor_g1monthlydate_t*)a; - long date = 0; - grib_get_long_internal(grib_handle_of_accessor(a), self->date, &date); + grib_get_long_internal(grib_handle_of_accessor(this), date_, &date); date /= 100; date *= 100; diff --git a/src/accessor/grib_accessor_class_g1monthlydate.h b/src/accessor/grib_accessor_class_g1monthlydate.h index 8503fa0af..5c9aa4787 100644 --- a/src/accessor/grib_accessor_class_g1monthlydate.h +++ b/src/accessor/grib_accessor_class_g1monthlydate.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,15 +15,12 @@ class grib_accessor_g1monthlydate_t : public grib_accessor_long_t { public: - /* Members defined in g1monthlydate */ - const char* date; -}; - -class grib_accessor_class_g1monthlydate_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_g1monthlydate_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_g1monthlydate_t() : + grib_accessor_long_t() { class_name_ = "g1monthlydate"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1monthlydate_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* date_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_complex.cc b/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_complex.cc index 012b3e6a4..e77e85bd1 100644 --- a/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_complex.cc +++ b/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_complex.cc @@ -10,57 +10,52 @@ #include "grib_accessor_class_g1number_of_coded_values_sh_complex.h" -grib_accessor_class_g1number_of_coded_values_sh_complex_t _grib_accessor_class_g1number_of_coded_values_sh_complex{ "g1number_of_coded_values_sh_complex" }; -grib_accessor_class* grib_accessor_class_g1number_of_coded_values_sh_complex = &_grib_accessor_class_g1number_of_coded_values_sh_complex; +grib_accessor_g1number_of_coded_values_sh_complex_t _grib_accessor_g1number_of_coded_values_sh_complex{}; +grib_accessor* grib_accessor_g1number_of_coded_values_sh_complex = &_grib_accessor_g1number_of_coded_values_sh_complex; - -void grib_accessor_class_g1number_of_coded_values_sh_complex_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g1number_of_coded_values_sh_complex_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_g1number_of_coded_values_sh_complex_t* self = (grib_accessor_g1number_of_coded_values_sh_complex_t*)a; - - int n = 0; - self->bitsPerValue = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->offsetBeforeData = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->offsetAfterData = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->unusedBits = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->numberOfValues = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->JS = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->KS = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->MS = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + grib_accessor_long_t::init(l, c); + int n = 0; + bitsPerValue_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + offsetBeforeData_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + offsetAfterData_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + unusedBits_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + numberOfValues_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + JS_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + KS_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + MS_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -int grib_accessor_class_g1number_of_coded_values_sh_complex_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g1number_of_coded_values_sh_complex_t::unpack_long(long* val, size_t* len) { int ret = GRIB_SUCCESS; long bpv = 0; long offsetBeforeData = 0, offsetAfterData = 0, unusedBits = 0, numberOfValues; long JS = 0, KS = 0, MS = 0, NS = 0; - grib_accessor_g1number_of_coded_values_sh_complex_t* self = (grib_accessor_g1number_of_coded_values_sh_complex_t*)a; - - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->bitsPerValue, &bpv)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), bitsPerValue_, &bpv)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetBeforeData, &offsetBeforeData)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), offsetBeforeData_, &offsetBeforeData)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetAfterData, &offsetAfterData)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), offsetAfterData_, &offsetAfterData)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->unusedBits, &unusedBits)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), unusedBits_, &unusedBits)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->JS, &JS)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), JS_, &JS)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->KS, &KS)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), KS_, &KS)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->MS, &MS)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), MS_, &MS)) != GRIB_SUCCESS) return ret; if (JS != KS || KS != MS) @@ -73,7 +68,7 @@ int grib_accessor_class_g1number_of_coded_values_sh_complex_t::unpack_long(grib_ *val = ((offsetAfterData - offsetBeforeData) * 8 - unusedBits + NS * (bpv - 32)) / bpv; } else { - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfValues, &numberOfValues)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), numberOfValues_, &numberOfValues)) != GRIB_SUCCESS) return ret; *val = numberOfValues; diff --git a/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_complex.h b/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_complex.h index 97379631d..db5159d0c 100644 --- a/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_complex.h +++ b/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_complex.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,22 +15,19 @@ class grib_accessor_g1number_of_coded_values_sh_complex_t : public grib_accessor_long_t { public: - /* Members defined in g1number_of_coded_values_sh_complex */ - const char* numberOfValues; - const char* bitsPerValue; - const char* offsetBeforeData; - const char* offsetAfterData; - const char* unusedBits; - const char* JS; - const char* KS; - const char* MS; -}; - -class grib_accessor_class_g1number_of_coded_values_sh_complex_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_g1number_of_coded_values_sh_complex_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_g1number_of_coded_values_sh_complex_t() : + grib_accessor_long_t() { class_name_ = "g1number_of_coded_values_sh_complex"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1number_of_coded_values_sh_complex_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* numberOfValues_ = nullptr; + const char* bitsPerValue_ = nullptr; + const char* offsetBeforeData_ = nullptr; + const char* offsetAfterData_ = nullptr; + const char* unusedBits_ = nullptr; + const char* JS_ = nullptr; + const char* KS_ = nullptr; + const char* MS_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_simple.cc b/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_simple.cc index 4e6f4fe7b..8821f6020 100644 --- a/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_simple.cc +++ b/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_simple.cc @@ -10,44 +10,39 @@ #include "grib_accessor_class_g1number_of_coded_values_sh_simple.h" -grib_accessor_class_g1number_of_coded_values_sh_simple_t _grib_accessor_class_g1number_of_coded_values_sh_simple{ "g1number_of_coded_values_sh_simple" }; -grib_accessor_class* grib_accessor_class_g1number_of_coded_values_sh_simple = &_grib_accessor_class_g1number_of_coded_values_sh_simple; +grib_accessor_g1number_of_coded_values_sh_simple_t _grib_accessor_g1number_of_coded_values_sh_simple{}; +grib_accessor* grib_accessor_g1number_of_coded_values_sh_simple = &_grib_accessor_g1number_of_coded_values_sh_simple; - -void grib_accessor_class_g1number_of_coded_values_sh_simple_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g1number_of_coded_values_sh_simple_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_g1number_of_coded_values_sh_simple_t* self = (grib_accessor_g1number_of_coded_values_sh_simple_t*)a; - - int n = 0; - self->bitsPerValue = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->offsetBeforeData = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->offsetAfterData = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->unusedBits = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->numberOfValues = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + grib_accessor_long_t::init(l, c); + int n = 0; + bitsPerValue_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + offsetBeforeData_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + offsetAfterData_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + unusedBits_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + numberOfValues_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -int grib_accessor_class_g1number_of_coded_values_sh_simple_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g1number_of_coded_values_sh_simple_t::unpack_long(long* val, size_t* len) { - int ret = GRIB_SUCCESS; - long bpv = 0; + int ret = GRIB_SUCCESS; + long bpv = 0; long offsetBeforeData = 0, offsetAfterData = 0, unusedBits = 0, numberOfValues; - grib_accessor_g1number_of_coded_values_sh_simple_t* self = (grib_accessor_g1number_of_coded_values_sh_simple_t*)a; - - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->bitsPerValue, &bpv)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), bitsPerValue_, &bpv)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetBeforeData, &offsetBeforeData)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), offsetBeforeData_, &offsetBeforeData)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetAfterData, &offsetAfterData)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), offsetAfterData_, &offsetAfterData)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->unusedBits, &unusedBits)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), unusedBits_, &unusedBits)) != GRIB_SUCCESS) return ret; if (bpv != 0) { @@ -55,7 +50,7 @@ int grib_accessor_class_g1number_of_coded_values_sh_simple_t::unpack_long(grib_a *val = ((offsetAfterData - offsetBeforeData) * 8 - unusedBits) / bpv; } else { - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfValues, &numberOfValues)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), numberOfValues_, &numberOfValues)) != GRIB_SUCCESS) return ret; *val = numberOfValues; diff --git a/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_simple.h b/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_simple.h index 4dafe6b15..f8188c9d3 100644 --- a/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_simple.h +++ b/src/accessor/grib_accessor_class_g1number_of_coded_values_sh_simple.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_g1number_of_coded_values_sh_simple_t : public grib_accessor_long_t { public: - /* Members defined in g1number_of_coded_values_sh_simple */ - const char* numberOfValues; - const char* bitsPerValue; - const char* offsetBeforeData; - const char* offsetAfterData; - const char* unusedBits; -}; - -class grib_accessor_class_g1number_of_coded_values_sh_simple_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_g1number_of_coded_values_sh_simple_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_g1number_of_coded_values_sh_simple_t() : + grib_accessor_long_t() { class_name_ = "g1number_of_coded_values_sh_simple"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1number_of_coded_values_sh_simple_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* numberOfValues_ = nullptr; + const char* bitsPerValue_ = nullptr; + const char* offsetBeforeData_ = nullptr; + const char* offsetAfterData_ = nullptr; + const char* unusedBits_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g1step_range.cc b/src/accessor/grib_accessor_class_g1step_range.cc index 0c8c886dc..ce82f455f 100644 --- a/src/accessor/grib_accessor_class_g1step_range.cc +++ b/src/accessor/grib_accessor_class_g1step_range.cc @@ -10,38 +10,35 @@ #include "grib_accessor_class_g1step_range.h" -grib_accessor_class_g1step_range_t _grib_accessor_class_g1step_range{ "g1step_range" }; -grib_accessor_class* grib_accessor_class_g1step_range = &_grib_accessor_class_g1step_range; +grib_accessor_g1step_range_t _grib_accessor_g1step_range{}; +grib_accessor* grib_accessor_g1step_range = &_grib_accessor_g1step_range; - -void grib_accessor_class_g1step_range_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g1step_range_t::init(const long l, grib_arguments* c) { - grib_accessor_class_abstract_long_vector_t::init(a, l, c); - grib_accessor_g1step_range_t* self = (grib_accessor_g1step_range_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + grib_accessor_abstract_long_vector_t::init(l, c); + grib_handle* h = grib_handle_of_accessor(this); + int n = 0; + p1_ = grib_arguments_get_name(h, c, n++); + p2_ = grib_arguments_get_name(h, c, n++); + timeRangeIndicator_ = grib_arguments_get_name(h, c, n++); + unit_ = grib_arguments_get_name(h, c, n++); + step_unit_ = grib_arguments_get_name(h, c, n++); + stepType_ = grib_arguments_get_name(h, c, n++); + patch_fp_precip_ = grib_arguments_get_name(h, c, n++); + error_on_units_ = 1; - int n = 0; - self->p1 = grib_arguments_get_name(h, c, n++); - self->p2 = grib_arguments_get_name(h, c, n++); - self->timeRangeIndicator = grib_arguments_get_name(h, c, n++); - self->unit = grib_arguments_get_name(h, c, n++); - self->step_unit = grib_arguments_get_name(h, c, n++); - self->stepType = grib_arguments_get_name(h, c, n++); - self->patch_fp_precip = grib_arguments_get_name(h, c, n++); - self->error_on_units = 1; + number_of_elements_ = 2; + v_ = (long*)grib_context_malloc_clear(h->context, + sizeof(long) * number_of_elements_); + pack_index_ = -1; + dirty_ = 1; - self->number_of_elements = 2; - self->v = (long*)grib_context_malloc_clear(h->context, - sizeof(long) * self->number_of_elements); - self->pack_index = -1; - a->dirty = 1; - - a->length = 0; + length_ = 0; } -void grib_accessor_class_g1step_range_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_g1step_range_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } static const int u2s1[] = { @@ -86,10 +83,8 @@ static const int u2s[] = { 1800 /* (15) 30 minutes */ }; - -int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd) +int grib_accessor_g1step_range_t::grib_g1_step_get_steps(long* start, long* theEnd) { - grib_accessor_g1step_range_t* self = (grib_accessor_g1step_range_t*)a; int err = 0; long p1 = 0, p2 = 0, unit = 0, timeRangeIndicator = 0, timeRangeIndicatorFromStepRange = 0; long step_unit = 1; @@ -98,30 +93,30 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd) long newstart, newend; int factor = 1; long u2sf, u2sf_step_unit; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); - if (self->step_unit != NULL) - grib_get_long_internal(hand, self->step_unit, &step_unit); + if (step_unit_ != NULL) + grib_get_long_internal(hand, step_unit_, &step_unit); if (err != GRIB_SUCCESS) return err; - err = grib_get_long_internal(hand, self->unit, &unit); + err = grib_get_long_internal(hand, unit_, &unit); if (err) return err; if (unit == 254) { unit = 15; /* See ECC-316: WMO says 254 is for 'seconds' but we use 15! */ } - err = grib_get_long_internal(hand, self->p1, &p1); + err = grib_get_long_internal(hand, p1_, &p1); if (err) return err; - err = grib_get_long_internal(hand, self->p2, &p2); + err = grib_get_long_internal(hand, p2_, &p2); if (err) return err; - err = grib_get_long_internal(hand, self->timeRangeIndicator, &timeRangeIndicator); + err = grib_get_long_internal(hand, timeRangeIndicator_, &timeRangeIndicator); if (err) return err; @@ -132,8 +127,8 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd) if (timeRangeIndicatorFromStepRange == 10) timeRangeIndicator = timeRangeIndicatorFromStepRange; - if (self->stepType) { - err = grib_get_string_internal(hand, self->stepType, stepType, &stepTypeLen); + if (stepType_) { + err = grib_get_string_internal(hand, stepType_, stepType, &stepTypeLen); if (err) return err; } @@ -184,9 +179,8 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd) return 0; } -int grib_accessor_class_g1step_range_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_g1step_range_t::unpack_string(char* val, size_t* len) { - grib_accessor_g1step_range_t* self = (grib_accessor_g1step_range_t*)a; char buf[100]; size_t size = 0; long start = 0, theEnd = 0; @@ -195,36 +189,36 @@ int grib_accessor_class_g1step_range_t::unpack_string(grib_accessor* a, char* va int err = 0; char stepType[20] = {0,}; size_t stepTypeLen = 20; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); - if ((err = grib_g1_step_get_steps(a, &start, &theEnd)) != GRIB_SUCCESS) { + if ((err = grib_g1_step_get_steps(&start, &theEnd)) != GRIB_SUCCESS) { size_t step_unit_string_len = 10; char step_unit_string[10]; - if (self->step_unit != NULL) - grib_get_string(hand, self->step_unit, step_unit_string, &step_unit_string_len); + if (step_unit_ != NULL) + grib_get_string(hand, step_unit_, step_unit_string, &step_unit_string_len); else snprintf(step_unit_string, sizeof(step_unit_string), "h"); - if (self->error_on_units) { - grib_get_long_internal(hand, self->unit, &unit); + if (error_on_units_) { + grib_get_long_internal(hand, unit_, &unit); if (unit == 254) { unit = 15; /* See ECC-316 */ } - grib_set_long_internal(hand, self->step_unit, unit); - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_set_long_internal(hand, step_unit_, unit); + grib_context_log(context_, GRIB_LOG_ERROR, "unable to represent the step in %s\n Hint: try changing the step units", step_unit_string); } return err; } - err = grib_get_long_internal(hand, self->timeRangeIndicator, &timeRangeIndicator); + err = grib_get_long_internal(hand, timeRangeIndicator_, &timeRangeIndicator); if (err) return err; - if (self->stepType) { - err = grib_get_string_internal(hand, self->stepType, stepType, &stepTypeLen); + if (stepType_) { + err = grib_get_string_internal(hand, stepType_, stepType, &stepTypeLen); if (err) return err; } @@ -232,7 +226,7 @@ int grib_accessor_class_g1step_range_t::unpack_string(grib_accessor* a, char* va snprintf(stepType, sizeof(stepType), "unknown"); /* Patch for old forecast probabilities */ - if (self->patch_fp_precip) { + if (patch_fp_precip_) { start += 24; } @@ -265,7 +259,7 @@ int grib_accessor_class_g1step_range_t::unpack_string(grib_accessor* a, char* va } } else { - grib_context_log(a->context, GRIB_LOG_ERROR, "Unknown stepType=[%s] timeRangeIndicator=[%ld]", stepType, timeRangeIndicator); + grib_context_log(context_, GRIB_LOG_ERROR, "Unknown stepType=[%s] timeRangeIndicator=[%ld]", stepType, timeRangeIndicator); return GRIB_NOT_IMPLEMENTED; } @@ -336,10 +330,9 @@ static int grib_g1_step_apply_units( return GRIB_WRONG_STEP; } -int grib_accessor_class_g1step_range_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_g1step_range_t::pack_string(const char* val, size_t* len) { - grib_accessor_g1step_range_t* self = (grib_accessor_g1step_range_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); long timeRangeIndicator = 0, P1 = 0, P2 = 0; long start = 0, theEnd = -1, unit = 0, ounit = 0, step_unit = 1; int ret = 0; @@ -349,8 +342,8 @@ int grib_accessor_class_g1step_range_t::pack_string(grib_accessor* a, const char char stepType[20] = {0,}; size_t stepTypeLen = 20; - if (self->stepType) { - ret = grib_get_string_internal(h, self->stepType, stepType, &stepTypeLen); + if (stepType_) { + ret = grib_get_string_internal(h, stepType_, stepType, &stepTypeLen); if (ret) return ret; } @@ -361,18 +354,18 @@ int grib_accessor_class_g1step_range_t::pack_string(grib_accessor* a, const char return ret; /* don't change timeRangeIndicator when setting step EXCEPT IF instant*/ - if ((ret = grib_get_long_internal(h, self->timeRangeIndicator, &timeRangeIndicator))) + if ((ret = grib_get_long_internal(h, timeRangeIndicator_, &timeRangeIndicator))) return ret; instant = (strcmp(stepType, "instant") == 0) ? 1 : 0; - if ((ret = grib_get_long_internal(h, self->unit, &unit))) + if ((ret = grib_get_long_internal(h, unit_, &unit))) return ret; if (unit == 254) { unit = 15; /* See ECC-316 */ } - if (self->step_unit != NULL && (ret = grib_get_long_internal(h, self->step_unit, &step_unit))) + if (step_unit_ != NULL && (ret = grib_get_long_internal(h, step_unit_, &step_unit))) return ret; ounit = unit; @@ -383,9 +376,9 @@ int grib_accessor_class_g1step_range_t::pack_string(grib_accessor* a, const char theEnd = strtol(++p, &q, 10); if (start == 0 && theEnd == 0) { - if ((ret = grib_set_long_internal(h, self->p1, start)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, p1_, start)) != GRIB_SUCCESS) return ret; - ret = grib_set_long_internal(h, self->p2, theEnd); + ret = grib_set_long_internal(h, p2_, theEnd); return ret; } end_sec = theEnd * u2s[step_unit]; @@ -394,7 +387,7 @@ int grib_accessor_class_g1step_range_t::pack_string(grib_accessor* a, const char if ((end_sec > 918000 || start_sec > 918000) && h->context->gribex_mode_on && instant) { timeRangeIndicator = 10; - if ((ret = grib_set_long_internal(h, self->timeRangeIndicator, 10))) + if ((ret = grib_set_long_internal(h, timeRangeIndicator_, 10))) return ret; /* TODO move to the def file*/ if ((ret = grib_set_long_internal(h, "timeRangeIndicatorFromStepRange", 10))) @@ -411,38 +404,38 @@ int grib_accessor_class_g1step_range_t::pack_string(grib_accessor* a, const char if (h->context->gribex_mode_on == 0) { grib_context_log(h->context, GRIB_LOG_ERROR, "Unable to set %s: end must be equal to start when timeRangeIndicator=10", - a->name); + name_); return GRIB_WRONG_STEP; } else start = theEnd; } if ((ret = grib_g1_step_apply_units(&start, &theEnd, &step_unit, &P1, &P2, &unit, 65535, instant)) != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "unable to find units to set %s=%s", a->name, val); + grib_context_log(h->context, GRIB_LOG_ERROR, "unable to find units to set %s=%s", name_, val); return ret; } - p1_accessor = grib_find_accessor(grib_handle_of_accessor(a), self->p1); + p1_accessor = grib_find_accessor(grib_handle_of_accessor(this), p1_); if (p1_accessor == NULL) { - grib_context_log(h->context, GRIB_LOG_ERROR, "unable to find accessor %s", self->p1); + grib_context_log(h->context, GRIB_LOG_ERROR, "unable to find accessor %s", p1_); return GRIB_NOT_FOUND; } - off = p1_accessor->offset * 8; + off = p1_accessor->offset_ * 8; /* Note: here we assume the key P2 is one octet and immediately follows P1. Hence 16 bits */ - ret = grib_encode_unsigned_long(grib_handle_of_accessor(a)->buffer->data, P1, &off, 16); + ret = grib_encode_unsigned_long(grib_handle_of_accessor(this)->buffer->data, P1, &off, 16); if (ret != 0) return ret; if (h->context->debug) { long dp1, dp2; - grib_get_long(h, self->p1, &dp1); - grib_get_long(h, self->p2, &dp2); + grib_get_long(h, p1_, &dp1); + grib_get_long(h, p2_, &dp2); fprintf(stderr, "ECCODES DEBUG pack_string: P1=%ld P2=%ld (as two octets => %ld)\n", dp1, dp2, P1); } if (ounit != unit) - ret = grib_set_long_internal(h, self->unit, unit); + ret = grib_set_long_internal(h, unit_, unit); return ret; } @@ -451,7 +444,7 @@ int grib_accessor_class_g1step_range_t::pack_string(grib_accessor* a, const char if (instant || h->context->gribex_mode_on) { long off = 0; grib_accessor* p1_accessor = NULL; - if ((ret = grib_set_long_internal(h, self->timeRangeIndicator, 10))) + if ((ret = grib_set_long_internal(h, timeRangeIndicator_, 10))) return ret; /* TODO move to the def file*/ if ((ret = grib_set_long_internal(h, "timeRangeIndicatorFromStepRange", 10))) @@ -459,80 +452,78 @@ int grib_accessor_class_g1step_range_t::pack_string(grib_accessor* a, const char if (theEnd != start && !h->context->gribex_mode_on) { grib_context_log(h->context, GRIB_LOG_ERROR, "Unable to set %s: end must be equal to start when timeRangeIndicator=10", - a->name); + name_); return GRIB_WRONG_STEP; } else start = theEnd; if ((ret = grib_g1_step_apply_units(&start, &theEnd, &step_unit, &P1, &P2, &unit, 65535, instant)) != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "unable to find units to set %s=%s", a->name, val); + grib_context_log(h->context, GRIB_LOG_ERROR, "unable to find units to set %s=%s", name_, val); return ret; } - p1_accessor = grib_find_accessor(grib_handle_of_accessor(a), self->p1); + p1_accessor = grib_find_accessor(grib_handle_of_accessor(this), p1_); if (p1_accessor == NULL) { - grib_context_log(h->context, GRIB_LOG_ERROR, "unable to find accessor %s", self->p1); + grib_context_log(h->context, GRIB_LOG_ERROR, "unable to find accessor %s", p1_); return GRIB_NOT_FOUND; } - off = p1_accessor->offset * 8; + off = p1_accessor->offset_ * 8; /* Note: case for timeRangeIndicator of 10 * We assume the key P2 is one octet and immediately follows P1. Hence 16 bits */ - ret = grib_encode_unsigned_long(grib_handle_of_accessor(a)->buffer->data, P1, &off, 16); + ret = grib_encode_unsigned_long(grib_handle_of_accessor(this)->buffer->data, P1, &off, 16); if (ret != 0) return ret; if (h->context->debug) { long dp1, dp2; - grib_get_long(h, self->p1, &dp1); - grib_get_long(h, self->p2, &dp2); + grib_get_long(h, p1_, &dp1); + grib_get_long(h, p2_, &dp2); fprintf(stderr, "ECCODES DEBUG pack_string: P1=%ld P2=%ld (as two octets => %ld)\n", dp1, dp2, P1); } if (ounit != unit) - ret = grib_set_long_internal(h, self->unit, unit); + ret = grib_set_long_internal(h, unit_, unit); } if (ret == GRIB_WRONG_STEP) { grib_context_log(h->context, GRIB_LOG_ERROR, - "Failed to set %s=%s: Keys P1 and P2 are one octet each (Range 0 to 255)", a->name, val); + "Failed to set %s=%s: Keys P1 and P2 are one octet each (Range 0 to 255)", name_, val); } return ret; } if (ounit != unit) - if ((ret = grib_set_long_internal(h, self->unit, unit)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, unit_, unit)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(h, self->p1, P1)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, p1_, P1)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(h, self->p2, P2)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, p2_, P2)) != GRIB_SUCCESS) return ret; - self->v[0] = start; - self->v[1] = theEnd; - a->dirty = 0; + v_[0] = start; + v_[1] = theEnd; + dirty_ = 0; return 0; } -int grib_accessor_class_g1step_range_t::value_count(grib_accessor* a, long* count) +int grib_accessor_g1step_range_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_g1step_range_t::string_length(grib_accessor* a) +size_t grib_accessor_g1step_range_t::string_length() { return 255; } -int grib_accessor_class_g1step_range_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g1step_range_t::pack_long(const long* val, size_t* len) { - grib_accessor_g1step_range_t* self = (grib_accessor_g1step_range_t*)a; - - char buff[256] = {0,}; + char buff[256]; size_t bufflen = 100; char sval[100] = { 0 }; char* p = sval; @@ -542,27 +533,27 @@ int grib_accessor_class_g1step_range_t::pack_long(grib_accessor* a, const long* long step_unit = 0; int err = 0; - if (self->stepType) { - err = grib_get_string_internal(grib_handle_of_accessor(a), self->stepType, stepType, &stepTypeLen); + if (stepType_) { + err = grib_get_string_internal(grib_handle_of_accessor(this), stepType_, stepType, &stepTypeLen); if (err) return err; } else snprintf(stepType, sizeof(stepType), "unknown"); - if (self->step_unit != NULL && (err = grib_get_long_internal(grib_handle_of_accessor(a), self->step_unit, &step_unit))) + if (step_unit_ != NULL && (err = grib_get_long_internal(grib_handle_of_accessor(this), step_unit_, &step_unit))) return err; - switch (self->pack_index) { + switch (pack_index_) { case -1: - self->pack_index = -1; + pack_index_ = -1; snprintf(buff, sizeof(buff), "%ld", *val); - return pack_string(a, buff, &bufflen); + return pack_string(buff, &bufflen); case 0: - self->pack_index = -1; - self->error_on_units = 0; - unpack_string(a, sval, &svallen); - self->error_on_units = 1; + pack_index_ = -1; + error_on_units_ = 0; + unpack_string(sval, &svallen); + error_on_units_ = 1; while (*p != '-' && *p != '\0') p++; if (*p == '-') { @@ -576,12 +567,12 @@ int grib_accessor_class_g1step_range_t::pack_long(grib_accessor* a, const long* snprintf(buff, sizeof(buff), "%ld", *val); } } - return pack_string(a, buff, &bufflen); + return pack_string(buff, &bufflen); case 1: - self->pack_index = -1; - self->error_on_units = 0; - unpack_string(a, sval, &svallen); - self->error_on_units = 1; + pack_index_ = -1; + error_on_units_ = 0; + unpack_string(sval, &svallen); + error_on_units_ = 1; while (*p != '-' && *p != '\0') p++; if (*p == '-') { @@ -596,18 +587,17 @@ int grib_accessor_class_g1step_range_t::pack_long(grib_accessor* a, const long* snprintf(buff, sizeof(buff), "%ld", *val); } } - return pack_string(a, buff, &bufflen); + return pack_string(buff, &bufflen); default: - Assert(self->pack_index < 2); + Assert(pack_index_ < 2); break; } return GRIB_INTERNAL_ERROR; } -int grib_accessor_class_g1step_range_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g1step_range_t::unpack_long(long* val, size_t* len) { - grib_accessor_g1step_range_t* self = (grib_accessor_g1step_range_t*)a; char buff[100]; size_t bufflen = 100; long start, theEnd; @@ -616,7 +606,7 @@ int grib_accessor_class_g1step_range_t::unpack_long(grib_accessor* a, long* val, int err = 0; /*TODO implement dirty*/ - if ((err = unpack_string(a, buff, &bufflen)) != GRIB_SUCCESS) + if ((err = unpack_string(buff, &bufflen)) != GRIB_SUCCESS) return err; start = strtol(buff, &p, 10); @@ -624,26 +614,25 @@ int grib_accessor_class_g1step_range_t::unpack_long(grib_accessor* a, long* val, if (*p != 0) theEnd = strtol(++p, &q, 10); - if (self->pack_index == 1) + if (pack_index_ == 1) *val = start; else *val = theEnd; - self->v[0] = start; - self->v[1] = theEnd; - a->dirty = 0; + v_[0] = start; + v_[1] = theEnd; + dirty_ = 0; return 0; } -int grib_accessor_class_g1step_range_t::get_native_type(grib_accessor* a) +long grib_accessor_g1step_range_t::get_native_type() { return GRIB_TYPE_STRING; } -void grib_accessor_class_g1step_range_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_g1step_range_t::destroy(grib_context* c) { - grib_accessor_g1step_range_t* self = (grib_accessor_g1step_range_t*)a; - grib_context_free(c, self->v); - grib_accessor_class_abstract_long_vector_t::destroy(c, a); + grib_context_free(c, v_); + grib_accessor_abstract_long_vector_t::destroy(c); } diff --git a/src/accessor/grib_accessor_class_g1step_range.h b/src/accessor/grib_accessor_class_g1step_range.h index 7ca19cb08..9fc147d36 100644 --- a/src/accessor/grib_accessor_class_g1step_range.h +++ b/src/accessor/grib_accessor_class_g1step_range.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,30 +15,30 @@ class grib_accessor_g1step_range_t : public grib_accessor_abstract_long_vector_t { public: - /* Members defined in g1step_range */ - const char* p1; - const char* p2; - const char* timeRangeIndicator; - const char *unit; - const char *step_unit; - const char *stepType; - const char *patch_fp_precip; - int error_on_units; -}; - -class grib_accessor_class_g1step_range_t : public grib_accessor_class_abstract_long_vector_t -{ -public: - grib_accessor_class_g1step_range_t(const char* name) : grib_accessor_class_abstract_long_vector_t(name) {} + grib_accessor_g1step_range_t() : + grib_accessor_abstract_long_vector_t() { class_name_ = "g1step_range"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1step_range_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +protected: + int grib_g1_step_get_steps(long* start, long* theEnd); + +private: + const char* p1_ = nullptr; + const char* p2_ = nullptr; + const char* timeRangeIndicator_ = nullptr; + const char* unit_ = nullptr; + const char* step_unit_ = nullptr; + const char* stepType_ = nullptr; + const char* patch_fp_precip_ = nullptr; + int error_on_units_ = 0; }; diff --git a/src/accessor/grib_accessor_class_g1verificationdate.cc b/src/accessor/grib_accessor_class_g1verificationdate.cc index 3d45de3ed..9cfa720d6 100644 --- a/src/accessor/grib_accessor_class_g1verificationdate.cc +++ b/src/accessor/grib_accessor_class_g1verificationdate.cc @@ -10,27 +10,23 @@ #include "grib_accessor_class_g1verificationdate.h" -grib_accessor_class_g1verificationdate_t _grib_accessor_class_g1verificationdate{ "g1verificationdate" }; -grib_accessor_class* grib_accessor_class_g1verificationdate = &_grib_accessor_class_g1verificationdate; +grib_accessor_g1verificationdate_t _grib_accessor_g1verificationdate{}; +grib_accessor* grib_accessor_g1verificationdate = &_grib_accessor_g1verificationdate; - -void grib_accessor_class_g1verificationdate_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g1verificationdate_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_g1verificationdate_t* self = (grib_accessor_g1verificationdate_t*)a; + grib_accessor_long_t::init(l, c); int n = 0; - self->date = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->time = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->step = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + date_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + time_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + step_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_g1verificationdate_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g1verificationdate_t::unpack_long(long* val, size_t* len) { - grib_accessor_g1verificationdate_t* self = (grib_accessor_g1verificationdate_t*)a; - int ret = 0; long date = 0; long time = 0; @@ -40,11 +36,11 @@ int grib_accessor_class_g1verificationdate_t::unpack_long(grib_accessor* a, long long vdate = 0; long vd = 0; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->date, &date)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), date_, &date)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->time, &time)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), time_, &time)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->step, &step)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), step_, &step)) != GRIB_SUCCESS) return ret; time /= 100; @@ -54,7 +50,7 @@ int grib_accessor_class_g1verificationdate_t::unpack_long(grib_accessor* a, long vd = vtime / 24; vdate = grib_julian_to_date(vd); - //printf("\n********\n date %d, time %d, step %d, vdate: %d, cdate %d, vd %d\n********\n", date, time, step, vdate, cdate, vd); + // printf("\n********\n date %d, time %d, step %d, vdate: %d, cdate %d, vd %d\n********\n", date, time, step, vdate, cdate, vd); if (*len < 1) return GRIB_ARRAY_TOO_SMALL; diff --git a/src/accessor/grib_accessor_class_g1verificationdate.h b/src/accessor/grib_accessor_class_g1verificationdate.h index 0e0469926..d8bd4fbab 100644 --- a/src/accessor/grib_accessor_class_g1verificationdate.h +++ b/src/accessor/grib_accessor_class_g1verificationdate.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,14 @@ class grib_accessor_g1verificationdate_t : public grib_accessor_long_t { public: - /* Members defined in g1verificationdate */ - const char* date; - const char* time; - const char* step; -}; - -class grib_accessor_class_g1verificationdate_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_g1verificationdate_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_g1verificationdate_t() : + grib_accessor_long_t() { class_name_ = "g1verificationdate"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g1verificationdate_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* date_ = nullptr; + const char* time_ = nullptr; + const char* step_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g2_aerosol.cc b/src/accessor/grib_accessor_class_g2_aerosol.cc index 4240b74e9..f32d51e7c 100644 --- a/src/accessor/grib_accessor_class_g2_aerosol.cc +++ b/src/accessor/grib_accessor_class_g2_aerosol.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,29 +10,26 @@ #include "grib_accessor_class_g2_aerosol.h" -grib_accessor_class_g2_aerosol_t _grib_accessor_class_g2_aerosol{ "g2_aerosol" }; -grib_accessor_class* grib_accessor_class_g2_aerosol = &_grib_accessor_class_g2_aerosol; +grib_accessor_g2_aerosol_t _grib_accessor_g2_aerosol{}; +grib_accessor* grib_accessor_g2_aerosol = &_grib_accessor_g2_aerosol; - -void grib_accessor_class_g2_aerosol_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g2_aerosol_t::init(const long l, grib_arguments* c) { - grib_accessor_class_unsigned_t::init(a, l, c); - grib_accessor_g2_aerosol_t* self = (grib_accessor_g2_aerosol_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_unsigned_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - self->productDefinitionTemplateNumber = grib_arguments_get_name(hand, c, n++); - self->stepType = grib_arguments_get_name(hand, c, n++); - self->optical = grib_arguments_get_long(hand, c, n++); + productDefinitionTemplateNumber_ = grib_arguments_get_name(hand, c, n++); + stepType_ = grib_arguments_get_name(hand, c, n++); + optical_ = grib_arguments_get_long(hand, c, n++); } -int grib_accessor_class_g2_aerosol_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g2_aerosol_t::unpack_long(long* val, size_t* len) { - grib_accessor_g2_aerosol_t* self = (grib_accessor_g2_aerosol_t*)a; long productDefinitionTemplateNumber = 0; - grib_get_long(grib_handle_of_accessor(a), self->productDefinitionTemplateNumber, &productDefinitionTemplateNumber); + grib_get_long(grib_handle_of_accessor(this), productDefinitionTemplateNumber_, &productDefinitionTemplateNumber); - if (self->optical) + if (optical_) *val = grib2_is_PDTN_AerosolOptical(productDefinitionTemplateNumber); else *val = grib2_is_PDTN_Aerosol(productDefinitionTemplateNumber); @@ -41,28 +37,29 @@ int grib_accessor_class_g2_aerosol_t::unpack_long(grib_accessor* a, long* val, s return GRIB_SUCCESS; } -int grib_accessor_class_g2_aerosol_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g2_aerosol_t::pack_long(const long* val, size_t* len) { - grib_accessor_g2_aerosol_t* self = (grib_accessor_g2_aerosol_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); long productDefinitionTemplateNumber = -1; long productDefinitionTemplateNumberNew = -1; - //long type=-1; - //long stream=-1; + // long type=-1; + // long stream=-1; long eps = -1; char stepType[15] = {0,}; size_t slen = 15; - //int aerosol = *val; + // int aerosol = *val; int isInstant = 0; - //long derivedForecast=-1; + // long derivedForecast=-1; int ret = 0; - if (grib_get_long(hand, self->productDefinitionTemplateNumber, &productDefinitionTemplateNumber) != GRIB_SUCCESS) + if (grib_get_long(hand, productDefinitionTemplateNumber_, &productDefinitionTemplateNumber) != GRIB_SUCCESS) return GRIB_SUCCESS; - // grib_get_long(hand, self->type,&type); - // grib_get_long(hand, self->stream,&stream); - ret = grib_get_string(hand, self->stepType, stepType, &slen); + /* + grib_get_long(hand, type_ ,&type); + grib_get_long(hand, stream_ ,&stream); + */ + ret = grib_get_string(hand, stepType_, stepType, &slen); Assert(ret == GRIB_SUCCESS); // eps = grib2_is_PDTN_EPS(productDefinitionTemplateNumber); @@ -82,14 +79,14 @@ int grib_accessor_class_g2_aerosol_t::pack_long(grib_accessor* a, const long* va } else { if (isInstant) { - productDefinitionTemplateNumberNew = 48; // 44 is deprecated + productDefinitionTemplateNumberNew = 48; // 44 is deprecated } else { productDefinitionTemplateNumberNew = 46; } } - if (self->optical) { + if (optical_) { // Note: There is no interval based template for optical properties of aerosol! if (eps) productDefinitionTemplateNumberNew = 49; @@ -102,14 +99,14 @@ int grib_accessor_class_g2_aerosol_t::pack_long(grib_accessor* a, const long* va } if (productDefinitionTemplateNumber != productDefinitionTemplateNumberNew) { - grib_set_long(hand, self->productDefinitionTemplateNumber, productDefinitionTemplateNumberNew); - // if (derivedForecast>=0) grib_set_long(hand, self->derivedForecast,derivedForecast); + grib_set_long(hand, productDefinitionTemplateNumber_, productDefinitionTemplateNumberNew); + // if (derivedForecast>=0) grib_set_long(hand, derivedForecast_ ,derivedForecast); } return 0; } -int grib_accessor_class_g2_aerosol_t::value_count(grib_accessor* a, long* count) +int grib_accessor_g2_aerosol_t::value_count(long* count) { *count = 1; return 0; diff --git a/src/accessor/grib_accessor_class_g2_aerosol.h b/src/accessor/grib_accessor_class_g2_aerosol.h index 9fbd0c79b..6b9c4a957 100644 --- a/src/accessor/grib_accessor_class_g2_aerosol.h +++ b/src/accessor/grib_accessor_class_g2_aerosol.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_g2_aerosol_t : public grib_accessor_unsigned_t { public: - /* Members defined in g2_aerosol */ - const char* productDefinitionTemplateNumber; - const char* stepType; - int optical; -}; - -class grib_accessor_class_g2_aerosol_t : public grib_accessor_class_unsigned_t -{ -public: - grib_accessor_class_g2_aerosol_t(const char* name) : grib_accessor_class_unsigned_t(name) {} + grib_accessor_g2_aerosol_t() : + grib_accessor_unsigned_t() { class_name_ = "g2_aerosol"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2_aerosol_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* productDefinitionTemplateNumber_ = nullptr; + const char* stepType_ = nullptr; + int optical_ = 0; }; diff --git a/src/accessor/grib_accessor_class_g2_chemical.cc b/src/accessor/grib_accessor_class_g2_chemical.cc index 7b7484ecf..624463699 100644 --- a/src/accessor/grib_accessor_class_g2_chemical.cc +++ b/src/accessor/grib_accessor_class_g2_chemical.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,37 +10,34 @@ #include "grib_accessor_class_g2_chemical.h" -grib_accessor_class_g2_chemical_t _grib_accessor_class_g2_chemical{ "g2_chemical" }; -grib_accessor_class* grib_accessor_class_g2_chemical = &_grib_accessor_class_g2_chemical; +grib_accessor_g2_chemical_t _grib_accessor_g2_chemical{}; +grib_accessor* grib_accessor_g2_chemical = &_grib_accessor_g2_chemical; - -void grib_accessor_class_g2_chemical_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g2_chemical_t::init(const long l, grib_arguments* c) { - grib_accessor_class_unsigned_t::init(a, l, c); - grib_accessor_g2_chemical_t* self = (grib_accessor_g2_chemical_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_unsigned_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - self->productDefinitionTemplateNumber = grib_arguments_get_name(hand, c, n++); - self->stepType = grib_arguments_get_name(hand, c, n++); - self->chemical_type = grib_arguments_get_long(hand, c, n++); + productDefinitionTemplateNumber_ = grib_arguments_get_name(hand, c, n++); + stepType_ = grib_arguments_get_name(hand, c, n++); + chemical_type_ = grib_arguments_get_long(hand, c, n++); } -int grib_accessor_class_g2_chemical_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g2_chemical_t::unpack_long(long* val, size_t* len) { - grib_accessor_g2_chemical_t* self = (grib_accessor_g2_chemical_t*)a; long productDefinitionTemplateNumber = 0; - grib_get_long(grib_handle_of_accessor(a), self->productDefinitionTemplateNumber, &productDefinitionTemplateNumber); + grib_get_long(grib_handle_of_accessor(this), productDefinitionTemplateNumber_, &productDefinitionTemplateNumber); // Meaning of self->chemical_type: // 0 = atmospheric chemical constituents // 1 = atmospheric chemical constituents based on a distribution function // 2 = atmospheric chemical constituents with source or sink // - Assert(self->chemical_type == 0 || self->chemical_type == 1 || self->chemical_type == 2); - if (self->chemical_type == 1) + Assert(chemical_type_ == 0 || chemical_type_ == 1 || chemical_type_ == 2); + if (chemical_type_ == 1) *val = grib2_is_PDTN_ChemicalDistFunc(productDefinitionTemplateNumber); - else if (self->chemical_type == 2) + else if (chemical_type_ == 2) *val = grib2_is_PDTN_ChemicalSourceSink(productDefinitionTemplateNumber); else *val = grib2_is_PDTN_Chemical(productDefinitionTemplateNumber); @@ -49,10 +45,9 @@ int grib_accessor_class_g2_chemical_t::unpack_long(grib_accessor* a, long* val, return GRIB_SUCCESS; } -int grib_accessor_class_g2_chemical_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g2_chemical_t::pack_long(const long* val, size_t* len) { - grib_accessor_g2_chemical_t* self = (grib_accessor_g2_chemical_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); long productDefinitionTemplateNumber = -1; long productDefinitionTemplateNumberNew = -1; // long type=-1; @@ -65,12 +60,12 @@ int grib_accessor_class_g2_chemical_t::pack_long(grib_accessor* a, const long* v // long derivedForecast=-1; int ret = 0; - if (grib_get_long(hand, self->productDefinitionTemplateNumber, &productDefinitionTemplateNumber) != GRIB_SUCCESS) + if (grib_get_long(hand, productDefinitionTemplateNumber_, &productDefinitionTemplateNumber) != GRIB_SUCCESS) return GRIB_SUCCESS; - // grib_get_long(hand, self->type,&type); - // grib_get_long(hand, self->stream,&stream); - ret = grib_get_string(hand, self->stepType, stepType, &slen); + // grib_get_long(hand, type_ ,&type); + // grib_get_long(hand, stream_ ,&stream); + ret = grib_get_string(hand, stepType_, stepType, &slen); Assert(ret == GRIB_SUCCESS); eps = grib_is_defined(hand, "perturbationNumber"); @@ -84,55 +79,55 @@ int grib_accessor_class_g2_chemical_t::pack_long(grib_accessor* a, const long* v // 1 = atmospheric chemical constituents based on a distribution function // 2 = atmospheric chemical constituents with source or sink // - Assert(self->chemical_type == 0 || self->chemical_type == 1 || self->chemical_type == 2); + Assert(chemical_type_ == 0 || chemical_type_ == 1 || chemical_type_ == 2); if (eps == 1) { if (isInstant) { - if (self->chemical_type == 0) + if (chemical_type_ == 0) productDefinitionTemplateNumberNew = 41; - else if (self->chemical_type == 1) + else if (chemical_type_ == 1) productDefinitionTemplateNumberNew = 58; - else if (self->chemical_type == 2) + else if (chemical_type_ == 2) productDefinitionTemplateNumberNew = 77; } else { - if (self->chemical_type == 0) + if (chemical_type_ == 0) productDefinitionTemplateNumberNew = 43; - else if (self->chemical_type == 1) + else if (chemical_type_ == 1) productDefinitionTemplateNumberNew = 68; - else if (self->chemical_type == 2) + else if (chemical_type_ == 2) productDefinitionTemplateNumberNew = 79; } } else { // deterministic if (isInstant) { - if (self->chemical_type == 0) + if (chemical_type_ == 0) productDefinitionTemplateNumberNew = 40; - else if (self->chemical_type == 1) + else if (chemical_type_ == 1) productDefinitionTemplateNumberNew = 57; - else if (self->chemical_type == 2) + else if (chemical_type_ == 2) productDefinitionTemplateNumberNew = 76; } else { - if (self->chemical_type == 0) + if (chemical_type_ == 0) productDefinitionTemplateNumberNew = 42; - else if (self->chemical_type == 1) + else if (chemical_type_ == 1) productDefinitionTemplateNumberNew = 67; - else if (self->chemical_type == 2) + else if (chemical_type_ == 2) productDefinitionTemplateNumberNew = 78; } } if (productDefinitionTemplateNumber != productDefinitionTemplateNumberNew) { - grib_set_long(hand, self->productDefinitionTemplateNumber, productDefinitionTemplateNumberNew); - //if (derivedForecast>=0) grib_set_long(hand, self->derivedForecast,derivedForecast); + grib_set_long(hand, productDefinitionTemplateNumber_, productDefinitionTemplateNumberNew); + /*if (derivedForecast>=0) grib_set_long(hand, derivedForecast_ ,derivedForecast);*/ } return 0; } -int grib_accessor_class_g2_chemical_t::value_count(grib_accessor* a, long* count) +int grib_accessor_g2_chemical_t::value_count(long* count) { *count = 1; return 0; diff --git a/src/accessor/grib_accessor_class_g2_chemical.h b/src/accessor/grib_accessor_class_g2_chemical.h index 66bf945aa..f366e8987 100644 --- a/src/accessor/grib_accessor_class_g2_chemical.h +++ b/src/accessor/grib_accessor_class_g2_chemical.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_g2_chemical_t : public grib_accessor_unsigned_t { public: - /* Members defined in g2_chemical */ - const char* productDefinitionTemplateNumber; - const char* stepType; - int chemical_type; -}; - -class grib_accessor_class_g2_chemical_t : public grib_accessor_class_unsigned_t -{ -public: - grib_accessor_class_g2_chemical_t(const char* name) : grib_accessor_class_unsigned_t(name) {} + grib_accessor_g2_chemical_t() : + grib_accessor_unsigned_t() { class_name_ = "g2_chemical"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2_chemical_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* productDefinitionTemplateNumber_ = nullptr; + const char* stepType_ = nullptr; + int chemical_type_ = 0; }; diff --git a/src/accessor/grib_accessor_class_g2_eps.cc b/src/accessor/grib_accessor_class_g2_eps.cc index 9a8199053..31c4bf6b9 100644 --- a/src/accessor/grib_accessor_class_g2_eps.cc +++ b/src/accessor/grib_accessor_class_g2_eps.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,31 +10,28 @@ #include "grib_accessor_class_g2_eps.h" -grib_accessor_class_g2_eps_t _grib_accessor_class_g2_eps{ "g2_eps" }; -grib_accessor_class* grib_accessor_class_g2_eps = &_grib_accessor_class_g2_eps; +grib_accessor_g2_eps_t _grib_accessor_g2_eps{}; +grib_accessor* grib_accessor_g2_eps = &_grib_accessor_g2_eps; - -void grib_accessor_class_g2_eps_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g2_eps_t::init(const long l, grib_arguments* c) { - grib_accessor_class_unsigned_t::init(a, l, c); - grib_accessor_g2_eps_t* self = (grib_accessor_g2_eps_t*)a; - int n = 0; + grib_accessor_unsigned_t::init(l, c); + int n = 0; - self->productDefinitionTemplateNumber = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->type = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->stream = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->stepType = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->derivedForecast = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + productDefinitionTemplateNumber_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + type_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + stream_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + stepType_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + derivedForecast_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); } -int grib_accessor_class_g2_eps_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g2_eps_t::unpack_long(long* val, size_t* len) { - grib_accessor_g2_eps_t* self = (grib_accessor_g2_eps_t*)a; long productDefinitionTemplateNumber = 0; int err = 0; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); - err = grib_get_long(hand, self->productDefinitionTemplateNumber, &productDefinitionTemplateNumber); + err = grib_get_long(hand, productDefinitionTemplateNumber_, &productDefinitionTemplateNumber); if (err) return err; *val = 0; @@ -48,11 +44,9 @@ int grib_accessor_class_g2_eps_t::unpack_long(grib_accessor* a, long* val, size_ return GRIB_SUCCESS; } -int grib_accessor_class_g2_eps_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g2_eps_t::pack_long(const long* val, size_t* len) { - grib_accessor_g2_eps_t* self = (grib_accessor_g2_eps_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - + grib_handle* hand = grib_handle_of_accessor(this); long productDefinitionTemplateNumber = -1; long productDefinitionTemplateNumberNew = -1; long type = -1; @@ -65,18 +59,18 @@ int grib_accessor_class_g2_eps_t::pack_long(grib_accessor* a, const long* val, s int isInstant = 0; long derivedForecast = -1; - if (grib_get_long(hand, self->productDefinitionTemplateNumber, &productDefinitionTemplateNumber) != GRIB_SUCCESS) + if (grib_get_long(hand, productDefinitionTemplateNumber_, &productDefinitionTemplateNumber) != GRIB_SUCCESS) return GRIB_SUCCESS; - grib_get_long(hand, self->type, &type); - grib_get_long(hand, self->stream, &stream); - grib_get_string(hand, self->stepType, stepType, &slen); + grib_get_long(hand, type_, &type); + grib_get_long(hand, stream_, &stream); + grib_get_string(hand, stepType_, stepType, &slen); if (!strcmp(stepType, "instant")) isInstant = 1; grib_get_long(hand, "is_chemical", &chemical); grib_get_long(hand, "is_aerosol", &aerosol); if (chemical == 1 && aerosol == 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Parameter cannot be both chemical and aerosol!"); + grib_context_log(context_, GRIB_LOG_ERROR, "Parameter cannot be both chemical and aerosol!"); return GRIB_ENCODING_ERROR; } @@ -93,7 +87,7 @@ int grib_accessor_class_g2_eps_t::pack_long(grib_accessor* a, const long* val, s derivedForecast = 4; } else { - //productDefinitionTemplateNumberNew = 1; + // productDefinitionTemplateNumberNew = 1; productDefinitionTemplateNumberNew = grib2_choose_PDTN(productDefinitionTemplateNumber, false, isInstant); } } @@ -123,16 +117,16 @@ int grib_accessor_class_g2_eps_t::pack_long(grib_accessor* a, const long* val, s // } } - if (productDefinitionTemplateNumberNew >=0 && productDefinitionTemplateNumber != productDefinitionTemplateNumberNew) { - grib_set_long(hand, self->productDefinitionTemplateNumber, productDefinitionTemplateNumberNew); + if (productDefinitionTemplateNumberNew >= 0 && productDefinitionTemplateNumber != productDefinitionTemplateNumberNew) { + grib_set_long(hand, productDefinitionTemplateNumber_, productDefinitionTemplateNumberNew); if (derivedForecast >= 0) - grib_set_long(hand, self->derivedForecast, derivedForecast); + grib_set_long(hand, derivedForecast_, derivedForecast); } return 0; } -int grib_accessor_class_g2_eps_t::value_count(grib_accessor* a, long* count) +int grib_accessor_g2_eps_t::value_count(long* count) { *count = 1; return 0; diff --git a/src/accessor/grib_accessor_class_g2_eps.h b/src/accessor/grib_accessor_class_g2_eps.h index 8453387fa..5a6a7bb9d 100644 --- a/src/accessor/grib_accessor_class_g2_eps.h +++ b/src/accessor/grib_accessor_class_g2_eps.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,21 +15,18 @@ class grib_accessor_g2_eps_t : public grib_accessor_unsigned_t { public: - /* Members defined in g2_eps */ - const char* productDefinitionTemplateNumber; - const char* stream; - const char* type; - const char* stepType; - const char* derivedForecast; -}; - -class grib_accessor_class_g2_eps_t : public grib_accessor_class_unsigned_t -{ -public: - grib_accessor_class_g2_eps_t(const char* name) : grib_accessor_class_unsigned_t(name) {} + grib_accessor_g2_eps_t() : + grib_accessor_unsigned_t() { class_name_ = "g2_eps"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2_eps_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* productDefinitionTemplateNumber_ = nullptr; + const char* stream_ = nullptr; + const char* type_ = nullptr; + const char* stepType_ = nullptr; + const char* derivedForecast_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g2_mars_labeling.cc b/src/accessor/grib_accessor_class_g2_mars_labeling.cc index 5e2e73f64..2ec962251 100644 --- a/src/accessor/grib_accessor_class_g2_mars_labeling.cc +++ b/src/accessor/grib_accessor_class_g2_mars_labeling.cc @@ -10,82 +10,77 @@ #include "grib_accessor_class_g2_mars_labeling.h" -grib_accessor_class_g2_mars_labeling_t _grib_accessor_class_g2_mars_labeling{ "g2_mars_labeling" }; -grib_accessor_class* grib_accessor_class_g2_mars_labeling = &_grib_accessor_class_g2_mars_labeling; +grib_accessor_g2_mars_labeling_t _grib_accessor_g2_mars_labeling{}; +grib_accessor* grib_accessor_g2_mars_labeling = &_grib_accessor_g2_mars_labeling; - -void grib_accessor_class_g2_mars_labeling_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g2_mars_labeling_t::init(const long l, grib_arguments* c) { - grib_accessor_class_gen_t::init(a, l, c); - grib_accessor_g2_mars_labeling_t* self = (grib_accessor_g2_mars_labeling_t*)a; - int n = 0; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_gen_t::init(l, c); + int n = 0; + grib_handle* hand = grib_handle_of_accessor(this); - self->index = grib_arguments_get_long(hand, c, n++); - self->the_class = grib_arguments_get_name(hand, c, n++); - self->type = grib_arguments_get_name(hand, c, n++); - self->stream = grib_arguments_get_name(hand, c, n++); - self->expver = grib_arguments_get_name(hand, c, n++); - self->typeOfProcessedData = grib_arguments_get_name(hand, c, n++); - self->productDefinitionTemplateNumber = grib_arguments_get_name(hand, c, n++); - self->stepType = grib_arguments_get_name(hand, c, n++); - self->derivedForecast = grib_arguments_get_name(hand, c, n++); - self->typeOfGeneratingProcess = grib_arguments_get_name(hand, c, n++); + index_ = grib_arguments_get_long(hand, c, n++); + the_class_ = grib_arguments_get_name(hand, c, n++); + type_ = grib_arguments_get_name(hand, c, n++); + stream_ = grib_arguments_get_name(hand, c, n++); + expver_ = grib_arguments_get_name(hand, c, n++); + typeOfProcessedData_ = grib_arguments_get_name(hand, c, n++); + productDefinitionTemplateNumber_ = grib_arguments_get_name(hand, c, n++); + stepType_ = grib_arguments_get_name(hand, c, n++); + derivedForecast_ = grib_arguments_get_name(hand, c, n++); + typeOfGeneratingProcess_ = grib_arguments_get_name(hand, c, n++); } -int grib_accessor_class_g2_mars_labeling_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g2_mars_labeling_t::unpack_long(long* val, size_t* len) { - grib_accessor_g2_mars_labeling_t* self = (grib_accessor_g2_mars_labeling_t*)a; - char* key = NULL; - - switch (self->index) { - case 0: - key = (char*)self->the_class; - break; - case 1: - key = (char*)self->type; - break; - case 2: - key = (char*)self->stream; - break; - default: - grib_context_log(a->context, GRIB_LOG_ERROR, - "invalid first argument of g2_mars_labeling in %s", a->name); - return GRIB_INTERNAL_ERROR; - } - - return grib_get_long(grib_handle_of_accessor(a), key, val); -} - -int grib_accessor_class_g2_mars_labeling_t::unpack_string(grib_accessor* a, char* val, size_t* len) -{ - grib_accessor_g2_mars_labeling_t* self = (grib_accessor_g2_mars_labeling_t*)a; char* key = NULL; - switch (self->index) { + switch (index_) { case 0: - key = (char*)self->the_class; + key = (char*)the_class_; break; case 1: - key = (char*)self->type; + key = (char*)type_; break; case 2: - key = (char*)self->stream; + key = (char*)stream_; break; default: - grib_context_log(a->context, GRIB_LOG_ERROR, - "invalid first argument of g2_mars_labeling in %s", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, + "invalid first argument of g2_mars_labeling in %s", name_); return GRIB_INTERNAL_ERROR; } - return grib_get_string(grib_handle_of_accessor(a), key, val, len); + return grib_get_long(grib_handle_of_accessor(this), key, val); } -static int extra_set(grib_accessor* a, long val) +int grib_accessor_g2_mars_labeling_t::unpack_string(char* val, size_t* len) +{ + char* key = NULL; + + switch (index_) { + case 0: + key = (char*)the_class_; + break; + case 1: + key = (char*)type_; + break; + case 2: + key = (char*)stream_; + break; + default: + grib_context_log(context_, GRIB_LOG_ERROR, + "invalid first argument of g2_mars_labeling in %s", name_); + return GRIB_INTERNAL_ERROR; + } + + return grib_get_string(grib_handle_of_accessor(this), key, val, len); +} + +int grib_accessor_g2_mars_labeling_t::extra_set(long val) { int ret = 0; - grib_accessor_g2_mars_labeling_t* self = (grib_accessor_g2_mars_labeling_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); char stepType[30] = {0,}; size_t stepTypelen = 30; long derivedForecast = -1; @@ -110,7 +105,7 @@ static int extra_set(grib_accessor* a, long val) const int is_wave = grib_is_defined(hand, "waveDirectionNumber"); const int is_wave_prange = grib_is_defined(hand, "typeOfWavePeriodInterval"); - switch (self->index) { + switch (index_) { case 0: /* class */ return ret; @@ -164,7 +159,7 @@ static int extra_set(grib_accessor* a, long val) break; case 17: /* Ensemble mean (em) */ derivedForecast = 0; - grib_get_string(hand, self->stepType, stepType, &stepTypelen); + grib_get_string(hand, stepType_, stepType, &stepTypelen); if (!strcmp(stepType, "instant")) { productDefinitionTemplateNumberNew = 2; } @@ -176,7 +171,7 @@ static int extra_set(grib_accessor* a, long val) break; case 18: /* Ensemble standard deviation (es) */ derivedForecast = 4; - grib_get_string(hand, self->stepType, stepType, &stepTypelen); + grib_get_string(hand, stepType_, stepType, &stepTypelen); if (!strcmp(stepType, "instant")) { productDefinitionTemplateNumberNew = 2; } @@ -260,7 +255,7 @@ static int extra_set(grib_accessor* a, long val) typeOfGeneratingProcess = 255; break; default: - grib_context_log(a->context, GRIB_LOG_WARNING, "g2_mars_labeling: unknown mars.type %d", (int)val); + grib_context_log(context_, GRIB_LOG_WARNING, "g2_mars_labeling: unknown mars.type %d", (int)val); /*return GRIB_ENCODING_ERROR;*/ } break; @@ -271,7 +266,7 @@ static int extra_set(grib_accessor* a, long val) case 1249: /* elda */ case 1250: /* ewla */ is_eps = 1; /* These streams are all for ensembles */ - grib_get_string(hand, self->stepType, stepType, &stepTypelen); + grib_get_string(hand, stepType_, stepType, &stepTypelen); is_instant = (strcmp(stepType, "instant") == 0); productDefinitionTemplateNumberNew = grib2_select_PDTN( is_eps, is_instant, @@ -284,8 +279,8 @@ static int extra_set(grib_accessor* a, long val) } break; default: - grib_context_log(a->context, GRIB_LOG_ERROR, - "invalid first argument of g2_mars_labeling in %s", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, + "invalid first argument of g2_mars_labeling in %s", name_); return GRIB_INTERNAL_ERROR; } @@ -295,118 +290,115 @@ static int extra_set(grib_accessor* a, long val) } if (productDefinitionTemplateNumberNew >= 0) { - grib_get_long(hand, self->productDefinitionTemplateNumber, &productDefinitionTemplateNumber); + grib_get_long(hand, productDefinitionTemplateNumber_, &productDefinitionTemplateNumber); if (productDefinitionTemplateNumber != productDefinitionTemplateNumberNew) - grib_set_long(hand, self->productDefinitionTemplateNumber, productDefinitionTemplateNumberNew); + grib_set_long(hand, productDefinitionTemplateNumber_, productDefinitionTemplateNumberNew); } if (derivedForecast >= 0) { - grib_set_long(hand, self->derivedForecast, derivedForecast); + grib_set_long(hand, derivedForecast_, derivedForecast); } if (typeOfProcessedData > 0) - grib_set_long(hand, self->typeOfProcessedData, typeOfProcessedData); + grib_set_long(hand, typeOfProcessedData_, typeOfProcessedData); if (typeOfGeneratingProcess > 0) - grib_set_long(hand, self->typeOfGeneratingProcess, typeOfGeneratingProcess); + grib_set_long(hand, typeOfGeneratingProcess_, typeOfGeneratingProcess); return ret; } -int grib_accessor_class_g2_mars_labeling_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_g2_mars_labeling_t::pack_string(const char* val, size_t* len) { - grib_accessor_g2_mars_labeling_t* self = (grib_accessor_g2_mars_labeling_t*)a; char* key = NULL; int ret = 0; long lval = 0; - switch (self->index) { + switch (index_) { case 0: - key = (char*)self->the_class; + key = (char*)the_class_; break; case 1: - key = (char*)self->type; + key = (char*)type_; break; case 2: - key = (char*)self->stream; + key = (char*)stream_; break; default: - grib_context_log(a->context, GRIB_LOG_ERROR, - "invalid first argument of g2_mars_labeling in %s", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, + "invalid first argument of g2_mars_labeling in %s", name_); return GRIB_INTERNAL_ERROR; } - ret = grib_set_string(grib_handle_of_accessor(a), key, val, len); + ret = grib_set_string(grib_handle_of_accessor(this), key, val, len); if (ret) return ret; /* failed */ - ret = grib_get_long(grib_handle_of_accessor(a), key, &lval); + ret = grib_get_long(grib_handle_of_accessor(this), key, &lval); if (ret) return ret; /* failed */ - return extra_set(a, lval); + return extra_set(lval); } -int grib_accessor_class_g2_mars_labeling_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g2_mars_labeling_t::pack_long(const long* val, size_t* len) { - grib_accessor_g2_mars_labeling_t* self = (grib_accessor_g2_mars_labeling_t*)a; char* key = NULL; int ret = 0; - switch (self->index) { + switch (index_) { case 0: - key = (char*)self->the_class; + key = (char*)the_class_; break; case 1: - key = (char*)self->type; + key = (char*)type_; break; case 2: - key = (char*)self->stream; + key = (char*)stream_; break; default: - grib_context_log(a->context, GRIB_LOG_ERROR, - "invalid first argument of g2_mars_labeling in %s", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, + "invalid first argument of g2_mars_labeling in %s", name_); return GRIB_INTERNAL_ERROR; } - ret = grib_set_long(grib_handle_of_accessor(a), key, *val); + ret = grib_set_long(grib_handle_of_accessor(this), key, *val); if (ret) return ret; /* failed */ - return extra_set(a, *val); + return extra_set(*val); } -int grib_accessor_class_g2_mars_labeling_t::value_count(grib_accessor* a, long* count) +int grib_accessor_g2_mars_labeling_t::value_count(long* count) { *count = 1; return 0; } -int grib_accessor_class_g2_mars_labeling_t::get_native_type(grib_accessor* a) +long grib_accessor_g2_mars_labeling_t::get_native_type() { - grib_accessor_g2_mars_labeling_t* self = (grib_accessor_g2_mars_labeling_t*)a; char* key = NULL; int ret = 0; int type = 0; - switch (self->index) { + switch (index_) { case 0: - key = (char*)self->the_class; + key = (char*)the_class_; break; case 1: - key = (char*)self->type; + key = (char*)type_; break; case 2: - key = (char*)self->stream; + key = (char*)stream_; break; default: - grib_context_log(a->context, GRIB_LOG_ERROR, - "invalid first argument of g2_mars_labeling in %s", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, + "invalid first argument of g2_mars_labeling in %s", name_); return GRIB_INTERNAL_ERROR; } - ret = grib_get_native_type(grib_handle_of_accessor(a), key, &type); + ret = grib_get_native_type(grib_handle_of_accessor(this), key, &type); if (ret) - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "unable to get native type for %s", key); return type; } diff --git a/src/accessor/grib_accessor_class_g2_mars_labeling.h b/src/accessor/grib_accessor_class_g2_mars_labeling.h index d47848565..ee761cb25 100644 --- a/src/accessor/grib_accessor_class_g2_mars_labeling.h +++ b/src/accessor/grib_accessor_class_g2_mars_labeling.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,29 +15,28 @@ class grib_accessor_g2_mars_labeling_t : public grib_accessor_gen_t { public: - /* Members defined in g2_mars_labeling */ - int index; - const char* the_class; - const char* stream; - const char* type; - const char* expver; - const char* typeOfProcessedData; - const char* productDefinitionTemplateNumber; - const char* stepType; - const char* derivedForecast; - const char* typeOfGeneratingProcess; -}; - -class grib_accessor_class_g2_mars_labeling_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_g2_mars_labeling_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_g2_mars_labeling_t() : + grib_accessor_gen_t() { class_name_ = "g2_mars_labeling"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2_mars_labeling_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + int index_ = 0; + const char* the_class_ = nullptr; + const char* stream_ = nullptr; + const char* type_ = nullptr; + const char* expver_ = nullptr; + const char* typeOfProcessedData_ = nullptr; + const char* productDefinitionTemplateNumber_ = nullptr; + const char* stepType_ = nullptr; + const char* derivedForecast_ = nullptr; + const char* typeOfGeneratingProcess_ = nullptr; + + int extra_set(long val); }; diff --git a/src/accessor/grib_accessor_class_g2bitmap.cc b/src/accessor/grib_accessor_class_g2bitmap.cc index 7b1783d9a..6a5486981 100644 --- a/src/accessor/grib_accessor_class_g2bitmap.cc +++ b/src/accessor/grib_accessor_class_g2bitmap.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,16 +10,14 @@ #include "grib_accessor_class_g2bitmap.h" -grib_accessor_class_g2bitmap_t _grib_accessor_class_g2bitmap{ "g2bitmap" }; -grib_accessor_class* grib_accessor_class_g2bitmap = &_grib_accessor_class_g2bitmap; +grib_accessor_g2bitmap_t _grib_accessor_g2bitmap{}; +grib_accessor* grib_accessor_g2bitmap = &_grib_accessor_g2bitmap; - -void grib_accessor_class_g2bitmap_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_g2bitmap_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_bitmap_t::init(a, len, arg); - grib_accessor_g2bitmap_t* self = (grib_accessor_g2bitmap_t*)a; + grib_accessor_bitmap_t::init(len, arg); - self->numberOfValues = grib_arguments_get_name(grib_handle_of_accessor(a), arg, 4); + numberOfValues_ = grib_arguments_get_name(grib_handle_of_accessor(this), arg, 4); } // For speed use a local static function @@ -31,22 +28,20 @@ static GRIB_INLINE void set_bit_on(unsigned char* p, long* bitp) (*bitp)++; } -int grib_accessor_class_g2bitmap_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_g2bitmap_t::pack_double(const double* val, size_t* len) { - grib_accessor_g2bitmap_t* self = (grib_accessor_g2bitmap_t*)a; - unsigned char* buf = NULL; size_t i; int err = 0; long pos = 0; // long bmaplen = 0; double miss_values = 0; - size_t tlen = (*len + 7) / 8; + size_t tlen = (*len + 7) / 8; - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->missing_value, &miss_values)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(grib_handle_of_accessor(this), missing_value_, &miss_values)) != GRIB_SUCCESS) return err; - buf = (unsigned char*)grib_context_malloc_clear(a->context, tlen); + buf = (unsigned char*)grib_context_malloc_clear(context_, tlen); if (!buf) return GRIB_OUT_OF_MEMORY; pos = 0; @@ -59,25 +54,23 @@ int grib_accessor_class_g2bitmap_t::pack_double(grib_accessor* a, const double* } } - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), self->numberOfValues, *len)) != GRIB_SUCCESS) { - grib_context_free(a->context, buf); + if ((err = grib_set_long_internal(grib_handle_of_accessor(this), numberOfValues_, *len)) != GRIB_SUCCESS) { + grib_context_free(context_, buf); return err; } - grib_buffer_replace(a, buf, tlen, 1, 1); + grib_buffer_replace(this, buf, tlen, 1, 1); - grib_context_free(a->context, buf); + grib_context_free(context_, buf); return GRIB_SUCCESS; } - -int grib_accessor_class_g2bitmap_t::value_count(grib_accessor* a, long* tlen) +int grib_accessor_g2bitmap_t::value_count(long* tlen) { - grib_accessor_g2bitmap_t* self = (grib_accessor_g2bitmap_t*)a; int err; *tlen = 0; - err = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfValues, tlen); + err = grib_get_long_internal(grib_handle_of_accessor(this), numberOfValues_, tlen); return err; } diff --git a/src/accessor/grib_accessor_class_g2bitmap.h b/src/accessor/grib_accessor_class_g2bitmap.h index 2276b702c..de23a3f3f 100644 --- a/src/accessor/grib_accessor_class_g2bitmap.h +++ b/src/accessor/grib_accessor_class_g2bitmap.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_g2bitmap_t : public grib_accessor_bitmap_t { public: - /* Members defined in g2bitmap */ - const char* numberOfValues; -}; - -class grib_accessor_class_g2bitmap_t : public grib_accessor_class_bitmap_t -{ -public: - grib_accessor_class_g2bitmap_t(const char* name) : grib_accessor_class_bitmap_t(name) {} + grib_accessor_g2bitmap_t() : + grib_accessor_bitmap_t() { class_name_ = "g2bitmap"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2bitmap_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* numberOfValues_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g2bitmap_present.cc b/src/accessor/grib_accessor_class_g2bitmap_present.cc index 3ba7f6c99..47c91d330 100644 --- a/src/accessor/grib_accessor_class_g2bitmap_present.cc +++ b/src/accessor/grib_accessor_class_g2bitmap_present.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,28 +10,24 @@ #include "grib_accessor_class_g2bitmap_present.h" -grib_accessor_class_g2bitmap_present_t _grib_accessor_class_g2bitmap_present{ "g2bitmap_present" }; -grib_accessor_class* grib_accessor_class_g2bitmap_present = &_grib_accessor_class_g2bitmap_present; +grib_accessor_g2bitmap_present_t _grib_accessor_g2bitmap_present{}; +grib_accessor* grib_accessor_g2bitmap_present = &_grib_accessor_g2bitmap_present; - -void grib_accessor_class_g2bitmap_present_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g2bitmap_present_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - int n = 0; - grib_accessor_g2bitmap_present_t* self = (grib_accessor_g2bitmap_present_t*)a; - self->bitmapIndicator = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + grib_accessor_long_t::init(l, c); + int n = 0; + bitmapIndicator_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); - a->length = 0; + length_ = 0; } -int grib_accessor_class_g2bitmap_present_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g2bitmap_present_t::unpack_long(long* val, size_t* len) { int ret = GRIB_SUCCESS; long bitmapIndicator = 0; - grib_accessor_g2bitmap_present_t* self = (grib_accessor_g2bitmap_present_t*)a; - - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->bitmapIndicator, &bitmapIndicator); + ret = grib_get_long_internal(grib_handle_of_accessor(this), bitmapIndicator_, &bitmapIndicator); if (ret) { if (ret == GRIB_NOT_FOUND) { *val = 0; @@ -50,13 +45,12 @@ int grib_accessor_class_g2bitmap_present_t::unpack_long(grib_accessor* a, long* return ret; } -int grib_accessor_class_g2bitmap_present_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g2bitmap_present_t::pack_long(const long* val, size_t* len) { - grib_accessor_g2bitmap_present_t* self = (grib_accessor_g2bitmap_present_t*)a; - long bitmapIndicator = 0; + long bitmapIndicator = 0; if (*val == 0) bitmapIndicator = 255; - return grib_set_long(grib_handle_of_accessor(a), self->bitmapIndicator, bitmapIndicator); + return grib_set_long(grib_handle_of_accessor(this), bitmapIndicator_, bitmapIndicator); } diff --git a/src/accessor/grib_accessor_class_g2bitmap_present.h b/src/accessor/grib_accessor_class_g2bitmap_present.h index 87d603f54..516d5191a 100644 --- a/src/accessor/grib_accessor_class_g2bitmap_present.h +++ b/src/accessor/grib_accessor_class_g2bitmap_present.h @@ -16,16 +16,13 @@ class grib_accessor_g2bitmap_present_t : public grib_accessor_long_t { public: - /* Members defined in g2bitmap_present */ - const char* bitmapIndicator; -}; - -class grib_accessor_class_g2bitmap_present_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_g2bitmap_present_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_g2bitmap_present_t() : + grib_accessor_long_t() { class_name_ = "g2bitmap_present"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2bitmap_present_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* bitmapIndicator_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g2date.cc b/src/accessor/grib_accessor_class_g2date.cc index 827df44df..23b2e99cd 100644 --- a/src/accessor/grib_accessor_class_g2date.cc +++ b/src/accessor/grib_accessor_class_g2date.cc @@ -11,34 +11,31 @@ #include "grib_accessor_class_g2date.h" -grib_accessor_class_g2date_t _grib_accessor_class_g2date{ "g2date" }; -grib_accessor_class* grib_accessor_class_g2date = &_grib_accessor_class_g2date; +grib_accessor_g2date_t _grib_accessor_g2date{}; +grib_accessor* grib_accessor_g2date = &_grib_accessor_g2date; -void grib_accessor_class_g2date_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g2date_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_g2date_t* self = (grib_accessor_g2date_t*)a; + grib_accessor_long_t::init(l, c); int n = 0; - self->year = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->month = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->day = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + year_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + month_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + day_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); } -int grib_accessor_class_g2date_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g2date_t::unpack_long(long* val, size_t* len) { - const grib_accessor_g2date_t* self = (grib_accessor_g2date_t*)a; - int ret = 0; long year = 0; long month = 0; long day = 0; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->day, &day)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), day_, &day)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->month, &month)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), month_, &month)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->year, &year)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), year_, &year)) != GRIB_SUCCESS) return ret; if (*len < 1) @@ -49,10 +46,8 @@ int grib_accessor_class_g2date_t::unpack_long(grib_accessor* a, long* val, size_ return GRIB_SUCCESS; } -int grib_accessor_class_g2date_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g2date_t::pack_long(const long* val, size_t* len) { - const grib_accessor_g2date_t* self = (grib_accessor_g2date_t*)a; - int ret = GRIB_SUCCESS; long v = val[0]; long year = 0; @@ -71,14 +66,14 @@ int grib_accessor_class_g2date_t::pack_long(grib_accessor* a, const long* val, s if (!is_date_valid(year, month, day, 0, 0, 0)) { // ECC-1777: For now just a warning. Will later change to an error fprintf(stderr, "ECCODES WARNING : %s:%s: Date is not valid! year=%ld month=%ld day=%ld\n", - a->cclass->name, __func__, year, month, day); + class_name_, __func__, year, month, day); } - if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->day, day)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), day_, day)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->month, month)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), month_, month)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->year, year)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), year_, year)) != GRIB_SUCCESS) return ret; return GRIB_SUCCESS; diff --git a/src/accessor/grib_accessor_class_g2date.h b/src/accessor/grib_accessor_class_g2date.h index b1676bcd2..7ac73519d 100644 --- a/src/accessor/grib_accessor_class_g2date.h +++ b/src/accessor/grib_accessor_class_g2date.h @@ -16,18 +16,15 @@ class grib_accessor_g2date_t : public grib_accessor_long_t { public: - /* Members defined in g2date */ - const char* year; - const char* month; - const char* day; -}; - -class grib_accessor_class_g2date_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_g2date_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_g2date_t() : + grib_accessor_long_t() { class_name_ = "g2date"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2date_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* year_ = nullptr; + const char* month_ = nullptr; + const char* day_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g2end_step.cc b/src/accessor/grib_accessor_class_g2end_step.cc index b4a3a2a25..c175ebe88 100644 --- a/src/accessor/grib_accessor_class_g2end_step.cc +++ b/src/accessor/grib_accessor_class_g2end_step.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -14,43 +13,41 @@ #include "step_utilities.h" #include -grib_accessor_class_g2end_step_t _grib_accessor_class_g2end_step{ "g2end_step" }; -grib_accessor_class* grib_accessor_class_g2end_step = &_grib_accessor_class_g2end_step; +grib_accessor_g2end_step_t _grib_accessor_g2end_step{}; +grib_accessor* grib_accessor_g2end_step = &_grib_accessor_g2end_step; - -void grib_accessor_class_g2end_step_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g2end_step_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_g2end_step_t* self = (grib_accessor_g2end_step_t*)a; - int n = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_accessor_long_t::init(l, c); + int n = 0; + grib_handle* h = grib_handle_of_accessor(this); - self->start_step_value = grib_arguments_get_name(h, c, n++); - self->step_units = grib_arguments_get_name(h, c, n++); + start_step_value_ = grib_arguments_get_name(h, c, n++); + step_units_ = grib_arguments_get_name(h, c, n++); - self->year = grib_arguments_get_name(h, c, n++); - self->month = grib_arguments_get_name(h, c, n++); - self->day = grib_arguments_get_name(h, c, n++); - self->hour = grib_arguments_get_name(h, c, n++); - self->minute = grib_arguments_get_name(h, c, n++); - self->second = grib_arguments_get_name(h, c, n++); + year_ = grib_arguments_get_name(h, c, n++); + month_ = grib_arguments_get_name(h, c, n++); + day_ = grib_arguments_get_name(h, c, n++); + hour_ = grib_arguments_get_name(h, c, n++); + minute_ = grib_arguments_get_name(h, c, n++); + second_ = grib_arguments_get_name(h, c, n++); - self->year_of_end_of_interval = grib_arguments_get_name(h, c, n++); - self->month_of_end_of_interval = grib_arguments_get_name(h, c, n++); - self->day_of_end_of_interval = grib_arguments_get_name(h, c, n++); - self->hour_of_end_of_interval = grib_arguments_get_name(h, c, n++); - self->minute_of_end_of_interval = grib_arguments_get_name(h, c, n++); - self->second_of_end_of_interval = grib_arguments_get_name(h, c, n++); + year_of_end_of_interval_ = grib_arguments_get_name(h, c, n++); + month_of_end_of_interval_ = grib_arguments_get_name(h, c, n++); + day_of_end_of_interval_ = grib_arguments_get_name(h, c, n++); + hour_of_end_of_interval_ = grib_arguments_get_name(h, c, n++); + minute_of_end_of_interval_ = grib_arguments_get_name(h, c, n++); + second_of_end_of_interval_ = grib_arguments_get_name(h, c, n++); - self->time_range_unit = grib_arguments_get_name(h, c, n++); - self->time_range_value = grib_arguments_get_name(h, c, n++); - self->typeOfTimeIncrement = grib_arguments_get_name(h, c, n++); - self->numberOfTimeRanges = grib_arguments_get_name(h, c, n++); + time_range_unit_ = grib_arguments_get_name(h, c, n++); + time_range_value_ = grib_arguments_get_name(h, c, n++); + typeOfTimeIncrement_ = grib_arguments_get_name(h, c, n++); + numberOfTimeRanges_ = grib_arguments_get_name(h, c, n++); } -void grib_accessor_class_g2end_step_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_g2end_step_t::dump(grib_dumper* dumper) { - grib_dump_double(dumper, a, NULL); + grib_dump_double(dumper, this, NULL); } // See GRIB-488 @@ -94,27 +91,26 @@ static int convert_time_range_long_( return GRIB_SUCCESS; } -static int unpack_one_time_range_long_(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g2end_step_t::unpack_one_time_range_long_(long* val, size_t* len) { - grib_accessor_g2end_step_t* self = (grib_accessor_g2end_step_t*)a; - int err = 0; + int err = 0; long start_step_value; long step_units; long time_range_unit; long time_range_value, typeOfTimeIncrement; int add_time_range = 1; /* whether we add lengthOfTimeRange */ - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); - if ((err = grib_get_long_internal(h, self->start_step_value, &start_step_value))) + if ((err = grib_get_long_internal(h, start_step_value_, &start_step_value))) return err; - if ((err = grib_get_long_internal(h, self->step_units, &step_units))) + if ((err = grib_get_long_internal(h, step_units_, &step_units))) return err; - if ((err = grib_get_long_internal(h, self->time_range_unit, &time_range_unit))) + if ((err = grib_get_long_internal(h, time_range_unit_, &time_range_unit))) return err; - if ((err = grib_get_long_internal(h, self->time_range_value, &time_range_value))) + if ((err = grib_get_long_internal(h, time_range_value_, &time_range_value))) return err; - if ((err = grib_get_long_internal(h, self->typeOfTimeIncrement, &typeOfTimeIncrement))) + if ((err = grib_get_long_internal(h, typeOfTimeIncrement_, &typeOfTimeIncrement))) return err; err = convert_time_range_long_(h, step_units, time_range_unit, &time_range_value); @@ -143,9 +139,8 @@ static int unpack_one_time_range_long_(grib_accessor* a, long* val, size_t* len) return GRIB_SUCCESS; } -static int unpack_one_time_range_double_(grib_accessor* a, double* val, size_t* len) +int grib_accessor_g2end_step_t::unpack_one_time_range_double_(double* val, size_t* len) { - grib_accessor_g2end_step_t* self = (grib_accessor_g2end_step_t*)a; int err = 0; double start_step_value; long start_step_unit; @@ -155,19 +150,19 @@ static int unpack_one_time_range_double_(grib_accessor* a, double* val, size_t* long typeOfTimeIncrement; int add_time_range = 1; /* whether we add lengthOfTimeRange */ - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); - if ((err = grib_get_double_internal(h, self->start_step_value, &start_step_value))) + if ((err = grib_get_double_internal(h, start_step_value_, &start_step_value))) return err; if ((err = grib_get_long_internal(h, "startStepUnit", &start_step_unit))) return err; - if ((err = grib_get_long_internal(h, self->step_units, &step_units))) + if ((err = grib_get_long_internal(h, step_units_, &step_units))) return err; - if ((err = grib_get_long_internal(h, self->time_range_unit, &time_range_unit))) + if ((err = grib_get_long_internal(h, time_range_unit_, &time_range_unit))) return err; - if ((err = grib_get_double_internal(h, self->time_range_value, &time_range_value))) + if ((err = grib_get_double_internal(h, time_range_value_, &time_range_value))) return err; - if ((err = grib_get_long_internal(h, self->typeOfTimeIncrement, &typeOfTimeIncrement))) + if ((err = grib_get_long_internal(h, typeOfTimeIncrement_, &typeOfTimeIncrement))) return err; eccodes::Step start_step{ start_step_value, start_step_unit }; @@ -196,11 +191,10 @@ static int unpack_one_time_range_double_(grib_accessor* a, double* val, size_t* } #define MAX_NUM_TIME_RANGES 16 /* maximum number of time range specifications */ -static int unpack_multiple_time_ranges_long_(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g2end_step_t::unpack_multiple_time_ranges_long_(long* val, size_t* len) { - grib_accessor_g2end_step_t* self = (grib_accessor_g2end_step_t*)a; int i = 0, err = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); long numberOfTimeRanges = 0, step_units = 0, start_step_value = 0; size_t count = 0; @@ -214,11 +208,11 @@ static int unpack_multiple_time_ranges_long_(grib_accessor* a, long* val, size_t 0, }; - if ((err = grib_get_long_internal(h, self->start_step_value, &start_step_value))) + if ((err = grib_get_long_internal(h, start_step_value_, &start_step_value))) return err; - if ((err = grib_get_long_internal(h, self->step_units, &step_units))) + if ((err = grib_get_long_internal(h, step_units_, &step_units))) return err; - if ((err = grib_get_long_internal(h, self->numberOfTimeRanges, &numberOfTimeRanges))) + if ((err = grib_get_long_internal(h, numberOfTimeRanges_, &numberOfTimeRanges))) return err; if (numberOfTimeRanges > MAX_NUM_TIME_RANGES) { grib_context_log(h->context, GRIB_LOG_ERROR, "Too many time range specifications!"); @@ -227,11 +221,11 @@ static int unpack_multiple_time_ranges_long_(grib_accessor* a, long* val, size_t count = numberOfTimeRanges; /* Get the arrays for the N time ranges */ - if ((err = grib_get_long_array(h, self->typeOfTimeIncrement, arr_typeOfTimeIncrement, &count))) + if ((err = grib_get_long_array(h, typeOfTimeIncrement_, arr_typeOfTimeIncrement, &count))) return err; - if ((err = grib_get_long_array(h, self->time_range_unit, arr_coded_unit, &count))) + if ((err = grib_get_long_array(h, time_range_unit_, arr_coded_unit, &count))) return err; - if ((err = grib_get_long_array(h, self->time_range_value, arr_coded_time_range, &count))) + if ((err = grib_get_long_array(h, time_range_value_, arr_coded_time_range, &count))) return err; /* Look in the array of typeOfTimeIncrements for first entry whose typeOfTimeIncrement == 2 */ @@ -255,11 +249,10 @@ static int unpack_multiple_time_ranges_long_(grib_accessor* a, long* val, size_t return GRIB_DECODING_ERROR; } -static int unpack_multiple_time_ranges_double_(grib_accessor* a, double* val, size_t* len) +int grib_accessor_g2end_step_t::unpack_multiple_time_ranges_double_(double* val, size_t* len) { - grib_accessor_g2end_step_t* self = (grib_accessor_g2end_step_t*)a; int i = 0, err = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); long numberOfTimeRanges = 0; long step_units = 0; long start_step_value = 0; @@ -276,17 +269,17 @@ static int unpack_multiple_time_ranges_double_(grib_accessor* a, double* val, si 0, }; - if ((err = grib_get_long_internal(h, self->start_step_value, &start_step_value))) + if ((err = grib_get_long_internal(h, start_step_value_, &start_step_value))) return err; if ((err = grib_get_long_internal(h, "startStepUnit", &start_step_unit))) return err; eccodes::Step start_step{ start_step_value, start_step_unit }; - if ((err = grib_get_long_internal(h, self->step_units, &step_units))) + if ((err = grib_get_long_internal(h, step_units_, &step_units))) return err; - if ((err = grib_get_long_internal(h, self->numberOfTimeRanges, &numberOfTimeRanges))) + if ((err = grib_get_long_internal(h, numberOfTimeRanges_, &numberOfTimeRanges))) return err; if (numberOfTimeRanges > MAX_NUM_TIME_RANGES) { grib_context_log(h->context, GRIB_LOG_ERROR, "Too many time range specifications!"); @@ -295,11 +288,11 @@ static int unpack_multiple_time_ranges_double_(grib_accessor* a, double* val, si count = numberOfTimeRanges; /* Get the arrays for the N time ranges */ - if ((err = grib_get_long_array(h, self->typeOfTimeIncrement, arr_typeOfTimeIncrement, &count))) + if ((err = grib_get_long_array(h, typeOfTimeIncrement_, arr_typeOfTimeIncrement, &count))) return err; - if ((err = grib_get_long_array(h, self->time_range_unit, arr_coded_unit, &count))) + if ((err = grib_get_long_array(h, time_range_unit_, arr_coded_unit, &count))) return err; - if ((err = grib_get_long_array(h, self->time_range_value, arr_coded_time_range, &count))) + if ((err = grib_get_long_array(h, time_range_value_, arr_coded_time_range, &count))) return err; /* Look in the array of typeOfTimeIncrements for first entry whose typeOfTimeIncrement == 2 */ @@ -309,7 +302,7 @@ static int unpack_multiple_time_ranges_double_(grib_accessor* a, double* val, si long the_coded_unit = arr_coded_unit[i]; long the_coded_time_range = arr_coded_time_range[i]; - eccodes::Step time_range{the_coded_time_range, the_coded_unit}; + eccodes::Step time_range{ the_coded_time_range, the_coded_unit }; *val = (start_step + time_range).value(eccodes::Unit(step_units)); return GRIB_SUCCESS; @@ -322,41 +315,40 @@ static int unpack_multiple_time_ranges_double_(grib_accessor* a, double* val, si } // For the old implementation of unpack_long, see -// src/deprecated/grib_accessor_class_g2end_step.unpack_long.cc +// src/deprecated/grib_accessor_g2end_step.unpack_long.cc // -int grib_accessor_class_g2end_step_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g2end_step_t::unpack_long(long* val, size_t* len) { - grib_accessor_g2end_step_t* self = (grib_accessor_g2end_step_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int ret = 0; - long start_step_value = 0; - long start_step_unit = 0; + grib_handle* h = grib_handle_of_accessor(this); + int ret = 0; + long start_step_value = 0; + long start_step_unit = 0; long numberOfTimeRanges = 0; - if ((ret = grib_get_long_internal(h, self->start_step_value, &start_step_value))) + if ((ret = grib_get_long_internal(h, start_step_value_, &start_step_value))) return ret; if ((ret = grib_get_long_internal(h, "startStepUnit", &start_step_unit))) return ret; /* point in time */ - if (self->year == NULL) { + if (year_ == NULL) { *val = start_step_value; if ((ret = grib_set_long_internal(h, "endStepUnit", start_step_unit))) return ret; return 0; } - Assert(self->numberOfTimeRanges); - if ((ret = grib_get_long_internal(h, self->numberOfTimeRanges, &numberOfTimeRanges))) + Assert(numberOfTimeRanges_); + if ((ret = grib_get_long_internal(h, numberOfTimeRanges_, &numberOfTimeRanges))) return ret; Assert(numberOfTimeRanges == 1 || numberOfTimeRanges == 2); try { if (numberOfTimeRanges == 1) { - ret = unpack_one_time_range_long_(a, val, len); + ret = unpack_one_time_range_long_(val, len); } else { - ret = unpack_multiple_time_ranges_long_(a, val, len); + ret = unpack_multiple_time_ranges_long_(val, len); } } catch (std::exception& e) { @@ -367,39 +359,38 @@ int grib_accessor_class_g2end_step_t::unpack_long(grib_accessor* a, long* val, s return ret; } -int grib_accessor_class_g2end_step_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_g2end_step_t::unpack_double(double* val, size_t* len) { - grib_accessor_g2end_step_t* self = (grib_accessor_g2end_step_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int ret = 0; + grib_handle* h = grib_handle_of_accessor(this); + int ret = 0; long start_step_value; long start_step_unit; long numberOfTimeRanges; - if ((ret = grib_get_long_internal(h, self->start_step_value, &start_step_value))) + if ((ret = grib_get_long_internal(h, start_step_value_, &start_step_value))) return ret; if ((ret = grib_get_long_internal(h, "startStepUnit", &start_step_unit))) return ret; /* point in time */ - if (self->year == NULL) { + if (year_ == NULL) { *val = start_step_value; if ((ret = grib_set_long_internal(h, "endStepUnit", start_step_unit))) return ret; return 0; } - Assert(self->numberOfTimeRanges); - if ((ret = grib_get_long_internal(h, self->numberOfTimeRanges, &numberOfTimeRanges))) + Assert(numberOfTimeRanges_); + if ((ret = grib_get_long_internal(h, numberOfTimeRanges_, &numberOfTimeRanges))) return ret; Assert(numberOfTimeRanges == 1 || numberOfTimeRanges == 2); try { if (numberOfTimeRanges == 1) { - ret = unpack_one_time_range_double_(a, val, len); + ret = unpack_one_time_range_double_(val, len); } else { - ret = unpack_multiple_time_ranges_double_(a, val, len); + ret = unpack_multiple_time_ranges_double_(val, len); } } catch (std::exception& e) { @@ -410,10 +401,9 @@ int grib_accessor_class_g2end_step_t::unpack_double(grib_accessor* a, double* va return ret; } -static int pack_long_(grib_accessor* a, const long end_step_value, const long end_step_unit) +int grib_accessor_g2end_step_t::pack_long_(const long end_step_value, const long end_step_unit) { - grib_accessor_g2end_step_t* self = (grib_accessor_g2end_step_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); int err = 0; long year; @@ -435,34 +425,34 @@ static int pack_long_(grib_accessor* a, const long end_step_value, const long en long typeOfTimeIncrement; double dend, dstep; - const int show_units_for_hours = a->context->grib_hourly_steps_with_units; + const int show_units_for_hours = context_->grib_hourly_steps_with_units; eccodes::Step end_step{ end_step_value, end_step_unit }; /*point in time */ - if (self->year == NULL) { + if (year_ == NULL) { if ((err = grib_set_long_internal(h, "startStepUnit", end_step.unit().value())) != GRIB_SUCCESS) return err; - err = grib_set_long_internal(h, self->start_step_value, end_step.value()); + err = grib_set_long_internal(h, start_step_value_, end_step.value()); return err; } - if ((err = grib_get_long_internal(h, self->time_range_unit, &time_range_unit))) + if ((err = grib_get_long_internal(h, time_range_unit_, &time_range_unit))) return err; - if ((err = grib_get_long_internal(h, self->year, &year))) + if ((err = grib_get_long_internal(h, year_, &year))) return err; - if ((err = grib_get_long_internal(h, self->month, &month))) + if ((err = grib_get_long_internal(h, month_, &month))) return err; - if ((err = grib_get_long_internal(h, self->day, &day))) + if ((err = grib_get_long_internal(h, day_, &day))) return err; - if ((err = grib_get_long_internal(h, self->hour, &hour))) + if ((err = grib_get_long_internal(h, hour_, &hour))) return err; - if ((err = grib_get_long_internal(h, self->minute, &minute))) + if ((err = grib_get_long_internal(h, minute_, &minute))) return err; - if ((err = grib_get_long_internal(h, self->second, &second))) + if ((err = grib_get_long_internal(h, second_, &second))) return err; - if ((err = grib_get_long_internal(h, self->start_step_value, &start_step_value))) + if ((err = grib_get_long_internal(h, start_step_value_, &start_step_value))) return err; if ((err = grib_get_long_internal(h, "startStepUnit", &start_step_unit))) return err; @@ -477,7 +467,7 @@ static int pack_long_(grib_accessor* a, const long end_step_value, const long en return GRIB_WRONG_STEP_UNIT; } - if ((err = grib_get_long_internal(h, self->typeOfTimeIncrement, &typeOfTimeIncrement))) + if ((err = grib_get_long_internal(h, typeOfTimeIncrement_, &typeOfTimeIncrement))) return err; eccodes::Step start_step{ start_step_value, start_step_unit }; @@ -491,10 +481,11 @@ static int pack_long_(grib_accessor* a, const long end_step_value, const long en return GRIB_WRONG_STEP; } - if (!is_date_valid(year, month, day, hour, minute, second)) { // ECC-1866 - grib_context_log(h->context, GRIB_LOG_ERROR, "%s:%s: Date/Time is not valid! " - "year=%ld month=%ld day=%ld hour=%ld minute=%ld second=%ld", - a->cclass->name, __func__, year, month, day, hour, minute, second); + if (!is_date_valid(year, month, day, hour, minute, second)) { // ECC-1866 + grib_context_log(h->context, GRIB_LOG_ERROR, + "%s:%s: Date/Time is not valid! " + "year=%ld month=%ld day=%ld hour=%ld minute=%ld second=%ld", + class_name_, __func__, year, month, day, hour, minute, second); return GRIB_DECODING_ERROR; } @@ -511,17 +502,17 @@ static int pack_long_(grib_accessor* a, const long end_step_value, const long en if (err != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(h, self->year_of_end_of_interval, year_of_end_of_interval))) + if ((err = grib_set_long_internal(h, year_of_end_of_interval_, year_of_end_of_interval))) return err; - if ((err = grib_set_long_internal(h, self->month_of_end_of_interval, month_of_end_of_interval))) + if ((err = grib_set_long_internal(h, month_of_end_of_interval_, month_of_end_of_interval))) return err; - if ((err = grib_set_long_internal(h, self->day_of_end_of_interval, day_of_end_of_interval))) + if ((err = grib_set_long_internal(h, day_of_end_of_interval_, day_of_end_of_interval))) return err; - if ((err = grib_set_long_internal(h, self->hour_of_end_of_interval, hour_of_end_of_interval))) + if ((err = grib_set_long_internal(h, hour_of_end_of_interval_, hour_of_end_of_interval))) return err; - if ((err = grib_set_long_internal(h, self->minute_of_end_of_interval, minute_of_end_of_interval))) + if ((err = grib_set_long_internal(h, minute_of_end_of_interval_, minute_of_end_of_interval))) return err; - if ((err = grib_set_long_internal(h, self->second_of_end_of_interval, second_of_end_of_interval))) + if ((err = grib_set_long_internal(h, second_of_end_of_interval_, second_of_end_of_interval))) return err; const char* forecast_time_value_key = "forecastTime"; @@ -536,33 +527,32 @@ static int pack_long_(grib_accessor* a, const long end_step_value, const long en time_range_opt = eccodes::Step{ time_range.value(eccodes::Unit{ force_step_units }), eccodes::Unit{ force_step_units } }; } - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), self->time_range_value, time_range_opt.value())) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(h, time_range_value_, time_range_opt.value())) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), self->time_range_unit, time_range_opt.unit().value())) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(h, time_range_unit_, time_range_opt.unit().value())) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), forecast_time_value_key, forecast_time_opt.value())) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(h, forecast_time_value_key, forecast_time_opt.value())) != GRIB_SUCCESS) return err; - if ((err = grib_set_long_internal(grib_handle_of_accessor(a), forecast_time_unit_key, forecast_time_opt.unit().value())) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(h, forecast_time_unit_key, forecast_time_opt.unit().value())) != GRIB_SUCCESS) return err; return GRIB_SUCCESS; } -int grib_accessor_class_g2end_step_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_g2end_step_t::unpack_string(char* val, size_t* len) { - grib_accessor_g2end_step_t* self = (grib_accessor_g2end_step_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int ret = 0; - char fp_format[128] = "%g"; - size_t fp_format_len = sizeof(fp_format); - size_t step_len = 0; + grib_handle* h = grib_handle_of_accessor(this); + int ret = 0; + char fp_format[128] = "%g"; + size_t fp_format_len = sizeof(fp_format); + size_t step_len = 0; long step_value; long step_units; - const int show_units_for_hours = a->context->grib_hourly_steps_with_units; + const int show_units_for_hours = context_->grib_hourly_steps_with_units; - if ((ret = unpack_long(a, &step_value, &step_len)) != GRIB_SUCCESS) + if ((ret = unpack_long(&step_value, &step_len)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, self->step_units, &step_units)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, step_units_, &step_units)) != GRIB_SUCCESS) return ret; if ((ret = grib_get_string(h, "formatForDoubles", fp_format, &fp_format_len)) != GRIB_SUCCESS) return ret; @@ -592,9 +582,9 @@ int grib_accessor_class_g2end_step_t::unpack_string(grib_accessor* a, char* val, return GRIB_SUCCESS; } -int grib_accessor_class_g2end_step_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g2end_step_t::pack_long(const long* val, size_t* len) { - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); int ret; long force_step_units; @@ -613,7 +603,7 @@ int grib_accessor_class_g2end_step_t::pack_long(grib_accessor* a, const long* va else { end_step_unit = force_step_units; } - ret = pack_long_(a, *val, end_step_unit); + ret = pack_long_(*val, end_step_unit); } catch (std::exception& e) { grib_context_log(h->context, GRIB_LOG_ERROR, "grib_accessor_g2end_step_t::pack_long: %s", e.what()); @@ -622,9 +612,9 @@ int grib_accessor_class_g2end_step_t::pack_long(grib_accessor* a, const long* va return ret; } -int grib_accessor_class_g2end_step_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_g2end_step_t::pack_string(const char* val, size_t* len) { - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); int ret = 0; long force_step_units; if ((ret = grib_get_long_internal(h, "forceStepUnits", &force_step_units)) != GRIB_SUCCESS) @@ -637,7 +627,7 @@ int grib_accessor_class_g2end_step_t::pack_string(grib_accessor* a, const char* if ((ret = grib_set_long_internal(h, "endStepUnit", end_step.unit().value())) != GRIB_SUCCESS) return ret; - if ((ret = pack_long_(a, end_step.value(), end_step.unit().value())) != GRIB_SUCCESS) + if ((ret = pack_long_(end_step.value(), end_step.unit().value())) != GRIB_SUCCESS) return ret; } catch (std::exception& e) { @@ -647,10 +637,10 @@ int grib_accessor_class_g2end_step_t::pack_string(grib_accessor* a, const char* return GRIB_SUCCESS; } -int grib_accessor_class_g2end_step_t::get_native_type(grib_accessor* a) +long grib_accessor_g2end_step_t::get_native_type() { - grib_handle* h = grib_handle_of_accessor(a); - const int show_units_for_hours = a->context->grib_hourly_steps_with_units; + grib_handle* h = grib_handle_of_accessor(this); + const int show_units_for_hours = context_->grib_hourly_steps_with_units; if (!show_units_for_hours) { long step_units = 0; diff --git a/src/accessor/grib_accessor_class_g2end_step.h b/src/accessor/grib_accessor_class_g2end_step.h index 2a39aa1dd..5fc5d1b27 100644 --- a/src/accessor/grib_accessor_class_g2end_step.h +++ b/src/accessor/grib_accessor_class_g2end_step.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,38 +15,41 @@ class grib_accessor_g2end_step_t : public grib_accessor_long_t { public: - /* Members defined in g2end_step */ - const char* start_step_value; - const char* step_units; - const char* year; - const char* month; - const char* day; - const char* hour; - const char* minute; - const char* second; - const char* year_of_end_of_interval; - const char* month_of_end_of_interval; - const char* day_of_end_of_interval; - const char* hour_of_end_of_interval; - const char* minute_of_end_of_interval; - const char* second_of_end_of_interval; - const char* time_range_unit; - const char* time_range_value; - const char* typeOfTimeIncrement; - const char* numberOfTimeRanges; -}; - -class grib_accessor_class_g2end_step_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_g2end_step_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_g2end_step_t() : + grib_accessor_long_t() { class_name_ = "g2end_step"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2end_step_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* start_step_value_ = nullptr; + const char* step_units_ = nullptr; + const char* year_ = nullptr; + const char* month_ = nullptr; + const char* day_ = nullptr; + const char* hour_ = nullptr; + const char* minute_ = nullptr; + const char* second_ = nullptr; + const char* year_of_end_of_interval_ = nullptr; + const char* month_of_end_of_interval_ = nullptr; + const char* day_of_end_of_interval_ = nullptr; + const char* hour_of_end_of_interval_ = nullptr; + const char* minute_of_end_of_interval_ = nullptr; + const char* second_of_end_of_interval_ = nullptr; + const char* time_range_unit_ = nullptr; + const char* time_range_value_ = nullptr; + const char* typeOfTimeIncrement_ = nullptr; + const char* numberOfTimeRanges_ = nullptr; + + int unpack_one_time_range_long_(long* val, size_t* len); + int unpack_one_time_range_double_(double* val, size_t* len); + int unpack_multiple_time_ranges_long_(long* val, size_t* len); + int unpack_multiple_time_ranges_double_(double* val, size_t* len); + int pack_long_(const long end_step_value, const long end_step_unit); }; diff --git a/src/accessor/grib_accessor_class_g2grid.cc b/src/accessor/grib_accessor_class_g2grid.cc index 3bc0a9a22..6dddc5a3f 100644 --- a/src/accessor/grib_accessor_class_g2grid.cc +++ b/src/accessor/grib_accessor_class_g2grid.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,32 +10,28 @@ #include "grib_accessor_class_g2grid.h" -grib_accessor_class_g2grid_t _grib_accessor_class_g2grid{ "g2grid" }; -grib_accessor_class* grib_accessor_class_g2grid = &_grib_accessor_class_g2grid; +grib_accessor_g2grid_t _grib_accessor_g2grid{}; +grib_accessor* grib_accessor_g2grid = &_grib_accessor_g2grid; - -void grib_accessor_class_g2grid_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g2grid_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_g2grid_t* self = (grib_accessor_g2grid_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_double_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - self->latitude_first = grib_arguments_get_name(hand, c, n++); - self->longitude_first = grib_arguments_get_name(hand, c, n++); - self->latitude_last = grib_arguments_get_name(hand, c, n++); - self->longitude_last = grib_arguments_get_name(hand, c, n++); - self->i_increment = grib_arguments_get_name(hand, c, n++); - self->j_increment = grib_arguments_get_name(hand, c, n++); - self->basic_angle = grib_arguments_get_name(hand, c, n++); - self->sub_division = grib_arguments_get_name(hand, c, n++); + latitude_first_ = grib_arguments_get_name(hand, c, n++); + longitude_first_ = grib_arguments_get_name(hand, c, n++); + latitude_last_ = grib_arguments_get_name(hand, c, n++); + longitude_last_ = grib_arguments_get_name(hand, c, n++); + i_increment_ = grib_arguments_get_name(hand, c, n++); + j_increment_ = grib_arguments_get_name(hand, c, n++); + basic_angle_ = grib_arguments_get_name(hand, c, n++); + sub_division_ = grib_arguments_get_name(hand, c, n++); - a->flags |= - GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC | - GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC | GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_g2grid_t::value_count(grib_accessor* a, long* count) +int grib_accessor_g2grid_t::value_count(long* count) { *count = 6; return 0; @@ -45,15 +40,14 @@ int grib_accessor_class_g2grid_t::value_count(grib_accessor* a, long* count) // GRIB edition 2 uses microdegrees #define ANGLE_SUBDIVISIONS (1000 * 1000) -int grib_accessor_class_g2grid_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_g2grid_t::unpack_double(double* val, size_t* len) { - grib_accessor_g2grid_t* self = (grib_accessor_g2grid_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int ret = 0; + grib_handle* hand = grib_handle_of_accessor(this); + int ret = 0; long basic_angle = 0; long sub_division = 0; - int n = 0; + int n = 0; long v[6]; if (*len < 6) { @@ -61,13 +55,12 @@ int grib_accessor_class_g2grid_t::unpack_double(grib_accessor* a, double* val, s return ret; } - if ((ret = grib_get_long_internal(hand, self->basic_angle, &basic_angle)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, basic_angle_, &basic_angle)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->sub_division, &sub_division)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, sub_division_, &sub_division)) != GRIB_SUCCESS) return ret; - if (sub_division == GRIB_MISSING_LONG || sub_division == 0) sub_division = ANGLE_SUBDIVISIONS; @@ -75,28 +68,28 @@ int grib_accessor_class_g2grid_t::unpack_double(grib_accessor* a, double* val, s basic_angle = 1; n = 0; - if ((ret = grib_get_long_internal(hand, self->latitude_first, &v[n++])) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, latitude_first_, &v[n++])) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->longitude_first, &v[n++])) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, longitude_first_, &v[n++])) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->latitude_last, &v[n++])) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, latitude_last_, &v[n++])) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->longitude_last, &v[n++])) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, longitude_last_, &v[n++])) != GRIB_SUCCESS) return ret; - if (!self->i_increment) + if (!i_increment_) v[n++] = GRIB_MISSING_LONG; - else if ((ret = grib_get_long_internal(hand, self->i_increment, &v[n++])) != GRIB_SUCCESS) + else if ((ret = grib_get_long_internal(hand, i_increment_, &v[n++])) != GRIB_SUCCESS) return ret; - if (!self->j_increment) { + if (!j_increment_) { v[n++] = GRIB_MISSING_LONG; } else { - if ((ret = grib_get_long_internal(hand, self->j_increment, &v[n++])) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, j_increment_, &v[n++])) != GRIB_SUCCESS) return ret; } for (int i = 0; i < n; i++) @@ -178,10 +171,9 @@ static int trial(const double* val, long v[6], long* basic_angle, long* sub_divi return is_ok(val, v, *basic_angle, *sub_division); } -int grib_accessor_class_g2grid_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_g2grid_t::pack_double(const double* val, size_t* len) { - grib_accessor_g2grid_t* self = (grib_accessor_g2grid_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); int ret; long v[6]; int n; @@ -205,7 +197,7 @@ int grib_accessor_class_g2grid_t::pack_double(grib_accessor* a, const double* va sub_division = ANGLE_SUBDIVISIONS; if (!is_ok(val, v, basic_angle, sub_division)) - grib_context_log(a->context, GRIB_LOG_DEBUG, "Grid cannot be coded with any loss of precision"); + grib_context_log(context_, GRIB_LOG_DEBUG, "Grid cannot be coded with any loss of precision"); } if (basic_angle == 1 && sub_division == ANGLE_SUBDIVISIONS) { @@ -213,33 +205,33 @@ int grib_accessor_class_g2grid_t::pack_double(grib_accessor* a, const double* va sub_division = GRIB_MISSING_LONG; } - if ((ret = grib_set_long_internal(hand, self->basic_angle, basic_angle)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, basic_angle_, basic_angle)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(hand, self->sub_division, sub_division)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, sub_division_, sub_division)) != GRIB_SUCCESS) return ret; n = 0; - if ((ret = grib_set_long_internal(hand, self->latitude_first, v[n++])) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, latitude_first_, v[n++])) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(hand, self->longitude_first, v[n++])) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, longitude_first_, v[n++])) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(hand, self->latitude_last, v[n++])) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, latitude_last_, v[n++])) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(hand, self->longitude_last, v[n++])) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, longitude_last_, v[n++])) != GRIB_SUCCESS) return ret; - if (!self->i_increment) + if (!i_increment_) n++; - else if ((ret = grib_set_long_internal(hand, self->i_increment, v[n++])) != GRIB_SUCCESS) + else if ((ret = grib_set_long_internal(hand, i_increment_, v[n++])) != GRIB_SUCCESS) return ret; - if (!self->j_increment) + if (!j_increment_) n++; - else if ((ret = grib_set_long_internal(hand, self->j_increment, v[n++])) != GRIB_SUCCESS) + else if ((ret = grib_set_long_internal(hand, j_increment_, v[n++])) != GRIB_SUCCESS) return ret; return GRIB_SUCCESS; diff --git a/src/accessor/grib_accessor_class_g2grid.h b/src/accessor/grib_accessor_class_g2grid.h index 07c9f9862..0053608f1 100644 --- a/src/accessor/grib_accessor_class_g2grid.h +++ b/src/accessor/grib_accessor_class_g2grid.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,24 +15,21 @@ class grib_accessor_g2grid_t : public grib_accessor_double_t { public: - /* Members defined in g2grid */ - const char* latitude_first; - const char* longitude_first; - const char* latitude_last; - const char* longitude_last; - const char* i_increment; - const char* j_increment; - const char* basic_angle; - const char* sub_division; -}; - -class grib_accessor_class_g2grid_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_g2grid_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_g2grid_t() : + grib_accessor_double_t() { class_name_ = "g2grid"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2grid_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* latitude_first_ = nullptr; + const char* longitude_first_ = nullptr; + const char* latitude_last_ = nullptr; + const char* longitude_last_ = nullptr; + const char* i_increment_ = nullptr; + const char* j_increment_ = nullptr; + const char* basic_angle_ = nullptr; + const char* sub_division_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g2latlon.cc b/src/accessor/grib_accessor_class_g2latlon.cc index afb3a2f7a..14ba5f5c5 100644 --- a/src/accessor/grib_accessor_class_g2latlon.cc +++ b/src/accessor/grib_accessor_class_g2latlon.cc @@ -11,24 +11,21 @@ #include "grib_accessor_class_g2latlon.h" -grib_accessor_class_g2latlon_t _grib_accessor_class_g2latlon{ "g2latlon" }; -grib_accessor_class* grib_accessor_class_g2latlon = &_grib_accessor_class_g2latlon; +grib_accessor_g2latlon_t _grib_accessor_g2latlon{}; +grib_accessor* grib_accessor_g2latlon = &_grib_accessor_g2latlon; - -void grib_accessor_class_g2latlon_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g2latlon_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_g2latlon_t* self = (grib_accessor_g2latlon_t*)a; + grib_accessor_double_t::init(l, c); int n = 0; - self->grid = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->index = grib_arguments_get_long(grib_handle_of_accessor(a), c, n++); - self->given = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + grid_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + index_ = grib_arguments_get_long(grib_handle_of_accessor(this), c, n++); + given_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); } -int grib_accessor_class_g2latlon_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_g2latlon_t::unpack_double(double* val, size_t* len) { - grib_accessor_g2latlon_t* self = (grib_accessor_g2latlon_t*)a; int ret = 0; long given = 1; @@ -40,8 +37,8 @@ int grib_accessor_class_g2latlon_t::unpack_double(grib_accessor* a, double* val, return ret; } - if (self->given) - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->given, &given)) != GRIB_SUCCESS) + if (given_) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), given_, &given)) != GRIB_SUCCESS) return ret; if (!given) { @@ -49,41 +46,40 @@ int grib_accessor_class_g2latlon_t::unpack_double(grib_accessor* a, double* val, return GRIB_SUCCESS; } - if ((ret = grib_get_double_array_internal(grib_handle_of_accessor(a), self->grid, grid, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_double_array_internal(grib_handle_of_accessor(this), grid_, grid, &size)) != GRIB_SUCCESS) return ret; - *val = grid[self->index]; + *val = grid[index_]; return GRIB_SUCCESS; } -int grib_accessor_class_g2latlon_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_g2latlon_t::pack_double(const double* val, size_t* len) { - grib_accessor_g2latlon_t* self = (grib_accessor_g2latlon_t*)a; int ret = 0; double grid[6]; size_t size = 6; double new_val = *val; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); if (*len < 1) { ret = GRIB_ARRAY_TOO_SMALL; return ret; } - if (self->given) { + if (given_) { long given = *val != GRIB_MISSING_DOUBLE; - if ((ret = grib_set_long_internal(hand, self->given, given)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, given_, given)) != GRIB_SUCCESS) return ret; } - if ((ret = grib_get_double_array_internal(hand, self->grid, grid, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_double_array_internal(hand, grid_, grid, &size)) != GRIB_SUCCESS) return ret; /* index 1 is longitudeOfFirstGridPointInDegrees * index 3 is longitudeOfLastGridPointInDegrees */ - if ((self->index == 1 || self->index == 3)) { + if ((index_ == 1 || index_ == 3)) { /* WMO regulation for GRIB edition 2: * The longitude values shall be limited to the range 0 to 360 degrees inclusive */ new_val = normalise_longitude_in_degrees(*val); @@ -91,30 +87,28 @@ int grib_accessor_class_g2latlon_t::pack_double(grib_accessor* a, const double* fprintf(stderr, "ECCODES DEBUG pack_double g2latlon: normalise longitude %g -> %g\n", *val, new_val); } } - grid[self->index] = new_val; + grid[index_] = new_val; - return grib_set_double_array_internal(hand, self->grid, grid, size); + return grib_set_double_array_internal(hand, grid_, grid, size); } -int grib_accessor_class_g2latlon_t::pack_missing(grib_accessor* a) +int grib_accessor_g2latlon_t::pack_missing() { - grib_accessor_g2latlon_t* self = (grib_accessor_g2latlon_t*)a; - double missing = GRIB_MISSING_DOUBLE; - size_t size = 1; + double missing = GRIB_MISSING_DOUBLE; + size_t size = 1; - if (!self->given) + if (!given_) return GRIB_NOT_IMPLEMENTED; - return pack_double(a, &missing, &size); + return pack_double(&missing, &size); } -int grib_accessor_class_g2latlon_t::is_missing(grib_accessor* a) +int grib_accessor_g2latlon_t::is_missing() { - grib_accessor_g2latlon_t* self = (grib_accessor_g2latlon_t*)a; - long given = 1; + long given = 1; - if (self->given) - grib_get_long_internal(grib_handle_of_accessor(a), self->given, &given); + if (given_) + grib_get_long_internal(grib_handle_of_accessor(this), given_, &given); return !given; } diff --git a/src/accessor/grib_accessor_class_g2latlon.h b/src/accessor/grib_accessor_class_g2latlon.h index f4733757e..27c235b0c 100644 --- a/src/accessor/grib_accessor_class_g2latlon.h +++ b/src/accessor/grib_accessor_class_g2latlon.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,20 +15,17 @@ class grib_accessor_g2latlon_t : public grib_accessor_double_t { public: - /* Members defined in g2latlon */ - const char* grid; - int index; - const char* given; -}; - -class grib_accessor_class_g2latlon_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_g2latlon_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_g2latlon_t() : + grib_accessor_double_t() { class_name_ = "g2latlon"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2latlon_t{}; } - int pack_missing(grib_accessor*) override; - int is_missing(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_missing() override; + int is_missing() override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* grid_ = nullptr; + int index_ = 0; + const char* given_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g2level.cc b/src/accessor/grib_accessor_class_g2level.cc index 8da0be27f..05dd07b26 100644 --- a/src/accessor/grib_accessor_class_g2level.cc +++ b/src/accessor/grib_accessor_class_g2level.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,24 +10,22 @@ #include "grib_accessor_class_g2level.h" -grib_accessor_class_g2level_t _grib_accessor_class_g2level{ "g2level" }; -grib_accessor_class* grib_accessor_class_g2level = &_grib_accessor_class_g2level; +grib_accessor_g2level_t _grib_accessor_g2level{}; +grib_accessor* grib_accessor_g2level = &_grib_accessor_g2level; - -void grib_accessor_class_g2level_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g2level_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_g2level_t* self = (grib_accessor_g2level_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_long_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - self->type_first = grib_arguments_get_name(hand, c, n++); - self->scale_first = grib_arguments_get_name(hand, c, n++); - self->value_first = grib_arguments_get_name(hand, c, n++); - self->pressure_units = grib_arguments_get_name(hand, c, n++); + type_first_ = grib_arguments_get_name(hand, c, n++); + scale_first_ = grib_arguments_get_name(hand, c, n++); + value_first_ = grib_arguments_get_name(hand, c, n++); + pressure_units_ = grib_arguments_get_name(hand, c, n++); // See ECC-1644 - a->flags |= GRIB_ACCESSOR_FLAG_COPY_IF_CHANGING_EDITION; + flags_ |= GRIB_ACCESSOR_FLAG_COPY_IF_CHANGING_EDITION; } bool is_tigge(grib_handle* h) @@ -39,11 +36,10 @@ bool is_tigge(grib_handle* h) return (productionStatus == 4 || productionStatus == 5); } -int grib_accessor_class_g2level_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_g2level_t::unpack_double(double* val, size_t* len) { - int ret = 0; - grib_accessor_g2level_t* self = (grib_accessor_g2level_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + int ret = 0; + grib_handle* hand = grib_handle_of_accessor(this); long type_first = 0; long scale_first = 0; @@ -54,13 +50,13 @@ int grib_accessor_class_g2level_t::unpack_double(grib_accessor* a, double* val, double v; - if ((ret = grib_get_long_internal(hand, self->type_first, &type_first)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, type_first_, &type_first)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->scale_first, &scale_first)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, scale_first_, &scale_first)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->value_first, &value_first)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, value_first_, &value_first)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_string_internal(hand, self->pressure_units, pressure_units, &pressure_units_len)) != GRIB_SUCCESS) + if ((ret = grib_get_string_internal(hand, pressure_units_, pressure_units, &pressure_units_len)) != GRIB_SUCCESS) return ret; if (value_first == GRIB_MISSING_LONG) { @@ -103,7 +99,7 @@ int grib_accessor_class_g2level_t::unpack_double(grib_accessor* a, double* val, // Switch to Pa instead of hPa as the value is less than a hectoPascal char pa[] = "Pa"; size_t lpa = strlen(pa); - if ((ret = grib_set_string_internal(hand, self->pressure_units, pa, &lpa)) != GRIB_SUCCESS) + if ((ret = grib_set_string_internal(hand, pressure_units_, pa, &lpa)) != GRIB_SUCCESS) return ret; } else { @@ -118,22 +114,21 @@ int grib_accessor_class_g2level_t::unpack_double(grib_accessor* a, double* val, return GRIB_SUCCESS; } -int grib_accessor_class_g2level_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g2level_t::unpack_long(long* val, size_t* len) { double dval = 0; - int ret = unpack_double(a, &dval, len); + int ret = unpack_double(&dval, len); if (ret == GRIB_SUCCESS) { *val = (long)(dval + 0.5); // round up } return ret; } -int grib_accessor_class_g2level_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_g2level_t::pack_double(const double* val, size_t* len) { - grib_accessor_g2level_t* self = (grib_accessor_g2level_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int ret = 0; - double value_first = *val; + grib_handle* hand = grib_handle_of_accessor(this); + int ret = 0; + double value_first = *val; // long scale_first = 0; long type_first = 0; char pressure_units[10] = {0,}; @@ -141,16 +136,16 @@ int grib_accessor_class_g2level_t::pack_double(grib_accessor* a, const double* v const long lval = (long)value_first; if (value_first == lval) { // input is a whole number; process it as an integer - return pack_long(a, &lval, len); + return pack_long(&lval, len); } if (*len != 1) return GRIB_WRONG_ARRAY_SIZE; - if ((ret = grib_get_long_internal(hand, self->type_first, &type_first)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, type_first_, &type_first)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_string_internal(hand, self->pressure_units, pressure_units, &pressure_units_len)) != GRIB_SUCCESS) + if ((ret = grib_get_string_internal(hand, pressure_units_, pressure_units, &pressure_units_len)) != GRIB_SUCCESS) return ret; switch (type_first) { @@ -176,22 +171,22 @@ int grib_accessor_class_g2level_t::pack_double(grib_accessor* a, const double* v ret = compute_scaled_value_and_scale_factor(value_first, scaled_value_max, scale_factor_max, &lscaled_value, &lscale_factor); if (ret) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Key %s (unpack_double): Failed to compute %s and %s from %g", - a->name, self->scale_first, self->value_first, value_first); + grib_context_log(context_, GRIB_LOG_ERROR, "Key %s (unpack_double): Failed to compute %s and %s from %g", + name_, scale_first_, value_first_, value_first); return ret; } if (type_first > 9) { - if ((ret = grib_set_long_internal(hand, self->scale_first, (long)lscale_factor)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, scale_first_, (long)lscale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(hand, self->value_first, (long)lscaled_value)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, value_first_, (long)lscaled_value)) != GRIB_SUCCESS) return ret; } return GRIB_SUCCESS; } -int grib_accessor_class_g2level_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g2level_t::pack_long(const long* val, size_t* len) { int ret = 0; long value_first = *val; @@ -200,27 +195,26 @@ int grib_accessor_class_g2level_t::pack_long(grib_accessor* a, const long* val, char pressure_units[10] = {0,}; size_t pressure_units_len = 10; - grib_accessor_g2level_t* self = (grib_accessor_g2level_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int change_scale_and_value = 1; - bool tigge = is_tigge(hand); + grib_handle* hand = grib_handle_of_accessor(this); + int change_scale_and_value = 1; + bool tigge = is_tigge(hand); if (*len != 1) return GRIB_WRONG_ARRAY_SIZE; // Not sure if this is necessary // if (value_first == GRIB_MISSING_LONG) { - // if ((ret=grib_set_missing(hand, self->scale_first)) != GRIB_SUCCESS) + // if ((ret=grib_set_missing(hand, scale_first_ )) != GRIB_SUCCESS) // return ret; - // if ((ret=grib_set_missing(hand, self->value_first)) != GRIB_SUCCESS) + // if ((ret=grib_set_missing(hand, value_first_ )) != GRIB_SUCCESS) // return ret; // return GRIB_SUCCESS; // } - if ((ret = grib_get_long_internal(hand, self->type_first, &type_first)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, type_first_, &type_first)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_string_internal(hand, self->pressure_units, pressure_units, &pressure_units_len)) != GRIB_SUCCESS) + if ((ret = grib_get_string_internal(hand, pressure_units_, pressure_units, &pressure_units_len)) != GRIB_SUCCESS) return ret; switch (type_first) { @@ -257,9 +251,9 @@ int grib_accessor_class_g2level_t::pack_long(grib_accessor* a, const long* val, if (change_scale_and_value) { if (type_first > 9) { - if ((ret = grib_set_long_internal(hand, self->scale_first, scale_first)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, scale_first_, scale_first)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(hand, self->value_first, value_first)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, value_first_, value_first)) != GRIB_SUCCESS) return ret; } } @@ -267,13 +261,12 @@ int grib_accessor_class_g2level_t::pack_long(grib_accessor* a, const long* val, return GRIB_SUCCESS; } -int grib_accessor_class_g2level_t::is_missing(grib_accessor* a) +int grib_accessor_g2level_t::is_missing() { - grib_accessor_g2level_t* self = (grib_accessor_g2level_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int err = 0; + grib_handle* hand = grib_handle_of_accessor(this); + int err = 0; - int ret = grib_is_missing(hand, self->scale_first, &err) + - grib_is_missing(hand, self->value_first, &err); + int ret = grib_is_missing(hand, scale_first_, &err) + + grib_is_missing(hand, value_first_, &err); return ret; } diff --git a/src/accessor/grib_accessor_class_g2level.h b/src/accessor/grib_accessor_class_g2level.h index 55511b8f0..f60a8fbd0 100644 --- a/src/accessor/grib_accessor_class_g2level.h +++ b/src/accessor/grib_accessor_class_g2level.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,22 +15,19 @@ class grib_accessor_g2level_t : public grib_accessor_long_t { public: - /* Members defined in g2level */ - const char* type_first; - const char* scale_first; - const char* value_first; - const char* pressure_units; -}; - -class grib_accessor_class_g2level_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_g2level_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_g2level_t() : + grib_accessor_long_t() { class_name_ = "g2level"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2level_t{}; } - int is_missing(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int is_missing() override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* type_first_ = nullptr; + const char* scale_first_ = nullptr; + const char* value_first_ = nullptr; + const char* pressure_units_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g2lon.cc b/src/accessor/grib_accessor_class_g2lon.cc index b7cb43d03..63b6d8e6a 100644 --- a/src/accessor/grib_accessor_class_g2lon.cc +++ b/src/accessor/grib_accessor_class_g2lon.cc @@ -11,26 +11,23 @@ #include "grib_accessor_class_g2lon.h" -grib_accessor_class_g2lon_t _grib_accessor_class_g2lon{ "g2lon" }; -grib_accessor_class* grib_accessor_class_g2lon = &_grib_accessor_class_g2lon; +grib_accessor_g2lon_t _grib_accessor_g2lon{}; +grib_accessor* grib_accessor_g2lon = &_grib_accessor_g2lon; - -void grib_accessor_class_g2lon_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g2lon_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_g2lon_t* self = (grib_accessor_g2lon_t*)a; + grib_accessor_double_t::init(l, c); int n = 0; - self->longitude = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + longitude_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); } -int grib_accessor_class_g2lon_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_g2lon_t::unpack_double(double* val, size_t* len) { - grib_accessor_g2lon_t* self = (grib_accessor_g2lon_t*)a; int ret = 0; long longitude; - if ((ret = grib_get_long(grib_handle_of_accessor(a), self->longitude, &longitude)) != GRIB_SUCCESS) + if ((ret = grib_get_long(grib_handle_of_accessor(this), longitude_, &longitude)) != GRIB_SUCCESS) return ret; if (longitude == GRIB_MISSING_LONG) { @@ -43,9 +40,8 @@ int grib_accessor_class_g2lon_t::unpack_double(grib_accessor* a, double* val, si return GRIB_SUCCESS; } -int grib_accessor_class_g2lon_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_g2lon_t::pack_double(const double* val, size_t* len) { - grib_accessor_g2lon_t* self = (grib_accessor_g2lon_t*)a; long longitude; double value = *val; @@ -57,5 +53,5 @@ int grib_accessor_class_g2lon_t::pack_double(grib_accessor* a, const double* val value += 360; longitude = (long)(value * 1000000); } - return grib_set_long(grib_handle_of_accessor(a), self->longitude, longitude); + return grib_set_long(grib_handle_of_accessor(this), longitude_, longitude); } diff --git a/src/accessor/grib_accessor_class_g2lon.h b/src/accessor/grib_accessor_class_g2lon.h index d3f5bd8ff..936d3175a 100644 --- a/src/accessor/grib_accessor_class_g2lon.h +++ b/src/accessor/grib_accessor_class_g2lon.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_g2lon_t : public grib_accessor_double_t { public: - /* Members defined in g2lon */ - const char* longitude; -}; - -class grib_accessor_class_g2lon_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_g2lon_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_g2lon_t() : + grib_accessor_double_t() { class_name_ = "g2lon"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2lon_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* longitude_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_g2step_range.cc b/src/accessor/grib_accessor_class_g2step_range.cc index 0c1b49e21..adf08b7d1 100644 --- a/src/accessor/grib_accessor_class_g2step_range.cc +++ b/src/accessor/grib_accessor_class_g2step_range.cc @@ -13,22 +13,19 @@ #include "step_utilities.h" #include +grib_accessor_g2step_range_t _grib_accessor_g2step_range{}; +grib_accessor* grib_accessor_g2step_range = &_grib_accessor_g2step_range; -grib_accessor_class_g2step_range_t _grib_accessor_class_g2step_range{ "g2step_range" }; -grib_accessor_class* grib_accessor_class_g2step_range = &_grib_accessor_class_g2step_range; - - -void grib_accessor_class_g2step_range_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_g2step_range_t::init(const long l, grib_arguments* c) { - grib_accessor_class_gen_t::init(a, l, c); - grib_accessor_g2step_range_t* self = (grib_accessor_g2step_range_t*)a; + grib_accessor_gen_t::init(l, c); int n = 0; - self->start_step = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->end_step = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + start_step_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + end_step_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); - a->length = 0; + length_ = 0; } // static void dump(grib_accessor* a, grib_dumper* dumper) @@ -36,19 +33,18 @@ void grib_accessor_class_g2step_range_t::init(grib_accessor* a, const long l, gr // grib_dump_string(dumper, a, NULL); //} -int grib_accessor_class_g2step_range_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_g2step_range_t::unpack_string(char* val, size_t* len) { - grib_accessor_g2step_range_t* self = (grib_accessor_g2step_range_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int ret = 0; - size_t size = 0; - double start_step_value = 0; - double end_step_value = 0; + grib_handle* h = grib_handle_of_accessor(this); + int ret = 0; + size_t size = 0; + double start_step_value = 0; + double end_step_value = 0; long step_units; - int show_hours = a->context->grib_hourly_steps_with_units; + int show_hours = context_->grib_hourly_steps_with_units; - if ((ret = grib_get_double_internal(h, self->start_step, &start_step_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(h, start_step_, &start_step_value)) != GRIB_SUCCESS) return ret; if ((ret = grib_get_long_internal(h, "stepUnits", &step_units)) != GRIB_SUCCESS) return ret; @@ -65,11 +61,11 @@ int grib_accessor_class_g2step_range_t::unpack_string(grib_accessor* a, char* va std::stringstream ss; eccodes::Step start_step{ start_step_value, step_units }; - if (self->end_step == NULL) { + if (end_step_ == NULL) { ss << start_step.value(fp_format, show_hours); } else { - if ((ret = grib_get_double_internal(h, self->end_step, &end_step_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(h, end_step_, &end_step_value)) != GRIB_SUCCESS) return ret; eccodes::Step end_step{ end_step_value, step_units }; @@ -92,7 +88,7 @@ int grib_accessor_class_g2step_range_t::unpack_string(grib_accessor* a, char* va memcpy(val, ss.str().c_str(), size); } catch (std::exception& e) { - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_g2step_range_t::unpack_string: %s", e.what()); + grib_context_log(context_, GRIB_LOG_ERROR, "grib_accessor_g2step_range_t::unpack_string: %s", e.what()); return GRIB_DECODING_ERROR; } @@ -103,11 +99,10 @@ int grib_accessor_class_g2step_range_t::unpack_string(grib_accessor* a, char* va // and can be in different units // stepRange="X" in instantaneous field is equivalent to set step=X // stepRange="X" in accumulated field is equivalent to startStep=X, endStep=startStep -int grib_accessor_class_g2step_range_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_g2step_range_t::pack_string(const char* val, size_t* len) { - grib_accessor_g2step_range_t* self = (grib_accessor_g2step_range_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int ret = 0; + grib_handle* h = grib_handle_of_accessor(this); + int ret = 0; long force_step_units; if ((ret = grib_get_long_internal(h, "forceStepUnits", &force_step_units)) != GRIB_SUCCESS) @@ -126,7 +121,7 @@ int grib_accessor_class_g2step_range_t::pack_string(grib_accessor* a, const char try { std::vector steps = parse_range(val, eccodes::Unit{ force_step_units }); if (steps.size() == 0) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Could not parse step range: %s", val); + grib_context_log(context_, GRIB_LOG_ERROR, "Could not parse step range: %s", val); return GRIB_INVALID_ARGUMENT; } @@ -150,58 +145,57 @@ int grib_accessor_class_g2step_range_t::pack_string(grib_accessor* a, const char if ((ret = set_step(h, "forecastTime", "indicatorOfUnitOfTimeRange", step_0)) != GRIB_SUCCESS) return ret; - if (self->end_step != NULL) { + if (end_step_ != NULL) { if (steps.size() > 1) { if ((ret = grib_set_long_internal(h, "endStepUnit", step_1.unit().value()))) return ret; - if ((ret = grib_set_long_internal(h, self->end_step, step_1.value()))) + if ((ret = grib_set_long_internal(h, end_step_, step_1.value()))) return ret; } else { if ((ret = grib_set_long_internal(h, "endStepUnit", step_0.unit().value()))) return ret; - if ((ret = grib_set_long_internal(h, self->end_step, step_0.value()))) + if ((ret = grib_set_long_internal(h, end_step_, step_0.value()))) return ret; } } } catch (std::exception& e) { - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_class_g2step_range::pack_string: %s", e.what()); + grib_context_log(context_, GRIB_LOG_ERROR, "grib_accessor_g2step_range::pack_string: %s", e.what()); return GRIB_INVALID_ARGUMENT; } return GRIB_SUCCESS; } -int grib_accessor_class_g2step_range_t::value_count(grib_accessor* a, long* count) +int grib_accessor_g2step_range_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_g2step_range_t::string_length(grib_accessor* a) +size_t grib_accessor_g2step_range_t::string_length() { return 255; } -int grib_accessor_class_g2step_range_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_g2step_range_t::pack_long(const long* val, size_t* len) { char buff[100]; size_t bufflen = 100; snprintf(buff, sizeof(buff), "%ld", *val); - return pack_string(a, buff, &bufflen); + return pack_string(buff, &bufflen); } -int grib_accessor_class_g2step_range_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_g2step_range_t::unpack_long(long* val, size_t* len) { - grib_accessor_g2step_range_t* self = (grib_accessor_g2step_range_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int ret = 0; - long end_start_value = 0; - long end_step_value = 0; - long step_units = 0; + grib_handle* h = grib_handle_of_accessor(this); + int ret = 0; + long end_start_value = 0; + long end_step_value = 0; + long step_units = 0; - if ((ret = grib_get_long_internal(h, self->start_step, &end_start_value)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, start_step_, &end_start_value)) != GRIB_SUCCESS) return ret; try { if ((ret = grib_get_long_internal(h, "stepUnits", &step_units)) != GRIB_SUCCESS) @@ -212,34 +206,33 @@ int grib_accessor_class_g2step_range_t::unpack_long(grib_accessor* a, long* val, } eccodes::Step start_step{ end_start_value, step_units }; - if (self->end_step == NULL) { + if (end_step_ == NULL) { *val = start_step.value(); } else { - if ((ret = grib_get_long_internal(h, self->end_step, &end_step_value)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, end_step_, &end_step_value)) != GRIB_SUCCESS) return ret; eccodes::Step end_step{ end_step_value, step_units }; *val = end_step.value(); } } catch (std::exception& e) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Failed to unpack step range: %s", e.what()); + grib_context_log(context_, GRIB_LOG_ERROR, "Failed to unpack step range: %s", e.what()); return GRIB_DECODING_ERROR; } return GRIB_SUCCESS; } -int grib_accessor_class_g2step_range_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_g2step_range_t::unpack_double(double* val, size_t* len) { - grib_accessor_g2step_range_t* self = (grib_accessor_g2step_range_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int ret = 0; - double end_start_value = 0; - double end_step_value = 0; - long step_units = 0; + grib_handle* h = grib_handle_of_accessor(this); + int ret = 0; + double end_start_value = 0; + double end_step_value = 0; + long step_units = 0; - if ((ret = grib_get_double_internal(h, self->start_step, &end_start_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(h, start_step_, &end_start_value)) != GRIB_SUCCESS) return ret; if ((ret = grib_get_long_internal(h, "stepUnits", &step_units)) != GRIB_SUCCESS) throw std::runtime_error("Failed to get stepUnits"); @@ -251,25 +244,25 @@ int grib_accessor_class_g2step_range_t::unpack_double(grib_accessor* a, double* } eccodes::Step start_step{ end_start_value, step_units }; - if (self->end_step == NULL) { + if (end_step_ == NULL) { *val = start_step.value(); } else { - if ((ret = grib_get_double_internal(h, self->end_step, &end_step_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(h, end_step_, &end_step_value)) != GRIB_SUCCESS) return ret; eccodes::Step end_step{ end_step_value, step_units }; *val = end_step.value(); } } catch (std::exception& e) { - grib_context_log(a->context, GRIB_LOG_ERROR, "grid_accessor_g2step_range::unpack_double: %s", e.what()); + grib_context_log(context_, GRIB_LOG_ERROR, "grid_accessor_g2step_range::unpack_double: %s", e.what()); return GRIB_DECODING_ERROR; } return GRIB_SUCCESS; } -int grib_accessor_class_g2step_range_t::get_native_type(grib_accessor* a) +long grib_accessor_g2step_range_t::get_native_type() { return GRIB_TYPE_STRING; } diff --git a/src/accessor/grib_accessor_class_g2step_range.h b/src/accessor/grib_accessor_class_g2step_range.h index ec44546b3..638f3b6a8 100644 --- a/src/accessor/grib_accessor_class_g2step_range.h +++ b/src/accessor/grib_accessor_class_g2step_range.h @@ -15,23 +15,20 @@ class grib_accessor_g2step_range_t : public grib_accessor_gen_t { public: - /* Members defined in g2step_range */ - const char* start_step; - const char* end_step; -}; - -class grib_accessor_class_g2step_range_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_g2step_range_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_g2step_range_t() : + grib_accessor_gen_t() { class_name_ = "g2step_range"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_g2step_range_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* start_step_ = nullptr; + const char* end_step_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_gaussian_grid_name.cc b/src/accessor/grib_accessor_class_gaussian_grid_name.cc index f6b79e794..f8a34e06f 100644 --- a/src/accessor/grib_accessor_class_gaussian_grid_name.cc +++ b/src/accessor/grib_accessor_class_gaussian_grid_name.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,49 +10,45 @@ #include "grib_accessor_class_gaussian_grid_name.h" -grib_accessor_class_gaussian_grid_name_t _grib_accessor_class_gaussian_grid_name{ "gaussian_grid_name" }; -grib_accessor_class* grib_accessor_class_gaussian_grid_name = &_grib_accessor_class_gaussian_grid_name; +grib_accessor_gaussian_grid_name_t _grib_accessor_gaussian_grid_name{}; +grib_accessor* grib_accessor_gaussian_grid_name = &_grib_accessor_gaussian_grid_name; - -void grib_accessor_class_gaussian_grid_name_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_gaussian_grid_name_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_accessor_gaussian_grid_name_t* self = (grib_accessor_gaussian_grid_name_t*)a; - int n = 0; + grib_accessor_gen_t::init(len, arg); + int n = 0; - self->N = grib_arguments_get_name(a->parent->h, arg, n++); - self->Ni = grib_arguments_get_name(a->parent->h, arg, n++); - self->isOctahedral = grib_arguments_get_name(a->parent->h, arg, n++); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + N_ = grib_arguments_get_name(parent_->h, arg, n++); + Ni_ = grib_arguments_get_name(parent_->h, arg, n++); + isOctahedral_ = grib_arguments_get_name(parent_->h, arg, n++); + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; } -int grib_accessor_class_gaussian_grid_name_t::get_native_type(grib_accessor* a) +long grib_accessor_gaussian_grid_name_t::get_native_type() { return GRIB_TYPE_STRING; } #define MAX_GRIDNAME_LEN 16 -int grib_accessor_class_gaussian_grid_name_t::unpack_string(grib_accessor* a, char* v, size_t* len) +int grib_accessor_gaussian_grid_name_t::unpack_string(char* v, size_t* len) { - grib_accessor_gaussian_grid_name_t* self = (grib_accessor_gaussian_grid_name_t*)a; - long N = 0, Ni = 0; char tmp[MAX_GRIDNAME_LEN] = {0,}; size_t length = 0; int ret = GRIB_SUCCESS; - if ((ret = grib_get_long_internal(a->parent->h, self->N, &N)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(parent_->h, N_, &N)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(a->parent->h, self->Ni, &Ni)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(parent_->h, Ni_, &Ni)) != GRIB_SUCCESS) return ret; if (Ni == GRIB_MISSING_LONG) { /* Reduced gaussian grid */ long isOctahedral = 0; - if ((ret = grib_get_long_internal(a->parent->h, self->isOctahedral, &isOctahedral)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(parent_->h, isOctahedral_, &isOctahedral)) != GRIB_SUCCESS) return ret; if (isOctahedral == 1) { snprintf(tmp, sizeof(tmp), "O%ld", N); @@ -69,10 +64,9 @@ int grib_accessor_class_gaussian_grid_name_t::unpack_string(grib_accessor* a, ch length = strlen(tmp) + 1; if (*len < length) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, length, *len); + class_name_, name_, length, *len); *len = length; return GRIB_BUFFER_TOO_SMALL; } @@ -82,7 +76,7 @@ int grib_accessor_class_gaussian_grid_name_t::unpack_string(grib_accessor* a, ch return GRIB_SUCCESS; } -size_t grib_accessor_class_gaussian_grid_name_t::string_length(grib_accessor* a) +size_t grib_accessor_gaussian_grid_name_t::string_length() { return MAX_GRIDNAME_LEN; } diff --git a/src/accessor/grib_accessor_class_gaussian_grid_name.h b/src/accessor/grib_accessor_class_gaussian_grid_name.h index d67f80aa5..1507bd5a9 100644 --- a/src/accessor/grib_accessor_class_gaussian_grid_name.h +++ b/src/accessor/grib_accessor_class_gaussian_grid_name.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_gaussian_grid_name_t : public grib_accessor_gen_t { public: - /* Members defined in gaussian_grid_name */ - const char* N; - const char* Ni; - const char* isOctahedral; -}; - -class grib_accessor_class_gaussian_grid_name_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_gaussian_grid_name_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_gaussian_grid_name_t() : + grib_accessor_gen_t() { class_name_ = "gaussian_grid_name"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_gaussian_grid_name_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + void init(const long, grib_arguments*) override; + +private: + const char* N_ = nullptr; + const char* Ni_ = nullptr; + const char* isOctahedral_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_gds_is_present.cc b/src/accessor/grib_accessor_class_gds_is_present.cc index b568b9bdd..36a2c154c 100644 --- a/src/accessor/grib_accessor_class_gds_is_present.cc +++ b/src/accessor/grib_accessor_class_gds_is_present.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,62 +10,58 @@ #include "grib_accessor_class_gds_is_present.h" -grib_accessor_class_gds_is_present_t _grib_accessor_class_gds_is_present{ "gds_is_present" }; -grib_accessor_class* grib_accessor_class_gds_is_present = &_grib_accessor_class_gds_is_present; +grib_accessor_gds_is_present_t _grib_accessor_gds_is_present{}; +grib_accessor* grib_accessor_gds_is_present = &_grib_accessor_gds_is_present; - -void grib_accessor_class_gds_is_present_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_gds_is_present_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - int n = 0; - grib_accessor_gds_is_present_t* self = (grib_accessor_gds_is_present_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - self->gds_present = grib_arguments_get_name(h, c, n++); - self->grid_definition = grib_arguments_get_name(h, c, n++); - self->bitmap_present = grib_arguments_get_name(h, c, n++); - self->values = grib_arguments_get_name(h, c, n++); + grib_accessor_long_t::init(l, c); + int n = 0; + grib_handle* h = grib_handle_of_accessor(this); + gds_present_ = grib_arguments_get_name(h, c, n++); + grid_definition_ = grib_arguments_get_name(h, c, n++); + bitmap_present_ = grib_arguments_get_name(h, c, n++); + values_ = grib_arguments_get_name(h, c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; - a->length = 0; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + flags_ |= GRIB_ACCESSOR_FLAG_HIDDEN; + length_ = 0; } -int grib_accessor_class_gds_is_present_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_gds_is_present_t::pack_long(const long* val, size_t* len) { - grib_accessor_gds_is_present_t* self = (grib_accessor_gds_is_present_t*)a; - long missing = 255; - int ret = 0; - size_t size = 0; - double* values = NULL; - grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + long missing = 255; + int ret = 0; + size_t size = 0; + double* values = NULL; + grib_context* c = context_; + grib_handle* h = grib_handle_of_accessor(this); if (*val != 1) return GRIB_NOT_IMPLEMENTED; - if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) return ret; values = (double*)grib_context_malloc(c, size * sizeof(double)); if (!values) return GRIB_OUT_OF_MEMORY; - if ((ret = grib_get_double_array_internal(h, self->values, values, &size)) != GRIB_SUCCESS) { + if ((ret = grib_get_double_array_internal(h, values_, values, &size)) != GRIB_SUCCESS) { grib_context_free(c, values); return ret; } - if ((ret = grib_set_long_internal(h, self->gds_present, *val)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, gds_present_, *val)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(h, self->bitmap_present, *val)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, bitmap_present_, *val)) != GRIB_SUCCESS) return ret; - - if ((ret = grib_set_long_internal(h, self->grid_definition, missing)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, grid_definition_, missing)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_double_array_internal(h, self->values, values, size)) != GRIB_SUCCESS) + if ((ret = grib_set_double_array_internal(h, values_, values, size)) != GRIB_SUCCESS) return ret; grib_context_free(c, values); @@ -74,13 +69,12 @@ int grib_accessor_class_gds_is_present_t::pack_long(grib_accessor* a, const long return GRIB_SUCCESS; } -int grib_accessor_class_gds_is_present_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_gds_is_present_t::unpack_long(long* val, size_t* len) { - int ret = 0; - grib_handle* h = grib_handle_of_accessor(a); - grib_accessor_gds_is_present_t* self = (grib_accessor_gds_is_present_t*)a; + int ret = 0; + grib_handle* h = grib_handle_of_accessor(this); - if ((ret = grib_get_long_internal(h, self->gds_present, val)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, gds_present_, val)) != GRIB_SUCCESS) return ret; *len = 1; diff --git a/src/accessor/grib_accessor_class_gds_is_present.h b/src/accessor/grib_accessor_class_gds_is_present.h index d69619d44..246dba159 100644 --- a/src/accessor/grib_accessor_class_gds_is_present.h +++ b/src/accessor/grib_accessor_class_gds_is_present.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_gds_is_present_t : public grib_accessor_long_t { public: - /* Members defined in gds_is_present */ - const char* gds_present; - const char* grid_definition; - const char* bitmap_present; - const char* values; -}; - -class grib_accessor_class_gds_is_present_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_gds_is_present_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_gds_is_present_t() : + grib_accessor_long_t() { class_name_ = "gds_is_present"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_gds_is_present_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* gds_present_ = nullptr; + const char* grid_definition_ = nullptr; + const char* bitmap_present_ = nullptr; + const char* values_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_gds_not_present_bitmap.cc b/src/accessor/grib_accessor_class_gds_not_present_bitmap.cc new file mode 100644 index 000000000..f42438b97 --- /dev/null +++ b/src/accessor/grib_accessor_class_gds_not_present_bitmap.cc @@ -0,0 +1,109 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#include "grib_accessor_class_gds_not_present_bitmap.h" + +grib_accessor_gds_not_present_bitmap_t _grib_accessor_gds_not_present_bitmap{}; +grib_accessor* grib_accessor_gds_not_present_bitmap = &_grib_accessor_gds_not_present_bitmap; + +void grib_accessor_gds_not_present_bitmap_t::init(const long v, grib_arguments* args) +{ + grib_accessor_gen_t::init(v, args); + int n = 0; + grib_handle* hand = grib_handle_of_accessor(this); + + missing_value_ = grib_arguments_get_name(hand, args, n++); + number_of_values_ = grib_arguments_get_name(hand, args, n++); + number_of_points_ = grib_arguments_get_name(hand, args, n++); + latitude_of_first_point_ = grib_arguments_get_name(hand, args, n++); + ni_ = grib_arguments_get_name(hand, args, n++); + length_ = 0; +} + +int grib_accessor_gds_not_present_bitmap_t::value_count(long* number_of_points) +{ + *number_of_points = 0; + return grib_get_long_internal(grib_handle_of_accessor(this), number_of_points_, number_of_points); +} + +int grib_accessor_gds_not_present_bitmap_t::unpack_double(double* val, size_t* len) +{ + grib_handle* hand = grib_handle_of_accessor(this); + + long number_of_points = 0, number_of_values = 0, ni = 0; + long latitude_of_first_point = 0; + size_t i = 0; + size_t n_vals = 0; + long nn = 0; + long missing_value; + + double* coded_vals = NULL; + int err = value_count(&nn); + n_vals = nn; + if (err) + return err; + + if ((err = grib_get_long(hand, number_of_points_, &number_of_points)) != GRIB_SUCCESS) + return err; + + if ((err = grib_get_long(hand, number_of_values_, &number_of_values)) != GRIB_SUCCESS) + return err; + + if ((err = grib_get_long(hand, latitude_of_first_point_, &latitude_of_first_point)) != GRIB_SUCCESS) + return err; + + if ((err = grib_get_long(hand, missing_value_, &missing_value)) != GRIB_SUCCESS) + return err; + + if ((err = grib_get_long(hand, ni_, &ni)) != GRIB_SUCCESS) + return err; + + if (*len < number_of_points) { + *len = n_vals; + return GRIB_ARRAY_TOO_SMALL; + } + + if (number_of_values > 0) { + coded_vals = (double*)grib_context_malloc(context_, number_of_values * sizeof(double)); + + if (coded_vals == NULL) + return GRIB_OUT_OF_MEMORY; + } + + if (latitude_of_first_point == 0) { + for (i = 0; i < number_of_values; i++) + val[i] = 1; + for (i = number_of_values; i < number_of_points; i++) + val[i] = 0; + } + else { + for (i = 0; i < ni - 1; i++) + val[i] = 0; + for (i = ni - 1; i < number_of_points; i++) + val[i] = 1; + } + + *len = number_of_points; + + grib_context_free(context_, coded_vals); + return err; +} + +int grib_accessor_gds_not_present_bitmap_t::pack_double(const double* val, size_t* len) +{ + // See deprecated/grib_accessor_gds_not_present_bitmap.cc for + // a possible implementation + return GRIB_NOT_IMPLEMENTED; +} + +long grib_accessor_gds_not_present_bitmap_t::get_native_type() +{ + return GRIB_TYPE_DOUBLE; +} diff --git a/src/accessor/grib_accessor_class_gen.cc b/src/accessor/grib_accessor_class_gen.cc index 3a721f196..167e48764 100644 --- a/src/accessor/grib_accessor_class_gen.cc +++ b/src/accessor/grib_accessor_class_gen.cc @@ -8,215 +8,28 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -#include "grib_accessor.h" +#include "grib_accessor_class.h" #include "grib_accessor_class_gen.h" #include -// ======================== grib_accessor_gen ======================== -void grib_accessor_gen_t::dump(grib_dumper* f) -{ - return cclass->dump(this, f); -} -int grib_accessor_gen_t::pack_missing() -{ - // grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); - return cclass->pack_missing(this); -} -// int grib_accessor_gen_t::pack_zero(grib_accessor* a) -// { -// return cclass->clear(a); -// } -int grib_accessor_gen_t::is_missing_internal() -{ - return cclass->is_missing(this); -} - -int grib_accessor_gen_t::pack_double(const double* v, size_t* len) -{ - return cclass->pack_double(this, v, len); -} - -int grib_accessor_gen_t::pack_float(const float* v, size_t* len) -{ - return cclass->pack_float(this, v, len); -} - -int grib_accessor_gen_t::pack_expression(grib_expression* e) -{ - return cclass->pack_expression(this, e); -} - -int grib_accessor_gen_t::pack_string(const char* v, size_t* len) -{ - return cclass->pack_string(this, v, len); -} - -int grib_accessor_gen_t::pack_string_array(const char** v, size_t* len) -{ - return cclass->pack_string_array(this, v, len); -} - -int grib_accessor_gen_t::pack_long(const long* v, size_t* len) -{ - return cclass->pack_long(this, v, len); -} - -int grib_accessor_gen_t::pack_bytes(const unsigned char* v, size_t* len) -{ - return cclass->pack_bytes(this, v, len); -} - -int grib_accessor_gen_t::unpack_bytes(unsigned char* v, size_t* len) -{ - return cclass->unpack_bytes(this, v, len); -} - -int grib_accessor_gen_t::unpack_double_subarray(double* v, size_t start, size_t len) -{ - return cclass->unpack_double_subarray(this, v, start, len); -} - -int grib_accessor_gen_t::unpack_double(double* v, size_t* len) -{ - return cclass->unpack_double(this, v, len); -} - -int grib_accessor_gen_t::unpack_float(float* v, size_t* len) -{ - return cclass->unpack_float(this, v, len); -} - -int grib_accessor_gen_t::unpack_double_element(size_t i, double* v) -{ - return cclass->unpack_double_element(this, i, v); -} - -int grib_accessor_gen_t::unpack_float_element(size_t i, float* v) -{ - // return cclass->unpack_float_element(this, i, v); - return GRIB_NOT_IMPLEMENTED; -} - -int grib_accessor_gen_t::unpack_long(long* v, size_t* len) -{ - return cclass->unpack_long(this, v, len); -} - -long grib_accessor_gen_t::get_native_type() -{ - return cclass->get_native_type(this); -} - -long grib_accessor_gen_t::get_next_position_offset() -{ - return cclass->next_offset(this); -} - -long grib_accessor_gen_t::string_length() -{ - return cclass->string_length(this); -} - -long grib_accessor_gen_t::byte_offset() -{ - return cclass->byte_offset(this); -} - -long grib_accessor_gen_t::byte_count() -{ - return cclass->byte_count(this); -} - -int grib_accessor_gen_t::value_count(long* count) -{ - return cclass->value_count(this, count); -} - -int grib_accessor_gen_t::notify_change(grib_accessor* changed) -{ - return cclass->notify_change(this, changed); -} - -// Get the values for the indices passed in. -// The length of the 'index_array' argument should be 'len' and 'val_array' should also contain at least 'len' elements -int grib_accessor_gen_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) -{ - return cclass->unpack_double_element_set(this, index_array, len, val_array); -} -int grib_accessor_gen_t::unpack_float_element_set(const size_t* index_array, size_t len, float* val_array) -{ - throw std::runtime_error("grib_unpack_float_element_set not implemented"); -} -int grib_accessor_gen_t::unpack_string(char* v, size_t* len) -{ - return cclass->unpack_string(this, v, len); -} -int grib_accessor_gen_t::unpack_string_array(char** v, size_t* len) -{ - return cclass->unpack_string_array(this, v, len); -} +grib_accessor_gen_t _grib_accessor_gen = grib_accessor_gen_t{}; +grib_accessor* grib_accessor_gen = &_grib_accessor_gen; void grib_accessor_gen_t::init_accessor(const long len, grib_arguments* args) { - this->cclass->init(this, len, args); + init(len, args); } -grib_accessor* grib_accessor_gen_t::clone(grib_section* s, int* err) +void grib_accessor_gen_t::init(const long len, grib_arguments* param) { - grib_context* ct = this->context; - grib_context_log(ct, GRIB_LOG_DEBUG, "clone %s ==> %s", cclass->name, this->name); - return cclass->make_clone(this, s, err); -} - -void grib_accessor_gen_t::update_size(size_t len) -{ - cclass->update_size(this, len); -} - -int grib_accessor_gen_t::nearest_smaller_value(double val, double* nearest) -{ - return cclass->nearest_smaller_value(this, val, nearest); -} - -size_t grib_accessor_gen_t::preferred_size(int from_handle) -{ - return cclass->preferred_size(this, from_handle); -} - -grib_accessor* grib_accessor_gen_t::next_accessor() -{ - return cclass->next(this, 1); -} - -void grib_accessor_gen_t::resize(size_t new_size) -{ - cclass->resize(this, new_size); -} - -// For this one, ALL destroy are called -void grib_accessor_gen_t::destroy(grib_context* ct) -{ - cclass->destroy(ct, this); - delete this; -} - - -// ======================== grib_accessor_class_gen ======================== - - -grib_accessor_class_gen_t _grib_accessor_class_gen = grib_accessor_class_gen_t("gen"); -grib_accessor_class* grib_accessor_class_gen = &_grib_accessor_class_gen; - -void grib_accessor_class_gen_t::init(grib_accessor* a, const long len, grib_arguments* param) -{ - grib_action* act = (grib_action*)(a->creator); - if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { - a->length = 0; - if (!a->vvalue) - a->vvalue = (grib_virtual_value*)grib_context_malloc_clear(a->context, sizeof(grib_virtual_value)); - a->vvalue->type = a->get_native_type(); - a->vvalue->length = len; + grib_action* act = (grib_action*)(creator_); + if (flags_ & GRIB_ACCESSOR_FLAG_TRANSIENT) { + length_ = 0; + if (!vvalue_) + vvalue_ = (grib_virtual_value*)grib_context_malloc_clear(context_, sizeof(grib_virtual_value)); + vvalue_->type = get_native_type(); + vvalue_->length = len; if (act->default_value != NULL) { const char* p = 0; size_t s_len = 1; @@ -224,98 +37,98 @@ void grib_accessor_class_gen_t::init(grib_accessor* a, const long len, grib_argu int ret = 0; double d; char tmp[1024]; - grib_expression* expression = grib_arguments_get_expression(grib_handle_of_accessor(a), act->default_value, 0); - int type = grib_expression_native_type(grib_handle_of_accessor(a), expression); + grib_expression* expression = grib_arguments_get_expression(grib_handle_of_accessor(this), act->default_value, 0); + int type = grib_expression_native_type(grib_handle_of_accessor(this), expression); switch (type) { // TODO(maee): add single-precision case case GRIB_TYPE_DOUBLE: - grib_expression_evaluate_double(grib_handle_of_accessor(a), expression, &d); - a->pack_double(&d, &s_len); + grib_expression_evaluate_double(grib_handle_of_accessor(this), expression, &d); + pack_double(&d, &s_len); break; case GRIB_TYPE_LONG: - grib_expression_evaluate_long(grib_handle_of_accessor(a), expression, &l); - a->pack_long(&l, &s_len); + grib_expression_evaluate_long(grib_handle_of_accessor(this), expression, &l); + pack_long(&l, &s_len); break; default: s_len = sizeof(tmp); - p = grib_expression_evaluate_string(grib_handle_of_accessor(a), expression, tmp, &s_len, &ret); + p = grib_expression_evaluate_string(grib_handle_of_accessor(this), expression, tmp, &s_len, &ret); if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to evaluate %s as string", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to evaluate %s as string", name_); Assert(0); } s_len = strlen(p) + 1; - a->pack_string(p, &s_len); + pack_string(p, &s_len); break; } } } else { - a->length = len; + length_ = len; } } -void grib_accessor_class_gen_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_gen_t::dump(grib_dumper* dumper) { - const int type = a->get_native_type(); + const int type = get_native_type(); switch (type) { case GRIB_TYPE_STRING: - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); break; case GRIB_TYPE_DOUBLE: - grib_dump_double(dumper, a, NULL); + grib_dump_double(dumper, this, NULL); break; case GRIB_TYPE_LONG: - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); break; default: - grib_dump_bytes(dumper, a, NULL); + grib_dump_bytes(dumper, this, NULL); } } -long grib_accessor_class_gen_t::next_offset(grib_accessor* a) +long grib_accessor_gen_t::next_offset() { - return a->offset + a->length; + return offset_ + length_; } -int grib_accessor_class_gen_t::value_count(grib_accessor* a, long* count) +int grib_accessor_gen_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_gen_t::string_length(grib_accessor* a) +size_t grib_accessor_gen_t::string_length() { return 1024; } -long grib_accessor_class_gen_t::byte_count(grib_accessor* a) +long grib_accessor_gen_t::byte_count() { - return a->length; + return length_; } -int grib_accessor_class_gen_t::get_native_type(grib_accessor* a) +long grib_accessor_gen_t::get_native_type() { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Accessor %s [%s] must implement 'get_native_type'", a->name, a->cclass->name); + grib_context_log(context_, GRIB_LOG_ERROR, + "Accessor %s [%s] must implement 'get_native_type'", name_, class_name_); return GRIB_TYPE_UNDEFINED; } -long grib_accessor_class_gen_t::byte_offset(grib_accessor* a) +long grib_accessor_gen_t::byte_offset() { - return a->offset; + return offset_; } -int grib_accessor_class_gen_t::unpack_bytes(grib_accessor* a, unsigned char* val, size_t* len) +int grib_accessor_gen_t::unpack_bytes(unsigned char* val, size_t* len) { - unsigned char* buf = grib_handle_of_accessor(a)->buffer->data; - const long length = a->byte_count(); - const long offset = a->byte_offset(); + const unsigned char* buf = grib_handle_of_accessor(this)->buffer->data; + const long length = byte_count(); + const long offset = byte_offset(); if (*len < length) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it is %ld bytes long", a->name, length); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s, it is %ld bytes long", name_, length); *len = length; return GRIB_ARRAY_TOO_SMALL; } @@ -326,31 +139,31 @@ int grib_accessor_class_gen_t::unpack_bytes(grib_accessor* a, unsigned char* val return GRIB_SUCCESS; } -int grib_accessor_class_gen_t::clear(grib_accessor* a) +int grib_accessor_gen_t::clear() { - unsigned char* buf = grib_handle_of_accessor(a)->buffer->data; - const long length = a->byte_count(); - const long offset = a->byte_offset(); + unsigned char* buf = grib_handle_of_accessor(this)->buffer->data; + const long length = byte_count(); + const long offset = byte_offset(); memset(buf + offset, 0, length); return GRIB_SUCCESS; } -int grib_accessor_class_gen_t::unpack_long(grib_accessor* a, long* v, size_t* len) +int grib_accessor_gen_t::unpack_long(long* v, size_t* len) { is_overridden_[UNPACK_LONG] = 0; int type = GRIB_TYPE_UNDEFINED; if (is_overridden_[UNPACK_DOUBLE] == 1) { double val = 0.0; size_t l = 1; - a->unpack_double(&val, &l); + unpack_double(&val, &l); if (is_overridden_[UNPACK_DOUBLE] == 1) { if (val == GRIB_MISSING_DOUBLE) *v = GRIB_MISSING_LONG; else *v = (long)val; - grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting double %s to long", a->name); + grib_context_log(context_, GRIB_LOG_DEBUG, "Casting double %s to long", name_); return GRIB_SUCCESS; } } @@ -359,36 +172,36 @@ int grib_accessor_class_gen_t::unpack_long(grib_accessor* a, long* v, size_t* le char val[1024]; size_t l = sizeof(val); char* last = NULL; - a->unpack_string(val, &l); + unpack_string(val, &l); if (is_overridden_[UNPACK_STRING] == 1) { *v = strtol(val, &last, 10); if (*last == 0) { - grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting string %s to long", a->name); + grib_context_log(context_, GRIB_LOG_DEBUG, "Casting string %s to long", name_); return GRIB_SUCCESS; } } } - grib_context_log(a->context, GRIB_LOG_ERROR, "Cannot unpack key '%s' as long", a->name); - if (grib_get_native_type(grib_handle_of_accessor(a), a->name, &type) == GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Hint: Try unpacking as %s", grib_get_type_name(type)); + grib_context_log(context_, GRIB_LOG_ERROR, "Cannot unpack key '%s' as long", name_); + if (grib_get_native_type(grib_handle_of_accessor(this), name_, &type) == GRIB_SUCCESS) { + grib_context_log(context_, GRIB_LOG_ERROR, "Hint: Try unpacking as %s", grib_get_type_name(type)); } return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_gen_t::unpack_double(grib_accessor* a, double* v, size_t* len) +int grib_accessor_gen_t::unpack_double(double* v, size_t* len) { - return unpack_helper(a, v, len); + return unpack_helper(this, v, len); } -int grib_accessor_class_gen_t::unpack_float(grib_accessor* a, float* v, size_t* len) +int grib_accessor_gen_t::unpack_float(float* v, size_t* len) { - return unpack_helper(a, v, len); + return unpack_helper(this, v, len); } -int grib_accessor_class_gen_t::unpack_string(grib_accessor* a, char* v, size_t* len) +int grib_accessor_gen_t::unpack_string(char* v, size_t* len) { is_overridden_[UNPACK_STRING] = 0; @@ -396,12 +209,12 @@ int grib_accessor_class_gen_t::unpack_string(grib_accessor* a, char* v, size_t* if (is_overridden_[UNPACK_DOUBLE] == 1) { double val = 0.0; size_t l = 1; - err = a->unpack_double(&val, &l); + err = unpack_double(&val, &l); if (is_overridden_[UNPACK_DOUBLE] == 1) { if (err) return err; snprintf(v, 64, "%g", val); *len = strlen(v); - grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting double %s to string", a->name); + grib_context_log(context_, GRIB_LOG_DEBUG, "Casting double %s to string", name_); return GRIB_SUCCESS; } } @@ -409,12 +222,12 @@ int grib_accessor_class_gen_t::unpack_string(grib_accessor* a, char* v, size_t* if (is_overridden_[UNPACK_LONG] == 1) { long val = 0; size_t l = 1; - err = a->unpack_long(&val, &l); + err = unpack_long(&val, &l); if (is_overridden_[UNPACK_LONG] == 1) { if (err) return err; snprintf(v, 64, "%ld", val); *len = strlen(v); - grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting long %s to string\n", a->name); + grib_context_log(context_, GRIB_LOG_DEBUG, "Casting long %s to string\n", name_); return GRIB_SUCCESS; } } @@ -422,28 +235,28 @@ int grib_accessor_class_gen_t::unpack_string(grib_accessor* a, char* v, size_t* return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_gen_t::unpack_string_array(grib_accessor* a, char** v, size_t* len) +int grib_accessor_gen_t::unpack_string_array(char** v, size_t* len) { size_t length = 0; - int err = grib_get_string_length_acc(a, &length); + int err = grib_get_string_length_acc(this, &length); if (err) return err; - v[0] = (char*)grib_context_malloc_clear(a->context, length); - a->unpack_string(v[0], &length); // TODO(masn): check return value + v[0] = (char*)grib_context_malloc_clear(context_, length); + unpack_string(v[0], &length); // TODO(masn): check return value *len = 1; return GRIB_SUCCESS; } -int grib_accessor_class_gen_t::pack_expression(grib_accessor* a, grib_expression* e) +int grib_accessor_gen_t::pack_expression(grib_expression* e) { size_t len = 1; long lval = 0; double dval = 0; const char* cval = NULL; int ret = 0; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); // Use the native type of the expression not the accessor switch (grib_expression_native_type(hand, e)) { @@ -451,26 +264,26 @@ int grib_accessor_class_gen_t::pack_expression(grib_accessor* a, grib_expression len = 1; ret = grib_expression_evaluate_long(hand, e, &lval); if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to set %s as long (from %s)", - a->name, e->cclass->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to set %s as long (from %s)", + name_, e->cclass->name); return ret; } /*if (hand->context->debug) - printf("ECCODES DEBUG grib_accessor_class_gen_t::pack_expression %s %ld\n", a->name,lval);*/ - return a->pack_long(&lval, &len); + printf("ECCODES DEBUG grib_accessor_gen_t::pack_expression %s %ld\n", name,lval);*/ + return pack_long(&lval, &len); } case GRIB_TYPE_DOUBLE: { len = 1; ret = grib_expression_evaluate_double(hand, e, &dval); if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to set %s as double (from %s)", - a->name, e->cclass->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to set %s as double (from %s)", + name_, e->cclass->name); return ret; } /*if (hand->context->debug) - printf("ECCODES DEBUG grib_accessor_class_gen_t::pack_expression %s %g\n", a->name, dval);*/ - return a->pack_double(&dval, &len); + printf("ECCODES DEBUG grib_accessor_gen_t::pack_expression %s %g\n", name, dval);*/ + return pack_double(&dval, &len); } case GRIB_TYPE_STRING: { @@ -478,24 +291,24 @@ int grib_accessor_class_gen_t::pack_expression(grib_accessor* a, grib_expression len = sizeof(tmp); cval = grib_expression_evaluate_string(hand, e, tmp, &len, &ret); if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to set %s as string (from %s)", - a->name, e->cclass->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to set %s as string (from %s)", + name_, e->cclass->name); return ret; } len = strlen(cval); /*if (hand->context->debug) - printf("ECCODES DEBUG grib_accessor_class_gen_t::pack_expression %s %s\n", a->name, cval);*/ - return a->pack_string(cval, &len); + printf("ECCODES DEBUG grib_accessor_gen_t::pack_expression %s %s\n", name, cval);*/ + return pack_string(cval, &len); } } return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_gen_t::pack_long(grib_accessor* a, const long* v, size_t* len) +int grib_accessor_gen_t::pack_long(const long* v, size_t* len) { is_overridden_[PACK_LONG] = 0; - grib_context* c = a->context; + grib_context* c = context_; if (is_overridden_[PACK_DOUBLE]) { double* val = (double*)grib_context_malloc(c, *len * (sizeof(double))); if (!val) { @@ -504,14 +317,14 @@ int grib_accessor_class_gen_t::pack_long(grib_accessor* a, const long* v, size_t } for (size_t i = 0; i < *len; i++) val[i] = v[i]; - int ret = a->pack_double(val, len); + int ret = pack_double(val, len); grib_context_free(c, val); if (is_overridden_[PACK_DOUBLE]) { return ret; } } - grib_context_log(c, GRIB_LOG_ERROR, "Should not pack '%s' as an integer", a->name); + grib_context_log(c, GRIB_LOG_ERROR, "Should not pack '%s' as an integer", name_); if (is_overridden_[PACK_STRING]) { grib_context_log(c, GRIB_LOG_ERROR, "Try packing as a string"); } @@ -521,7 +334,7 @@ int grib_accessor_class_gen_t::pack_long(grib_accessor* a, const long* v, size_t int pack_double_array_as_long(grib_accessor* a, const double* v, size_t* len) { - grib_context* c = a->context; + grib_context* c = a->context_; int ret = GRIB_SUCCESS; size_t numBytes = *len * (sizeof(long)); long* lValues = (long*)grib_context_malloc(c, numBytes); @@ -536,30 +349,30 @@ int pack_double_array_as_long(grib_accessor* a, const double* v, size_t* len) return ret; } -int grib_accessor_class_gen_t::pack_double(grib_accessor* a, const double* v, size_t* len) +int grib_accessor_gen_t::pack_double(const double* v, size_t* len) { is_overridden_[PACK_DOUBLE] = 0; - grib_context* c = a->context; + grib_context* c = context_; - if (is_overridden_[PACK_LONG] || strcmp(a->cclass->name, "codetable") == 0) { + if (is_overridden_[PACK_LONG] || strcmp(class_name_, "codetable") == 0) { /* ECC-648: Special case of codetable */ - return pack_double_array_as_long(a, v, len); + return pack_double_array_as_long(this, v, len); } - grib_context_log(c, GRIB_LOG_ERROR, "Should not pack '%s' as a double", a->name); + grib_context_log(c, GRIB_LOG_ERROR, "Should not pack '%s' as a double", name_); if (is_overridden_[PACK_STRING]) { grib_context_log(c, GRIB_LOG_ERROR, "Try packing as a string"); } return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_gen_t::pack_string_array(grib_accessor* a, const char** v, size_t* len) +int grib_accessor_gen_t::pack_string_array(const char** v, size_t* len) { int err = 0; size_t length = 0; grib_accessor* as = 0; - as = a; + as = this; long i = (long)*len - 1; while (as && i >= 0) { length = strlen(v[i]); @@ -567,12 +380,12 @@ int grib_accessor_class_gen_t::pack_string_array(grib_accessor* a, const char** if (err) return err; --i; - as = as->same; + as = as->same_; } return GRIB_SUCCESS; } -int grib_accessor_class_gen_t::pack_string(grib_accessor* a, const char* v, size_t* len) +int grib_accessor_gen_t::pack_string(const char* v, size_t* len) { is_overridden_[PACK_STRING] = 0; if (is_overridden_[PACK_DOUBLE]) { @@ -580,113 +393,124 @@ int grib_accessor_class_gen_t::pack_string(grib_accessor* a, const char* v, size char* endPtr = NULL; /* for error handling */ double val = strtod(v, &endPtr); if (*endPtr) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Invalid value (%s) for key '%s'. String cannot be converted to a double", - __func__, v, a->name); + __func__, v, name_); return GRIB_WRONG_TYPE; } - return a->pack_double(&val, &l); + return pack_double(&val, &l); } if (is_overridden_[PACK_LONG]) { size_t l = 1; long val = atol(v); - int err = a->pack_long(&val, &l); + int err = pack_long(&val, &l); if (is_overridden_[PACK_LONG]) { return err; } } - grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack '%s' as string", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Should not pack '%s' as string", name_); return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_gen_t::pack_bytes(grib_accessor* a, const unsigned char* val, size_t* len) +int grib_accessor_gen_t::pack_bytes(const unsigned char* val, size_t* len) { const size_t length = *len; - if (length != a->length) { - grib_context_log(a->context, GRIB_LOG_ERROR, + if (length_ != length) { + grib_context_log(context_, GRIB_LOG_ERROR, "pack_bytes: Wrong size (%zu) for %s. It is %ld bytes long", - length, a->name, a->length); + length, name_, length_); return GRIB_BUFFER_TOO_SMALL; } - grib_buffer_replace(a, val, length, 1, 1); + grib_buffer_replace(this, val, length, 1, 1); return GRIB_SUCCESS; } -void grib_accessor_class_gen_t::destroy(grib_context* ct, grib_accessor* a) +void grib_accessor_gen_t::destroy(grib_context* ct) { - grib_dependency_remove_observed(a); - grib_dependency_remove_observer(a); - if (a->vvalue != NULL) { - grib_context_free(ct, a->vvalue); - a->vvalue = NULL; + grib_dependency_remove_observed(this); + grib_dependency_remove_observer(this); + if (vvalue_ != NULL) { + grib_context_free(ct, vvalue_); + vvalue_ = NULL; } + delete this; /*grib_context_log(ct,GRIB_LOG_DEBUG,"address=%p",a);*/ } -grib_section* grib_accessor_class_gen_t::sub_section(grib_accessor* a) +grib_section* grib_accessor_gen_t::sub_section() { return NULL; } -int grib_accessor_class_gen_t::notify_change(grib_accessor* self, grib_accessor* observed) +int grib_accessor_gen_t::notify_change(grib_accessor* observed) { /* Default behaviour is to notify creator */ - return grib_action_notify_change(self->creator, self, observed); + return grib_action_notify_change(creator_, this, observed); } -void grib_accessor_class_gen_t::update_size(grib_accessor* a, size_t s) +void grib_accessor_gen_t::update_size(size_t s) { - grib_context_log(a->context, GRIB_LOG_FATAL, - "Accessor %s [%s] must implement 'update_size'", a->name, a->cclass->name); + grib_context_log(context_, GRIB_LOG_FATAL, + "Accessor %s [%s] must implement 'update_size'", name_, class_name_); } -grib_accessor* grib_accessor_class_gen_t::next(grib_accessor* a, int mod) +grib_accessor* grib_accessor_gen_t::next_accessor() +{ + return next(this, 1); +} + +grib_accessor* grib_accessor_gen_t::next(grib_accessor* a, int mod) { grib_accessor* next = NULL; if (a->next_) { next = a->next_; } else { - if (a->parent->owner) - next = a->parent->owner->cclass->next(a->parent->owner, 0); + if (a->parent_->owner) + next = a->parent_->owner->next(a->parent_->owner, 0); } return next; } -int grib_accessor_class_gen_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_gen_t::compare(grib_accessor* b) { return GRIB_NOT_IMPLEMENTED; } /* Redefined in all padding */ -size_t grib_accessor_class_gen_t::preferred_size(grib_accessor* a, int from_handle) +size_t grib_accessor_gen_t::preferred_size(int from_handle) { - return a->length; + return length_; } -int grib_accessor_class_gen_t::is_missing(grib_accessor* a) +int grib_accessor_gen_t::is_missing_internal() +{ + return is_missing(); +} + +int grib_accessor_gen_t::is_missing() { int i = 0; int is_missing = 1; unsigned char ones = 0xff; unsigned char* v = NULL; - if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { - if (a->vvalue == NULL) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s internal error (flags=0x%lX)", a->name, a->flags); - Assert(!"grib_accessor_class_gen_t::is_missing(): a->vvalue == NULL"); + if (flags_ & GRIB_ACCESSOR_FLAG_TRANSIENT) { + if (vvalue_ == NULL) { + grib_context_log(context_, GRIB_LOG_ERROR, "%s internal error (flags=0x%lX)", name_, flags_); + Assert(!"grib_accessor_gen_t::is_missing(): vvalue == NULL"); return 0; } - return a->vvalue->missing; + return vvalue_->missing; } - Assert(a->length >= 0); + Assert(length_ >= 0); - v = grib_handle_of_accessor(a)->buffer->data + a->offset; + v = grib_handle_of_accessor(this)->buffer->data + offset_; - for (i = 0; i < a->length; i++) { + for (i = 0; i < length_; i++) { if (*v != ones) { is_missing = 0; break; @@ -697,59 +521,72 @@ int grib_accessor_class_gen_t::is_missing(grib_accessor* a) return is_missing; } -int grib_accessor_class_gen_t::unpack_double_element(grib_accessor* a, size_t i, double* val) +int grib_accessor_gen_t::unpack_double_element(size_t i, double* val) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_gen_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +int grib_accessor_gen_t::unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_gen_t::unpack_double_subarray(grib_accessor* a, double* val, size_t start, size_t len) +int grib_accessor_gen_t::unpack_double_subarray(double* val, size_t start, size_t len) { return GRIB_NOT_IMPLEMENTED; } -grib_accessor* grib_accessor_class_gen_t::make_clone(grib_accessor* a, grib_section* s, int* err) +grib_accessor* grib_accessor_gen_t::clone(grib_section* s, int* err) +{ + grib_context* ct = context_; + grib_context_log(ct, GRIB_LOG_DEBUG, "clone %s ==> %s", class_name_, name_); + return make_clone(s, err); +} + +grib_accessor* grib_accessor_gen_t::make_clone(grib_section* s, int* err) { *err = GRIB_NOT_IMPLEMENTED; return NULL; } +long grib_accessor_gen_t::get_next_position_offset() +{ + return next_offset(); +} -grib_accessor_class_gen_t::~grib_accessor_class_gen_t() {}; +grib_accessor_gen_t::~grib_accessor_gen_t() +{ +} -void grib_accessor_class_gen_t::post_init(grib_accessor*) +void grib_accessor_gen_t::post_init() { return; -}; -int grib_accessor_class_gen_t::pack_missing(grib_accessor*) +} +int grib_accessor_gen_t::pack_missing() { - throw std::runtime_error("grib_accessor_class_gen_t::pack_missing not implemented"); -}; -int grib_accessor_class_gen_t::pack_float(grib_accessor*, const float*, size_t* len) + throw std::runtime_error("grib_accessor_gen_t::pack_missing not implemented"); +} +int grib_accessor_gen_t::pack_float(const float*, size_t* len) { - throw std::runtime_error("grib_accessor_class_gen_t::pack_float not implemented"); -}; -void grib_accessor_class_gen_t::resize(grib_accessor*, size_t) + throw std::runtime_error("grib_accessor_gen_t::pack_float not implemented"); +} +void grib_accessor_gen_t::resize(size_t) { - throw std::runtime_error("grib_accessor_class_gen_t::resize not implemented"); -}; -int grib_accessor_class_gen_t::nearest_smaller_value(grib_accessor*, double, double*) + throw std::runtime_error("grib_accessor_gen_t::resize not implemented"); +} +int grib_accessor_gen_t::nearest_smaller_value(double, double*) { - throw std::runtime_error("grib_accessor_class_gen_t::nearest_smaller_value not implemented"); -}; -int grib_accessor_class_gen_t::unpack_float_element(grib_accessor*, size_t, float*) + throw std::runtime_error("grib_accessor_gen_t::nearest_smaller_value not implemented"); +} +int grib_accessor_gen_t::unpack_float_element(size_t, float*) { - throw std::runtime_error("grib_accessor_class_gen_t::unpack_float_element not implemented"); -}; -int unpack_element_set(grib_accessor*, const size_t*, size_t, double*) + throw std::runtime_error("grib_accessor_gen_t::unpack_float_element not implemented"); +} +int unpack_element_set(const size_t*, size_t, double*) { - throw std::runtime_error("grib_accessor_class_gen_t::unpack_element_set not implemented"); -}; -int grib_accessor_class_gen_t::unpack_float_element_set(grib_accessor*, const size_t*, size_t, float*) + throw std::runtime_error("grib_accessor_gen_t::unpack_element_set not implemented"); +} +int grib_accessor_gen_t::unpack_float_element_set(const size_t*, size_t, float*) { - throw std::runtime_error("grib_accessor_class_gen_t::unpack_float_element_set not implemented"); -}; + throw std::runtime_error("grib_accessor_gen_t::unpack_float_element_set not implemented"); +} diff --git a/src/accessor/grib_accessor_class_gen.h b/src/accessor/grib_accessor_class_gen.h index deba6cad2..e4aed165f 100644 --- a/src/accessor/grib_accessor_class_gen.h +++ b/src/accessor/grib_accessor_class_gen.h @@ -14,99 +14,64 @@ #include "grib_accessor.h" #include -class grib_accessor_gen_t : public grib_accessor { - void init_accessor(const long, grib_arguments*) override; - void dump(grib_dumper* f) override; - int pack_missing() override; - //int grib_pack_zero(grib_accessor* a) override; - int is_missing_internal() override; - int pack_double(const double* v, size_t* len) override; - int pack_float(const float* v, size_t* len) override; - int pack_expression(grib_expression* e) override; - int pack_string(const char* v, size_t* len) override; - int pack_string_array(const char** v, size_t* len) override; - int pack_long(const long* v, size_t* len) override; - int pack_bytes(const unsigned char* v, size_t* len) override; - int unpack_bytes(unsigned char* v, size_t* len) override; - int unpack_double_subarray(double* v, size_t start, size_t len) override; - int unpack_double(double* v, size_t* len) override; - int unpack_float(float* v, size_t* len) override; - int unpack_double_element(size_t i, double* v) override; - int unpack_float_element(size_t i, float* v) override; - int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; - int unpack_float_element_set(const size_t* index_array, size_t len, float* val_array) override; - int unpack_string(char* v, size_t* len) override; - int unpack_string_array(char** v, size_t* len) override; - int unpack_long(long* v, size_t* len) override; - long get_native_type() override; - long get_next_position_offset() override; - long string_length() override; - long byte_offset() override; - long byte_count() override; - int value_count(long* count) override; - int notify_change(grib_accessor* changed) override; - grib_accessor* clone(grib_section* s, int* err) override; - void update_size(size_t len) override; - int nearest_smaller_value(double val, double* nearest) override; - size_t preferred_size(int from_handle) override; - grib_accessor* next_accessor() override; - void resize(size_t new_size) override; - void destroy(grib_context* ct) override; -}; -class grib_accessor_class_gen_t : public grib_accessor_class +class grib_accessor_gen_t : public grib_accessor { public: - grib_accessor_class_gen_t(const char* name) : grib_accessor_class{name} {} - ~grib_accessor_class_gen_t(); + grib_accessor_gen_t() : + grib_accessor{} { class_name_ = "gen"; } + ~grib_accessor_gen_t(); - grib_accessor* create_empty_accessor() override{ return new grib_accessor_gen_t(); } - grib_section* sub_section(grib_accessor* a) override; - int get_native_type(grib_accessor*) override; - int pack_missing(grib_accessor*) override; - int is_missing(grib_accessor*) override; - int pack_bytes(grib_accessor*, const unsigned char*, size_t* len) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_float(grib_accessor*, const float* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int pack_string_array(grib_accessor*, const char**, size_t* len) override; - int pack_expression(grib_accessor*, grib_expression*) override; - int unpack_bytes(grib_accessor*, unsigned char*, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int unpack_string_array(grib_accessor*, char**, size_t* len) override; - size_t string_length(grib_accessor*) override; - long byte_count(grib_accessor*) override; - long byte_offset(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void post_init(grib_accessor*) override; - int notify_change(grib_accessor*, grib_accessor*) override; - void update_size(grib_accessor*, size_t) override; - size_t preferred_size(grib_accessor*, int) override; - void resize(grib_accessor*, size_t) override; - int nearest_smaller_value(grib_accessor*, double, double*) override; + void init_accessor(const long, grib_arguments*) override; // TODO: Implement + grib_accessor* create_empty_accessor() override { return new grib_accessor_gen_t{}; } + grib_section* sub_section() override; + long get_native_type() override; + int pack_missing() override; + int is_missing() override; + int is_missing_internal() override; // TODO: Implement + int pack_bytes(const unsigned char*, size_t* len) override; + int pack_double(const double* val, size_t* len) override; + int pack_float(const float* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int pack_string_array(const char**, size_t* len) override; + int pack_expression(grib_expression*) override; + int unpack_bytes(unsigned char*, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + int unpack_string_array(char**, size_t* len) override; + size_t string_length() override; + long byte_count() override; + long byte_offset() override; + long get_next_position_offset() override; // TODO: Implement + long next_offset() override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + void post_init() override; + int notify_change(grib_accessor* changed) override; + void update_size(size_t) override; + size_t preferred_size(int) override; + void resize(size_t) override; + int nearest_smaller_value(double, double*) override; grib_accessor* next(grib_accessor*, int) override; - int compare(grib_accessor*, grib_accessor*) override; - int unpack_double_element(grib_accessor*, size_t i, double* val) override; - int unpack_float_element(grib_accessor*, size_t i, float* val) override; - int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override; - int unpack_float_element_set(grib_accessor*, const size_t* index_array, size_t len, float* val_array) override; - int unpack_double_subarray(grib_accessor*, double* val, size_t start, size_t len) override; - int clear(grib_accessor*) override; - grib_accessor* make_clone(grib_accessor*, grib_section*, int*) override; - - template - int unpack_helper(grib_accessor* a, T* v, size_t* len); + int compare(grib_accessor* a) override; + int unpack_double_element(size_t i, double* val) override; + int unpack_float_element(size_t i, float* val) override; + int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) override; + int unpack_float_element_set(const size_t* index_array, size_t len, float* val_array) override; + int unpack_double_subarray(double* val, size_t start, size_t len) override; + int clear() override; + grib_accessor* clone(grib_section* s, int* err) override; // TODO: Implement + grib_accessor* make_clone(grib_section*, int*) override; + grib_accessor* next_accessor() override; // TODO: Implement private: - enum { + enum + { PACK_DOUBLE, PACK_FLOAT, PACK_LONG, @@ -117,14 +82,17 @@ private: UNPACK_STRING, }; std::bitset<8> is_overridden_ = 0b11111111; + + template + int unpack_helper(grib_accessor* a, T* v, size_t* len); }; template -int grib_accessor_class_gen_t::unpack_helper(grib_accessor* a, T* v, size_t* len) +int grib_accessor_gen_t::unpack_helper(grib_accessor* a, T* v, size_t* len) { static_assert(std::is_floating_point::value, "Requires floating point numbers"); - int type = GRIB_TYPE_UNDEFINED; + int type = GRIB_TYPE_UNDEFINED; const char* Tname = type_to_string(*v); if constexpr (std::is_same_v) { @@ -140,7 +108,7 @@ int grib_accessor_class_gen_t::unpack_helper(grib_accessor* a, T* v, size_t* len a->unpack_long(&val, &l); if (is_overridden_[UNPACK_LONG]) { *v = val; - grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting long %s to %s", a->name, Tname); + grib_context_log(a->context_, GRIB_LOG_DEBUG, "Casting long %s to %s", a->name_, Tname); return GRIB_SUCCESS; } } @@ -153,15 +121,15 @@ int grib_accessor_class_gen_t::unpack_helper(grib_accessor* a, T* v, size_t* len if (is_overridden_[UNPACK_STRING]) { *v = strtod(val, &last); if (*last == 0) { /* conversion of string to double worked */ - grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting string %s to %s", a->name, Tname); + grib_context_log(a->context_, GRIB_LOG_DEBUG, "Casting string %s to %s", a->name_, Tname); return GRIB_SUCCESS; } } } - grib_context_log(a->context, GRIB_LOG_ERROR, "Cannot unpack key '%s' as %s", a->name, Tname); - if (grib_get_native_type(grib_handle_of_accessor(a), a->name, &type) == GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Hint: Try unpacking as %s", grib_get_type_name(type)); + grib_context_log(a->context_, GRIB_LOG_ERROR, "Cannot unpack key '%s' as %s", a->name_, Tname); + if (grib_get_native_type(grib_handle_of_accessor(a), a->name_, &type) == GRIB_SUCCESS) { + grib_context_log(a->context_, GRIB_LOG_ERROR, "Hint: Try unpacking as %s", grib_get_type_name(type)); } return GRIB_NOT_IMPLEMENTED; diff --git a/src/accessor/grib_accessor_class_getenv.cc b/src/accessor/grib_accessor_class_getenv.cc index a6d6f9c72..7fea4feb2 100644 --- a/src/accessor/grib_accessor_class_getenv.cc +++ b/src/accessor/grib_accessor_class_getenv.cc @@ -10,57 +10,54 @@ #include "grib_accessor_class_getenv.h" -grib_accessor_class_getenv_t _grib_accessor_class_getenv{ "getenv" }; -grib_accessor_class* grib_accessor_class_getenv = &_grib_accessor_class_getenv; +grib_accessor_getenv_t _grib_accessor_getenv{}; +grib_accessor* grib_accessor_getenv = &_grib_accessor_getenv; - -void grib_accessor_class_getenv_t::init(grib_accessor* a, const long l, grib_arguments* args) +void grib_accessor_getenv_t::init(const long l, grib_arguments* args) { - grib_accessor_class_ascii_t::init(a, l, args); - grib_accessor_getenv_t* self = (grib_accessor_getenv_t*)a; - static char undefined[] = "undefined"; + grib_accessor_ascii_t::init(l, args); + static char undefined[] = "undefined"; - self->name = grib_arguments_get_string(grib_handle_of_accessor(a), args, 0); - self->default_value = grib_arguments_get_string(grib_handle_of_accessor(a), args, 1); - if (!self->default_value) - self->default_value = undefined; - self->value = 0; + envvar_ = grib_arguments_get_string(grib_handle_of_accessor(this), args, 0); + default_value_ = grib_arguments_get_string(grib_handle_of_accessor(this), args, 1); + if (!default_value_) + default_value_ = undefined; + value_ = 0; } -int grib_accessor_class_getenv_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_getenv_t::pack_string(const char* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_getenv_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_getenv_t::unpack_string(char* val, size_t* len) { - grib_accessor_getenv_t* self = (grib_accessor_getenv_t*)a; - char* v = 0; + char* v = 0; size_t l = 0; - if (!self->value) { - v = getenv(self->name); + if (!value_) { + v = getenv(envvar_); if (!v) - v = (char*)self->default_value; - self->value = v; + v = (char*)default_value_; + value_ = v; } - l = strlen(self->value); + l = strlen(value_); if (*len < l) return GRIB_BUFFER_TOO_SMALL; - snprintf(val, 1024, "%s", self->value); - *len = strlen(self->value); + snprintf(val, 1024, "%s", value_); + *len = strlen(value_); return GRIB_SUCCESS; } -int grib_accessor_class_getenv_t::value_count(grib_accessor* a, long* count) +int grib_accessor_getenv_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_getenv_t::string_length(grib_accessor* a) +size_t grib_accessor_getenv_t::string_length() { return 1024; } diff --git a/src/accessor/grib_accessor_class_getenv.h b/src/accessor/grib_accessor_class_getenv.h index b04c58a4d..bc0892a14 100644 --- a/src/accessor/grib_accessor_class_getenv.h +++ b/src/accessor/grib_accessor_class_getenv.h @@ -15,20 +15,17 @@ class grib_accessor_getenv_t : public grib_accessor_ascii_t { public: - const char* name; - char* value; - const char* default_value; -}; - -class grib_accessor_class_getenv_t : public grib_accessor_class_ascii_t -{ -public: - grib_accessor_class_getenv_t(const char* name) : grib_accessor_class_ascii_t(name) {} + grib_accessor_getenv_t() : + grib_accessor_ascii_t() { class_name_ = "getenv"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_getenv_t{}; } - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; -}; + int pack_string(const char*, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; +private: + const char* envvar_ = nullptr; + char* value_ = nullptr; + const char* default_value_ = nullptr; +}; diff --git a/src/accessor/grib_accessor_class_global_gaussian.cc b/src/accessor/grib_accessor_class_global_gaussian.cc index 7fa8c96e6..55511c7e8 100644 --- a/src/accessor/grib_accessor_class_global_gaussian.cc +++ b/src/accessor/grib_accessor_class_global_gaussian.cc @@ -10,33 +10,30 @@ #include "grib_accessor_class_global_gaussian.h" -grib_accessor_class_global_gaussian_t _grib_accessor_class_global_gaussian{ "global_gaussian" }; -grib_accessor_class* grib_accessor_class_global_gaussian = &_grib_accessor_class_global_gaussian; +grib_accessor_global_gaussian_t _grib_accessor_global_gaussian{}; +grib_accessor* grib_accessor_global_gaussian = &_grib_accessor_global_gaussian; - -void grib_accessor_class_global_gaussian_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_global_gaussian_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_global_gaussian_t* self = (grib_accessor_global_gaussian_t*)a; - int n = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_accessor_long_t::init(l, c); + int n = 0; + grib_handle* h = grib_handle_of_accessor(this); - self->N = grib_arguments_get_name(h, c, n++); - self->Ni = grib_arguments_get_name(h, c, n++); - self->di = grib_arguments_get_name(h, c, n++); - self->latfirst = grib_arguments_get_name(h, c, n++); - self->lonfirst = grib_arguments_get_name(h, c, n++); - self->latlast = grib_arguments_get_name(h, c, n++); - self->lonlast = grib_arguments_get_name(h, c, n++); - self->plpresent = grib_arguments_get_name(h, c, n++); - self->pl = grib_arguments_get_name(h, c, n++); - self->basic_angle = grib_arguments_get_name(h, c, n++); - self->subdivision = grib_arguments_get_name(h, c, n++); + N_ = grib_arguments_get_name(h, c, n++); + Ni_ = grib_arguments_get_name(h, c, n++); + di_ = grib_arguments_get_name(h, c, n++); + latfirst_ = grib_arguments_get_name(h, c, n++); + lonfirst_ = grib_arguments_get_name(h, c, n++); + latlast_ = grib_arguments_get_name(h, c, n++); + lonlast_ = grib_arguments_get_name(h, c, n++); + plpresent_ = grib_arguments_get_name(h, c, n++); + pl_ = grib_arguments_get_name(h, c, n++); + basic_angle_ = grib_arguments_get_name(h, c, n++); + subdivision_ = grib_arguments_get_name(h, c, n++); } -int grib_accessor_class_global_gaussian_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_global_gaussian_t::unpack_long(long* val, size_t* len) { - grib_accessor_global_gaussian_t* self = (grib_accessor_global_gaussian_t*)a; int ret = GRIB_SUCCESS; long latfirst, latlast, lonfirst, lonlast, basic_angle, subdivision, N, Ni; double dlatfirst, dlatlast, dlonfirst, dlonlast; @@ -44,15 +41,15 @@ int grib_accessor_class_global_gaussian_t::unpack_long(grib_accessor* a, long* v double* lats = NULL; long factor = 1000, plpresent = 0; long max_pl = 0; /* max. element of pl array */ - grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + grib_context* c = context_; + grib_handle* h = grib_handle_of_accessor(this); - if (self->basic_angle && self->subdivision) { + if (basic_angle_ && subdivision_) { factor = 1000000; - if ((ret = grib_get_long_internal(h, self->basic_angle, &basic_angle)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, basic_angle_, &basic_angle)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, self->subdivision, &subdivision)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, subdivision_, &subdivision)) != GRIB_SUCCESS) return ret; if ((basic_angle != 0 && basic_angle != GRIB_MISSING_LONG) || @@ -66,25 +63,25 @@ int grib_accessor_class_global_gaussian_t::unpack_long(grib_accessor* a, long* v } angular_precision = 1.0 / factor; - if ((ret = grib_get_long_internal(h, self->N, &N)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, N_, &N)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, self->Ni, &Ni)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, Ni_, &Ni)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, self->latfirst, &latfirst)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, latfirst_, &latfirst)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, self->lonfirst, &lonfirst)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, lonfirst_, &lonfirst)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, self->latlast, &latlast)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, latlast_, &latlast)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, self->lonlast, &lonlast)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, lonlast_, &lonlast)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, self->plpresent, &plpresent)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, plpresent_, &plpresent)) != GRIB_SUCCESS) return ret; dlatfirst = ((double)latfirst) / factor; @@ -93,14 +90,14 @@ int grib_accessor_class_global_gaussian_t::unpack_long(grib_accessor* a, long* v dlonlast = ((double)lonlast) / factor; if (N == 0) { - grib_context_log(c, GRIB_LOG_ERROR, "Key %s (unpack_long): N cannot be 0!", a->name); + grib_context_log(c, GRIB_LOG_ERROR, "Key %s (unpack_long): N cannot be 0!", name_); return GRIB_WRONG_GRID; } lats = (double*)grib_context_malloc(c, sizeof(double) * N * 2); if (!lats) { grib_context_log(c, GRIB_LOG_ERROR, - "Key %s (unpack_long): Memory allocation error: %zu bytes", a->name, sizeof(double) * N * 2); + "Key %s (unpack_long): Memory allocation error: %zu bytes", name_, sizeof(double) * N * 2); return GRIB_OUT_OF_MEMORY; } if ((ret = grib_get_gaussian_latitudes(N, lats)) != GRIB_SUCCESS) @@ -111,11 +108,11 @@ int grib_accessor_class_global_gaussian_t::unpack_long(grib_accessor* a, long* v if (plpresent) { size_t plsize = 0, i = 0; long* pl = NULL; /* pl array */ - if ((ret = grib_get_size(h, self->pl, &plsize)) != GRIB_SUCCESS) + if ((ret = grib_get_size(h, pl_, &plsize)) != GRIB_SUCCESS) return ret; Assert(plsize); pl = (long*)grib_context_malloc_clear(c, sizeof(long) * plsize); - grib_get_long_array_internal(h, self->pl, pl, &plsize); + grib_get_long_array_internal(h, pl_, pl, &plsize); max_pl = pl[0]; for (i = 1; i < plsize; i++) { @@ -141,58 +138,57 @@ int grib_accessor_class_global_gaussian_t::unpack_long(grib_accessor* a, long* v return ret; } -int grib_accessor_class_global_gaussian_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_global_gaussian_t::pack_long(const long* val, size_t* len) { - grib_accessor_global_gaussian_t* self = (grib_accessor_global_gaussian_t*)a; - int ret = GRIB_SUCCESS; + int ret = GRIB_SUCCESS; long latfirst, latlast, lonfirst, lonlast, di, diold, basic_angle = 0, N, Ni; long factor; double* lats; double ddi, dlonlast; double dfactor, dNi; long plpresent = 0; - grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + grib_context* c = context_; + grib_handle* h = grib_handle_of_accessor(this); if (*val == 0) return ret; - if (self->basic_angle) { + if (basic_angle_) { factor = 1000000; - if ((ret = grib_set_missing(h, self->subdivision)) != GRIB_SUCCESS) + if ((ret = grib_set_missing(h, subdivision_)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(h, self->basic_angle, basic_angle)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, basic_angle_, basic_angle)) != GRIB_SUCCESS) return ret; } else factor = 1000; - if ((ret = grib_get_long_internal(h, self->N, &N)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, N_, &N)) != GRIB_SUCCESS) return ret; if (N == 0) return ret; - if ((ret = grib_get_long_internal(h, self->Ni, &Ni)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, Ni_, &Ni)) != GRIB_SUCCESS) return ret; if (Ni == GRIB_MISSING_LONG) Ni = N * 4; if (Ni == 0) return ret; - if ((ret = grib_get_long_internal(h, self->di, &diold)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, di_, &diold)) != GRIB_SUCCESS) return ret; lats = (double*)grib_context_malloc(c, sizeof(double) * N * 2); if (!lats) { grib_context_log(c, GRIB_LOG_ERROR, - "Key %s (pack_long): Memory allocation error: %zu bytes", a->name, sizeof(double) * N * 2); + "Key %s (pack_long): Memory allocation error: %zu bytes", name_, sizeof(double) * N * 2); return GRIB_OUT_OF_MEMORY; } if ((ret = grib_get_gaussian_latitudes(N, lats)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, self->plpresent, &plpresent)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, plpresent_, &plpresent)) != GRIB_SUCCESS) return ret; /* GRIB-854: For octahedral grids, get max of pl array */ @@ -201,11 +197,11 @@ int grib_accessor_class_global_gaussian_t::pack_long(grib_accessor* a, const lon long* pl = NULL; /* pl array */ long max_pl = 0; /* max. element of pl array */ - if ((ret = grib_get_size(h, self->pl, &plsize)) != GRIB_SUCCESS) + if ((ret = grib_get_size(h, pl_, &plsize)) != GRIB_SUCCESS) return ret; Assert(plsize); pl = (long*)grib_context_malloc_clear(c, sizeof(long) * plsize); - grib_get_long_array_internal(h, self->pl, pl, &plsize); + grib_get_long_array_internal(h, pl_, pl, &plsize); max_pl = pl[0]; for (i = 1; i < plsize; i++) { @@ -231,20 +227,20 @@ int grib_accessor_class_global_gaussian_t::pack_long(grib_accessor* a, const lon grib_context_free(c, lats); - if ((ret = grib_set_long_internal(h, self->latfirst, latfirst)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, latfirst_, latfirst)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(h, self->lonfirst, lonfirst)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, lonfirst_, lonfirst)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(h, self->latlast, latlast)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, latlast_, latlast)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(h, self->lonlast, lonlast)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, lonlast_, lonlast)) != GRIB_SUCCESS) return ret; if (diold != GRIB_MISSING_LONG) - if ((ret = grib_set_long_internal(h, self->di, di)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(h, di_, di)) != GRIB_SUCCESS) return ret; return GRIB_SUCCESS; diff --git a/src/accessor/grib_accessor_class_global_gaussian.h b/src/accessor/grib_accessor_class_global_gaussian.h index 1d49c0c32..0437eaf98 100644 --- a/src/accessor/grib_accessor_class_global_gaussian.h +++ b/src/accessor/grib_accessor_class_global_gaussian.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,26 +15,23 @@ class grib_accessor_global_gaussian_t : public grib_accessor_long_t { public: - /* Members defined in global_gaussian */ - const char* N; - const char* Ni; - const char* di; - const char* latfirst; - const char* lonfirst; - const char* latlast; - const char* lonlast; - const char* plpresent; - const char* pl; - const char* basic_angle; - const char* subdivision; -}; - -class grib_accessor_class_global_gaussian_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_global_gaussian_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_global_gaussian_t() : + grib_accessor_long_t() { class_name_ = "global_gaussian"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_global_gaussian_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* N_ = nullptr; + const char* Ni_ = nullptr; + const char* di_ = nullptr; + const char* latfirst_ = nullptr; + const char* lonfirst_ = nullptr; + const char* latlast_ = nullptr; + const char* lonlast_ = nullptr; + const char* plpresent_ = nullptr; + const char* pl_ = nullptr; + const char* basic_angle_ = nullptr; + const char* subdivision_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_group.cc b/src/accessor/grib_accessor_class_group.cc index 74051d17d..a39cf0519 100644 --- a/src/accessor/grib_accessor_class_group.cc +++ b/src/accessor/grib_accessor_class_group.cc @@ -10,31 +10,29 @@ #include "grib_accessor_class_group.h" -grib_accessor_class_group_t _grib_accessor_class_group{ "group" }; -grib_accessor_class* grib_accessor_class_group = &_grib_accessor_class_group; +grib_accessor_group_t _grib_accessor_group{}; +grib_accessor* grib_accessor_group = &_grib_accessor_group; - -void grib_accessor_class_group_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_group_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_buffer* buffer = grib_handle_of_accessor(a)->buffer; - grib_accessor_group_t* self = (grib_accessor_group_t*)a; + grib_accessor_gen_t::init(len, arg); + const grib_buffer* buffer = grib_handle_of_accessor(this)->buffer; size_t i = 0; unsigned char* v; - const char* s = grib_arguments_get_string(grib_handle_of_accessor(a), arg, 0); + const char* s = grib_arguments_get_string(grib_handle_of_accessor(this), arg, 0); if (s && strlen(s) > 1) { - grib_context_log(a->context, GRIB_LOG_WARNING, - "Using only first character as group end of %s not the string %s", a->name, s); + grib_context_log(context_, GRIB_LOG_WARNING, + "Using only first character as group end of %s not the string %s", name_, s); } - self->endCharacter = s ? s[0] : 0; + endCharacter_ = s ? s[0] : 0; - v = buffer->data + a->offset; + v = buffer->data + offset_; i = 0; if (s) { - while (*v != self->endCharacter && i <= buffer->ulength) { + while (*v != endCharacter_ && i <= buffer->ulength) { if (*v > 126) *v = 32; v++; @@ -47,60 +45,62 @@ void grib_accessor_class_group_t::init(grib_accessor* a, const long len, grib_ar i++; } } - a->length = i; + length_ = i; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_group_t::value_count(grib_accessor* a, long* count) +int grib_accessor_group_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_group_t::string_length(grib_accessor* a) +size_t grib_accessor_group_t::string_length() { - return a->length; + return length_; } -void grib_accessor_class_group_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_group_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } -int grib_accessor_class_group_t::get_native_type(grib_accessor* a) +long grib_accessor_group_t::get_native_type() { return GRIB_TYPE_STRING; } -int grib_accessor_class_group_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_group_t::unpack_string(char* val, size_t* len) { long i = 0; - size_t l = a->length + 1; - grib_handle* h = grib_handle_of_accessor(a); + size_t l = length_ + 1; + grib_handle* h = grib_handle_of_accessor(this); if (*len < l) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - a->cclass->name, a->name, l, *len); + class_name_, name_, l, *len); *len = l; return GRIB_ARRAY_TOO_SMALL; } - for (i = 0; i < a->length; i++) - val[i] = h->buffer->data[a->offset + i]; + for (i = 0; i < length_; i++) + val[i] = h->buffer->data[offset_ + i]; val[i] = 0; *len = i; return GRIB_SUCCESS; } -int grib_accessor_class_group_t::unpack_long(grib_accessor* a, long* v, size_t* len) +int grib_accessor_group_t::unpack_long(long* v, size_t* len) { - char val[1024] = {0,}; + char val[1024] = { + 0, + }; size_t l = sizeof(val); size_t i = 0; char* last = NULL; - int err = a->unpack_string(val, &l); + int err = unpack_string(val, &l); if (err) return err; @@ -117,29 +117,29 @@ int grib_accessor_class_group_t::unpack_long(grib_accessor* a, long* v, size_t* *v = strtol(val, &last, 10); - grib_context_log(a->context, GRIB_LOG_DEBUG, " Casting string %s to long", a->name); + grib_context_log(context_, GRIB_LOG_DEBUG, " Casting string %s to long", name_); return GRIB_SUCCESS; } -int grib_accessor_class_group_t::unpack_double(grib_accessor* a, double* v, size_t* len) +int grib_accessor_group_t::unpack_double(double* v, size_t* len) { char val[1024]; size_t l = sizeof(val); char* last = NULL; - a->unpack_string(val, &l); + unpack_string(val, &l); *v = strtod(val, &last); if (*last == 0) { - grib_context_log(a->context, GRIB_LOG_DEBUG, " Casting string %s to long", a->name); + grib_context_log(context_, GRIB_LOG_DEBUG, " Casting string %s to long", name_); return GRIB_SUCCESS; } return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_group_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_group_t::compare(grib_accessor* b) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s:%s not implemented", __func__, a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "%s:%s not implemented", __func__, name_); return GRIB_NOT_IMPLEMENTED; // int retval = 0; @@ -149,21 +149,21 @@ int grib_accessor_class_group_t::compare(grib_accessor* a, grib_accessor* b) // size_t alen = 0; // size_t blen = 0; // long count = 0; - // err = a->value_count(&count); // if (err) return err; + // err = value_count(&count); // if (err) return err; // alen = count; // err = b->value_count(&count); // if (err) return err; // blen = count; // if (alen != blen) return GRIB_COUNT_MISMATCH; - // aval = (char*)grib_context_malloc(a->context, alen * sizeof(char)); + // aval = (char*)grib_context_malloc(context , alen * sizeof(char)); // bval = (char*)grib_context_malloc(b->context, blen * sizeof(char)); - // a->unpack_string(aval, &alen); // b->unpack_string(bval, &blen); // retval = GRIB_SUCCESS; + // unpack_string(aval, &alen); // b->unpack_string(bval, &blen); // retval = GRIB_SUCCESS; // if (strcmp(aval, bval)) retval = GRIB_STRING_VALUE_MISMATCH; - // grib_context_free(a->context, aval); + // grib_context_free(context , aval); // grib_context_free(b->context, bval); // return retval; } -long grib_accessor_class_group_t::next_offset(grib_accessor* a) +long grib_accessor_group_t::next_offset() { - return a->offset + a->length; + return offset_ + length_; } diff --git a/src/accessor/grib_accessor_class_group.h b/src/accessor/grib_accessor_class_group.h index 9f1c31a81..a5134073b 100644 --- a/src/accessor/grib_accessor_class_group.h +++ b/src/accessor/grib_accessor_class_group.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,23 +15,20 @@ class grib_accessor_group_t : public grib_accessor_gen_t { public: - /* Members defined in group */ - char endCharacter; -}; - -class grib_accessor_class_group_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_group_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_group_t() : + grib_accessor_gen_t() { class_name_ = "group"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_group_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int compare(grib_accessor*, grib_accessor*) override; + long get_native_type() override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + long next_offset() override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + int compare(grib_accessor*) override; + +private: + char endCharacter_ = 0; }; diff --git a/src/accessor/grib_accessor_class_gts_header.cc b/src/accessor/grib_accessor_class_gts_header.cc index 5b158c6d1..591e6e783 100644 --- a/src/accessor/grib_accessor_class_gts_header.cc +++ b/src/accessor/grib_accessor_class_gts_header.cc @@ -10,27 +10,24 @@ #include "grib_accessor_class_gts_header.h" -grib_accessor_class_gts_header_t _grib_accessor_class_gts_header{ "gts_header" }; -grib_accessor_class* grib_accessor_class_gts_header = &_grib_accessor_class_gts_header; +grib_accessor_gts_header_t _grib_accessor_gts_header{}; +grib_accessor* grib_accessor_gts_header = &_grib_accessor_gts_header; - -void grib_accessor_class_gts_header_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_gts_header_t::init(const long l, grib_arguments* c) { - grib_accessor_class_ascii_t::init(a, l, c); - grib_accessor_gts_header_t* self = (grib_accessor_gts_header_t*)a; - self->gts_offset = -1; - self->gts_length = -1; - self->gts_offset = grib_arguments_get_long(grib_handle_of_accessor(a), c, 0); - self->gts_length = grib_arguments_get_long(grib_handle_of_accessor(a), c, 1); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_ascii_t::init(l, c); + gts_offset_ = -1; + gts_length_ = -1; + gts_offset_ = grib_arguments_get_long(grib_handle_of_accessor(this), c, 0); + gts_length_ = grib_arguments_get_long(grib_handle_of_accessor(this), c, 1); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_gts_header_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_gts_header_t::unpack_string(char* val, size_t* len) { - grib_accessor_gts_header_t* self = (grib_accessor_gts_header_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int offset = 0; - size_t length = 0; + grib_handle* h = grib_handle_of_accessor(this); + int offset = 0; + size_t length = 0; if (h->gts_header == NULL || h->gts_header_len < 8) { if (*len < 8) @@ -41,8 +38,8 @@ int grib_accessor_class_gts_header_t::unpack_string(grib_accessor* a, char* val, if (*len < h->gts_header_len) return GRIB_BUFFER_TOO_SMALL; - offset = self->gts_offset > 0 ? self->gts_offset : 0; - length = self->gts_length > 0 ? self->gts_length : h->gts_header_len; + offset = gts_offset_ > 0 ? gts_offset_ : 0; + length = gts_length_ > 0 ? gts_length_ : h->gts_header_len; memcpy(val, h->gts_header + offset, length); @@ -51,14 +48,14 @@ int grib_accessor_class_gts_header_t::unpack_string(grib_accessor* a, char* val, return GRIB_SUCCESS; } -int grib_accessor_class_gts_header_t::value_count(grib_accessor* a, long* count) +int grib_accessor_gts_header_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_gts_header_t::string_length(grib_accessor* a) +size_t grib_accessor_gts_header_t::string_length() { - grib_handle* h = grib_handle_of_accessor(a); + const grib_handle* h = grib_handle_of_accessor(this); return h->gts_header_len; } diff --git a/src/accessor/grib_accessor_class_gts_header.h b/src/accessor/grib_accessor_class_gts_header.h index 8072986a7..4865a0262 100644 --- a/src/accessor/grib_accessor_class_gts_header.h +++ b/src/accessor/grib_accessor_class_gts_header.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,18 +15,15 @@ class grib_accessor_gts_header_t : public grib_accessor_ascii_t { public: - /* Members defined in gts_header */ - int gts_offset; - int gts_length; -}; - -class grib_accessor_class_gts_header_t : public grib_accessor_class_ascii_t -{ -public: - grib_accessor_class_gts_header_t(const char* name) : grib_accessor_class_ascii_t(name) {} + grib_accessor_gts_header_t() : + grib_accessor_ascii_t() { class_name_ = "gts_header"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_gts_header_t{}; } - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + int gts_offset_ = 0; + int gts_length_ = 0; }; diff --git a/src/accessor/grib_accessor_class_hash_array.cc b/src/accessor/grib_accessor_class_hash_array.cc index 7f29ce9bc..b82d0cf79 100644 --- a/src/accessor/grib_accessor_class_hash_array.cc +++ b/src/accessor/grib_accessor_class_hash_array.cc @@ -10,73 +10,69 @@ #include "grib_accessor_class_hash_array.h" -grib_accessor_class_hash_array_t _grib_accessor_class_hash_array{ "hash_array" }; -grib_accessor_class* grib_accessor_class_hash_array = &_grib_accessor_class_hash_array; - +grib_accessor_hash_array_t _grib_accessor_hash_array{}; +grib_accessor* grib_accessor_hash_array = &_grib_accessor_hash_array; #define MAX_HASH_ARRAY_STRING_LENGTH 255 -void grib_accessor_class_hash_array_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_hash_array_t::init(const long len, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, len, args); - grib_accessor_hash_array_t* self = (grib_accessor_hash_array_t*)a; - a->length = 0; - self->key = 0; - self->ha = NULL; + grib_accessor_gen_t::init(len, args); + length_ = 0; + key_ = 0; + ha_ = NULL; } -void grib_accessor_class_hash_array_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_hash_array_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } -int grib_accessor_class_hash_array_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_hash_array_t::pack_double(const double* val, size_t* len) { - grib_accessor_hash_array_t* self = (grib_accessor_hash_array_t*)a; - - char s[200] = {0,}; + char s[200] = { + 0, + }; snprintf(s, sizeof(s), "%g", *val); - self->key = grib_context_strdup(a->context, s); - self->ha = 0; + key_ = grib_context_strdup(context_, s); + ha_ = 0; return GRIB_SUCCESS; } -int grib_accessor_class_hash_array_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_hash_array_t::pack_long(const long* val, size_t* len) { - grib_accessor_hash_array_t* self = (grib_accessor_hash_array_t*)a; - - char s[200] = {0,}; + char s[200] = { + 0, + }; snprintf(s, sizeof(s), "%ld", *val); - if (self->key) - grib_context_free(a->context, self->key); - self->key = grib_context_strdup(a->context, s); - self->ha = 0; + if (key_) + grib_context_free(context_, key_); + key_ = grib_context_strdup(context_, s); + ha_ = 0; return GRIB_SUCCESS; } -int grib_accessor_class_hash_array_t::pack_string(grib_accessor* a, const char* v, size_t* len) +int grib_accessor_hash_array_t::pack_string(const char* v, size_t* len) { - grib_accessor_hash_array_t* self = (grib_accessor_hash_array_t*)a; - self->key = grib_context_strdup(a->context, v); - self->ha = 0; + key_ = grib_context_strdup(context_, v); + ha_ = 0; return GRIB_SUCCESS; } -int grib_accessor_class_hash_array_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_hash_array_t::unpack_double(double* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -static grib_hash_array_value* find_hash_value(grib_accessor* a, int* err) +grib_hash_array_value* grib_accessor_hash_array_t::find_hash_value(int* err) { - grib_accessor_hash_array_t* self = (grib_accessor_hash_array_t*)a; grib_hash_array_value* ha_ret = 0; grib_hash_array_value* ha = NULL; - ha = get_hash_array(grib_handle_of_accessor(a), a->creator); + ha = get_hash_array(grib_handle_of_accessor(this), creator_); if (!ha) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "unable to get hash value for %s", a->creator->name); + grib_context_log(context_, GRIB_LOG_ERROR, + "unable to get hash value for %s", creator_->name); *err = GRIB_HASH_ARRAY_NO_MATCH; return NULL; } @@ -84,54 +80,53 @@ static grib_hash_array_value* find_hash_value(grib_accessor* a, int* err) *err = GRIB_SUCCESS; Assert(ha != NULL); - if (!self->key) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "unable to get hash value for %s, set before getting", a->creator->name); + if (!key_) { + grib_context_log(context_, GRIB_LOG_ERROR, + "unable to get hash value for %s, set before getting", creator_->name); *err = GRIB_HASH_ARRAY_NO_MATCH; return NULL; } - ha_ret = (grib_hash_array_value*)grib_trie_get(ha->index, self->key); + ha_ret = (grib_hash_array_value*)grib_trie_get(ha->index, key_); if (!ha_ret) ha_ret = (grib_hash_array_value*)grib_trie_get(ha->index, "default"); if (!ha_ret) { *err = GRIB_HASH_ARRAY_NO_MATCH; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "hash_array: no match for %s=%s", - a->creator->name, self->key); - const char* full_path = get_hash_array_full_path(a->creator); + creator_->name, key_); + const char* full_path = get_hash_array_full_path(creator_); if (full_path) { - grib_context_log(a->context, GRIB_LOG_ERROR, "hash_array: file path = %s", full_path); + grib_context_log(context_, GRIB_LOG_ERROR, "hash_array: file path = %s", full_path); } - grib_context_log(a->context, GRIB_LOG_ERROR, "Hint: Check the key 'masterTablesVersionNumber'"); + grib_context_log(context_, GRIB_LOG_ERROR, "Hint: Check the key 'masterTablesVersionNumber'"); return NULL; } return ha_ret; } -int grib_accessor_class_hash_array_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_hash_array_t::unpack_long(long* val, size_t* len) { - grib_hash_array_value* ha = 0; - grib_accessor_hash_array_t* self = (grib_accessor_hash_array_t*)a; - int err = 0; - size_t i = 0; + grib_hash_array_value* ha = 0; + int err = 0; + size_t i = 0; - if (!self->ha) { - ha = find_hash_value(a, &err); + if (!ha_) { + ha = find_hash_value(&err); if (err) return err; - self->ha = ha; + ha_ = ha; } - switch (self->ha->type) { + switch (ha_->type) { case GRIB_HASH_ARRAY_TYPE_INTEGER: - if (*len < self->ha->iarray->n) { + if (*len < ha_->iarray->n) { return GRIB_ARRAY_TOO_SMALL; } - *len = self->ha->iarray->n; + *len = ha_->iarray->n; for (i = 0; i < *len; i++) - val[i] = self->ha->iarray->v[i]; + val[i] = ha_->iarray->v[i]; break; default: @@ -141,51 +136,49 @@ int grib_accessor_class_hash_array_t::unpack_long(grib_accessor* a, long* val, s return GRIB_SUCCESS; } -int grib_accessor_class_hash_array_t::get_native_type(grib_accessor* a) +long grib_accessor_hash_array_t::get_native_type() { int type = GRIB_TYPE_STRING; - if (a->flags & GRIB_ACCESSOR_FLAG_LONG_TYPE) + if (flags_ & GRIB_ACCESSOR_FLAG_LONG_TYPE) type = GRIB_TYPE_LONG; return type; } -void grib_accessor_class_hash_array_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_hash_array_t::destroy(grib_context* c) { - grib_accessor_hash_array_t* self = (grib_accessor_hash_array_t*)a; - if (self->key) - grib_context_free(c, self->key); - grib_accessor_class_gen_t::destroy(c, a); + if (key_) + grib_context_free(c, key_); + grib_accessor_gen_t::destroy(c); } -int grib_accessor_class_hash_array_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_hash_array_t::unpack_string(char* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -size_t grib_accessor_class_hash_array_t::string_length(grib_accessor* a) +size_t grib_accessor_hash_array_t::string_length() { return MAX_HASH_ARRAY_STRING_LENGTH; } -int grib_accessor_class_hash_array_t::value_count(grib_accessor* a, long* count) +int grib_accessor_hash_array_t::value_count(long* count) { - int err = 0; - grib_accessor_hash_array_t* self = (grib_accessor_hash_array_t*)a; - grib_hash_array_value* ha = 0; + int err = 0; + grib_hash_array_value* ha = 0; - if (!self->ha) { - ha = find_hash_value(a, &err); + if (!ha_) { + ha = find_hash_value(&err); if (err) return err; - self->ha = ha; + ha_ = ha; } - *count = self->ha->iarray->n; + *count = ha_->iarray->n; return err; } -int grib_accessor_class_hash_array_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_hash_array_t::compare(grib_accessor* b) { return GRIB_NOT_IMPLEMENTED; } diff --git a/src/accessor/grib_accessor_class_hash_array.h b/src/accessor/grib_accessor_class_hash_array.h index fa2732cac..dd872e130 100644 --- a/src/accessor/grib_accessor_class_hash_array.h +++ b/src/accessor/grib_accessor_class_hash_array.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,27 +15,26 @@ class grib_accessor_hash_array_t : public grib_accessor_gen_t { public: - /* Members defined in hash_array */ - char* key; - grib_hash_array_value* ha; -}; - -class grib_accessor_class_hash_array_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_hash_array_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_hash_array_t() : + grib_accessor_gen_t() { class_name_ = "hash_array"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_hash_array_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int compare(grib_accessor*, grib_accessor*) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + int compare(grib_accessor*) override; + +private: + char* key_ = nullptr; + grib_hash_array_value* ha_ = nullptr; + + grib_hash_array_value* find_hash_value(int* err); }; diff --git a/src/accessor/grib_accessor_class_headers_only.cc b/src/accessor/grib_accessor_class_headers_only.cc index 4b70ecd2f..7d747bf91 100644 --- a/src/accessor/grib_accessor_class_headers_only.cc +++ b/src/accessor/grib_accessor_class_headers_only.cc @@ -10,26 +10,25 @@ #include "grib_accessor_class_headers_only.h" -grib_accessor_class_headers_only_t _grib_accessor_class_headers_only{ "headers_only" }; -grib_accessor_class* grib_accessor_class_headers_only = &_grib_accessor_class_headers_only; +grib_accessor_headers_only_t _grib_accessor_headers_only{}; +grib_accessor* grib_accessor_headers_only = &_grib_accessor_headers_only; - -void grib_accessor_class_headers_only_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_headers_only_t::init(const long l, grib_arguments* c) { - grib_accessor_class_gen_t::init(a, l, c); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; - a->length = 0; + grib_accessor_gen_t::init(l, c); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_HIDDEN; + length_ = 0; } -int grib_accessor_class_headers_only_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_headers_only_t::unpack_long(long* val, size_t* len) { - *val = grib_handle_of_accessor(a)->partial; + *val = grib_handle_of_accessor(this)->partial; *len = 1; return 0; } -int grib_accessor_class_headers_only_t::get_native_type(grib_accessor* a) +long grib_accessor_headers_only_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_headers_only.h b/src/accessor/grib_accessor_class_headers_only.h index a7dc81891..e0637317d 100644 --- a/src/accessor/grib_accessor_class_headers_only.h +++ b/src/accessor/grib_accessor_class_headers_only.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,15 +15,10 @@ class grib_accessor_headers_only_t : public grib_accessor_gen_t { public: - /* Members defined in headers_only */ -}; - -class grib_accessor_class_headers_only_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_headers_only_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_headers_only_t() : + grib_accessor_gen_t() { class_name_ = "headers_only"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_headers_only_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_ibmfloat.cc b/src/accessor/grib_accessor_class_ibmfloat.cc index c5766db01..e0d087f3c 100644 --- a/src/accessor/grib_accessor_class_ibmfloat.cc +++ b/src/accessor/grib_accessor_class_ibmfloat.cc @@ -11,23 +11,20 @@ #include "grib_accessor_class_ibmfloat.h" -grib_accessor_class_ibmfloat_t _grib_accessor_class_ibmfloat{ "ibmfloat" }; -grib_accessor_class* grib_accessor_class_ibmfloat = &_grib_accessor_class_ibmfloat; +grib_accessor_ibmfloat_t _grib_accessor_ibmfloat{}; +grib_accessor* grib_accessor_ibmfloat = &_grib_accessor_ibmfloat; - -void grib_accessor_class_ibmfloat_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_ibmfloat_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_double_t::init(a, len, arg); - grib_accessor_ibmfloat_t* self = (grib_accessor_ibmfloat_t*)a; - long count = 0; + grib_accessor_double_t::init(len, arg); + long count = 0; - self->arg = arg; - a->value_count(&count); - a->length = 4 * count; - Assert(a->length >= 0); + arg_ = arg; + value_count(&count); + length_ = 4 * count; + Assert(length_ >= 0); } - template static int unpack(grib_accessor* a, T* val, size_t* len) { @@ -36,7 +33,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len) long count = 0; int err = 0; unsigned long i = 0; - long bitp = a->offset * 8; + long bitp = a->offset_ * 8; grib_handle* hand = grib_handle_of_accessor(a); err = a->value_count(&count); @@ -45,7 +42,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len) rlen = count; if (*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size (%zu) for %s, it contains %lu values", *len, a->name, rlen); + grib_context_log(a->context_, GRIB_LOG_ERROR, "Wrong size (%zu) for %s, it contains %lu values", *len, a->name_, rlen); *len = 0; return GRIB_ARRAY_TOO_SMALL; } @@ -57,20 +54,18 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return GRIB_SUCCESS; } -int grib_accessor_class_ibmfloat_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_ibmfloat_t::unpack_double(double* val, size_t* len) { - return unpack(a, val, len); + return unpack(this, val, len); } -int grib_accessor_class_ibmfloat_t::unpack_float(grib_accessor* a, float* val, size_t* len) +int grib_accessor_ibmfloat_t::unpack_float(float* val, size_t* len) { - return unpack(a, val, len); + return unpack(this, val, len); } -int grib_accessor_class_ibmfloat_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_ibmfloat_t::pack_double(const double* val, size_t* len) { - grib_accessor_ibmfloat_t* self = (grib_accessor_ibmfloat_t*)a; - int ret = 0; unsigned long i = 0; unsigned long rlen = *len; @@ -79,7 +74,7 @@ int grib_accessor_class_ibmfloat_t::pack_double(grib_accessor* a, const double* long off = 0; if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it packs at least 1 value", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s, it packs at least 1 value", name_); *len = 0; return GRIB_ARRAY_TOO_SMALL; } @@ -90,11 +85,11 @@ int grib_accessor_class_ibmfloat_t::pack_double(grib_accessor* a, const double* // double y = grib_long_to_ibm(grib_ibm_to_long(val[0])); // printf("IBMFLOAT val=%.20f nearest_smaller_ibm_float=%.20f long_to_ibm=%.20f\n",val[0],x ,y); - off = a->byte_offset() * 8; - ret = grib_encode_unsigned_long(grib_handle_of_accessor(a)->buffer->data, grib_ibm_to_long(val[0]), &off, 32); + off = byte_offset() * 8; + ret = grib_encode_unsigned_long(grib_handle_of_accessor(this)->buffer->data, grib_ibm_to_long(val[0]), &off, 32); if (*len > 1) - grib_context_log(a->context, GRIB_LOG_WARNING, "ibmfloat: Trying to pack %zu values in a scalar %s, packing first value", - *len, a->name); + grib_context_log(context_, GRIB_LOG_WARNING, "ibmfloat: Trying to pack %zu values in a scalar %s, packing first value", + *len, name_); if (ret == GRIB_SUCCESS) len[0] = 1; return ret; @@ -102,63 +97,62 @@ int grib_accessor_class_ibmfloat_t::pack_double(grib_accessor* a, const double* buflen = rlen * 4; - buf = (unsigned char*)grib_context_malloc(a->context, buflen); + buf = (unsigned char*)grib_context_malloc(context_, buflen); for (i = 0; i < rlen; i++) { grib_encode_unsigned_longb(buf, grib_ibm_to_long(val[i]), &off, 32); } - ret = grib_set_long_internal(grib_handle_of_accessor(a), grib_arguments_get_name(a->parent->h, self->arg, 0), rlen); + ret = grib_set_long_internal(grib_handle_of_accessor(this), grib_arguments_get_name(parent_->h, arg_, 0), rlen); if (ret == GRIB_SUCCESS) - grib_buffer_replace(a, buf, buflen, 1, 1); + grib_buffer_replace(this, buf, buflen, 1, 1); else *len = 0; - grib_context_free(a->context, buf); + grib_context_free(context_, buf); - a->length = a->byte_count(); + length_ = byte_count(); return ret; } -long grib_accessor_class_ibmfloat_t::byte_count(grib_accessor* a) +long grib_accessor_ibmfloat_t::byte_count() { - return a->length; + return length_; } -int grib_accessor_class_ibmfloat_t::value_count(grib_accessor* a, long* len) +int grib_accessor_ibmfloat_t::value_count(long* len) { - grib_accessor_ibmfloat_t* self = (grib_accessor_ibmfloat_t*)a; *len = 0; - if (!self->arg) { + if (!arg_) { *len = 1; return 0; } - return grib_get_long_internal(grib_handle_of_accessor(a), grib_arguments_get_name(a->parent->h, self->arg, 0), len); + return grib_get_long_internal(grib_handle_of_accessor(this), grib_arguments_get_name(parent_->h, arg_, 0), len); } -long grib_accessor_class_ibmfloat_t::byte_offset(grib_accessor* a) +long grib_accessor_ibmfloat_t::byte_offset() { - return a->offset; + return offset_; } -void grib_accessor_class_ibmfloat_t::update_size(grib_accessor* a, size_t s) +void grib_accessor_ibmfloat_t::update_size(size_t s) { - a->length = (long)s; - Assert(a->length >= 0); + length_ = (long)s; + Assert(length_ >= 0); } -long grib_accessor_class_ibmfloat_t::next_offset(grib_accessor* a) +long grib_accessor_ibmfloat_t::next_offset() { - return a->byte_offset() + a->byte_count(); + return byte_offset() + byte_count(); } -int grib_accessor_class_ibmfloat_t::nearest_smaller_value(grib_accessor* a, double val, double* nearest) +int grib_accessor_ibmfloat_t::nearest_smaller_value(double val, double* nearest) { int ret = 0; if (grib_nearest_smaller_ibm_float(val, nearest) == GRIB_INTERNAL_ERROR) { - grib_context_log(a->context, GRIB_LOG_ERROR, "ibm_float:nearest_smaller_value overflow value=%g", val); - grib_dump_content(grib_handle_of_accessor(a), stderr, "wmo", GRIB_DUMP_FLAG_HEXADECIMAL, 0); + grib_context_log(context_, GRIB_LOG_ERROR, "ibm_float:nearest_smaller_value overflow value=%g", val); + grib_dump_content(grib_handle_of_accessor(this), stderr, "wmo", GRIB_DUMP_FLAG_HEXADECIMAL, 0); ret = GRIB_INTERNAL_ERROR; } return ret; diff --git a/src/accessor/grib_accessor_class_ibmfloat.h b/src/accessor/grib_accessor_class_ibmfloat.h index 66bd01132..3479f7f6c 100644 --- a/src/accessor/grib_accessor_class_ibmfloat.h +++ b/src/accessor/grib_accessor_class_ibmfloat.h @@ -15,23 +15,20 @@ class grib_accessor_ibmfloat_t : public grib_accessor_double_t { public: - /* Members defined in ibmfloat */ - grib_arguments* arg; -}; - -class grib_accessor_class_ibmfloat_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_ibmfloat_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_ibmfloat_t() : + grib_accessor_double_t() { class_name_ = "ibmfloat"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_ibmfloat_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - long byte_count(grib_accessor*) override; - long byte_offset(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; - int nearest_smaller_value(grib_accessor*, double, double*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + long byte_count() override; + long byte_offset() override; + long next_offset() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + int nearest_smaller_value(double, double*) override; + +private: + grib_arguments* arg_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_ieeefloat.cc b/src/accessor/grib_accessor_class_ieeefloat.cc index 64b08fe50..dc242b72a 100644 --- a/src/accessor/grib_accessor_class_ieeefloat.cc +++ b/src/accessor/grib_accessor_class_ieeefloat.cc @@ -11,37 +11,32 @@ #include "grib_accessor_class_ieeefloat.h" -grib_accessor_class_ieeefloat_t _grib_accessor_class_ieeefloat{ "ieeefloat" }; -grib_accessor_class* grib_accessor_class_ieeefloat = &_grib_accessor_class_ieeefloat; +grib_accessor_ieeefloat_t _grib_accessor_ieeefloat{}; +grib_accessor* grib_accessor_ieeefloat = &_grib_accessor_ieeefloat; - -void grib_accessor_class_ieeefloat_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_ieeefloat_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_double_t::init(a, len, arg); - grib_accessor_ieeefloat_t* self = (grib_accessor_ieeefloat_t*)a; + grib_accessor_double_t::init(len, arg); long count = 0; - self->arg = arg; - a->value_count(&count); - a->length = 4 * count; - Assert(a->length >= 0); + arg_ = arg; + value_count(&count); + length_ = 4 * count; + Assert(length_ >= 0); } -int grib_accessor_class_ieeefloat_t::value_count(grib_accessor* a, long* len) +int grib_accessor_ieeefloat_t::value_count(long* len) { - grib_accessor_ieeefloat_t* self = (grib_accessor_ieeefloat_t*)a; *len = 0; - if (!self->arg) { + if (!arg_) { *len = 1; return 0; } - return grib_get_long_internal(grib_handle_of_accessor(a), grib_arguments_get_name(a->parent->h, self->arg, 0), len); + return grib_get_long_internal(grib_handle_of_accessor(this), grib_arguments_get_name(parent_->h, arg_, 0), len); } -int grib_accessor_class_ieeefloat_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_ieeefloat_t::pack_double(const double* val, size_t* len) { - grib_accessor_ieeefloat_t* self = (grib_accessor_ieeefloat_t*)a; - int ret = 0; unsigned long i = 0; unsigned long rlen = (unsigned long)*len; @@ -50,17 +45,17 @@ int grib_accessor_class_ieeefloat_t::pack_double(grib_accessor* a, const double* long off = 0; if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it packs at least 1 value", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s, it packs at least 1 value", name_); *len = 0; return GRIB_ARRAY_TOO_SMALL; } if (rlen == 1) { - off = a->offset * 8; - ret = grib_encode_unsigned_long(grib_handle_of_accessor(a)->buffer->data, grib_ieee_to_long(val[0]), &off, 32); + off = offset_ * 8; + ret = grib_encode_unsigned_long(grib_handle_of_accessor(this)->buffer->data, grib_ieee_to_long(val[0]), &off, 32); if (*len > 1) - grib_context_log(a->context, GRIB_LOG_WARNING, "ieeefloat: Trying to pack %zu values in a scalar %s, packing first value", - *len, a->name); + grib_context_log(context_, GRIB_LOG_WARNING, "ieeefloat: Trying to pack %zu values in a scalar %s, packing first value", + *len, name_); if (ret == GRIB_SUCCESS) len[0] = 1; return ret; @@ -68,24 +63,23 @@ int grib_accessor_class_ieeefloat_t::pack_double(grib_accessor* a, const double* buflen = rlen * 4; - buf = (unsigned char*)grib_context_malloc(a->context, buflen); + buf = (unsigned char*)grib_context_malloc(context_, buflen); for (i = 0; i < rlen; i++) { grib_encode_unsigned_longb(buf, grib_ieee_to_long(val[i]), &off, 32); } - ret = grib_set_long_internal(grib_handle_of_accessor(a), grib_arguments_get_name(a->parent->h, self->arg, 0), rlen); + ret = grib_set_long_internal(grib_handle_of_accessor(this), grib_arguments_get_name(parent_->h, arg_, 0), rlen); if (ret == GRIB_SUCCESS) - grib_buffer_replace(a, buf, buflen, 1, 1); + grib_buffer_replace(this, buf, buflen, 1, 1); else *len = 0; - grib_context_free(a->context, buf); + grib_context_free(context_, buf); return ret; } - template static int unpack(grib_accessor* a, T* val, size_t* len) { @@ -94,7 +88,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len) long rlen = 0; int err = 0; long i = 0; - long bitp = a->offset * 8; + long bitp = a->offset_ * 8; grib_handle* hand = grib_handle_of_accessor(a); err = a->value_count(&rlen); @@ -102,7 +96,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return err; if (*len < (size_t)rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size (%zu) for %s, it contains %ld values", *len, a->name, rlen); + grib_context_log(a->context_, GRIB_LOG_ERROR, "Wrong size (%zu) for %s, it contains %ld values", *len, a->name_, rlen); *len = 0; return GRIB_ARRAY_TOO_SMALL; } @@ -114,23 +108,23 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return GRIB_SUCCESS; } -int grib_accessor_class_ieeefloat_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_ieeefloat_t::unpack_double(double* val, size_t* len) { - return unpack(a, val, len); + return unpack(this, val, len); } -int grib_accessor_class_ieeefloat_t::unpack_float(grib_accessor* a, float* val, size_t* len) +int grib_accessor_ieeefloat_t::unpack_float(float* val, size_t* len) { - return unpack(a, val, len); + return unpack(this, val, len); } -void grib_accessor_class_ieeefloat_t::update_size(grib_accessor* a, size_t s) +void grib_accessor_ieeefloat_t::update_size(size_t s) { - a->length = (long)s; - Assert(a->length >= 0); + length_ = (long)s; + Assert(length_ >= 0); } -int grib_accessor_class_ieeefloat_t::nearest_smaller_value(grib_accessor* a, double val, double* nearest) +int grib_accessor_ieeefloat_t::nearest_smaller_value(double val, double* nearest) { return grib_nearest_smaller_ieee_float(val, nearest); } diff --git a/src/accessor/grib_accessor_class_ieeefloat.h b/src/accessor/grib_accessor_class_ieeefloat.h index 27536169f..09f394be3 100644 --- a/src/accessor/grib_accessor_class_ieeefloat.h +++ b/src/accessor/grib_accessor_class_ieeefloat.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,17 @@ class grib_accessor_ieeefloat_t : public grib_accessor_double_t { public: - grib_arguments* arg; -}; - -class grib_accessor_class_ieeefloat_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_ieeefloat_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_ieeefloat_t() : + grib_accessor_double_t() { class_name_ = "ieeefloat"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_ieeefloat_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; - int nearest_smaller_value(grib_accessor* a, double val, double* nearest) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + int nearest_smaller_value(double val, double* nearest) override; + +private: + grib_arguments* arg_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_ifs_param.cc b/src/accessor/grib_accessor_class_ifs_param.cc index 02d6342ef..a1ba7aef3 100644 --- a/src/accessor/grib_accessor_class_ifs_param.cc +++ b/src/accessor/grib_accessor_class_ifs_param.cc @@ -10,27 +10,24 @@ #include "grib_accessor_class_ifs_param.h" -grib_accessor_class_ifs_param_t _grib_accessor_class_ifs_param{ "ifs_param" }; -grib_accessor_class* grib_accessor_class_ifs_param = &_grib_accessor_class_ifs_param; +grib_accessor_ifs_param_t _grib_accessor_ifs_param{}; +grib_accessor* grib_accessor_ifs_param = &_grib_accessor_ifs_param; - -void grib_accessor_class_ifs_param_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_ifs_param_t::init(const long l, grib_arguments* c) { - grib_accessor_class_gen_t::init(a, l, c); - grib_accessor_ifs_param_t* self = (grib_accessor_ifs_param_t*)a; - int n = 0; + grib_accessor_gen_t::init(l, c); + int n = 0; - self->paramId = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->type = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + paramId_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + type_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); } -int grib_accessor_class_ifs_param_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_ifs_param_t::unpack_long(long* val, size_t* len) { - grib_accessor_ifs_param_t* self = (grib_accessor_ifs_param_t*)a; - int ret = 0; - long paramId = 0; + int ret = 0; + long paramId = 0; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->paramId, ¶mId)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), paramId_, ¶mId)) != GRIB_SUCCESS) return ret; if (paramId > 129000 && paramId < 129999) @@ -45,15 +42,14 @@ int grib_accessor_class_ifs_param_t::unpack_long(grib_accessor* a, long* val, si return ret; } -int grib_accessor_class_ifs_param_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_ifs_param_t::pack_long(const long* val, size_t* len) { - grib_accessor_ifs_param_t* self = (grib_accessor_ifs_param_t*)a; - long type = 0; - long table = 128; - long paramId = *val; + long type = 0; + long table = 128; + long paramId = *val; long param; - grib_get_long(grib_handle_of_accessor(a), self->type, &type); + grib_get_long(grib_handle_of_accessor(this), type_, &type); if (type == 33 || type == 35) { if (paramId > 1000) { @@ -87,10 +83,10 @@ int grib_accessor_class_ifs_param_t::pack_long(grib_accessor* a, const long* val } } - return grib_set_long_internal(grib_handle_of_accessor(a), self->paramId, paramId); + return grib_set_long_internal(grib_handle_of_accessor(this), paramId_, paramId); } -int grib_accessor_class_ifs_param_t::get_native_type(grib_accessor* a) +long grib_accessor_ifs_param_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_ifs_param.h b/src/accessor/grib_accessor_class_ifs_param.h index 2beb90925..ce69d9b35 100644 --- a/src/accessor/grib_accessor_class_ifs_param.h +++ b/src/accessor/grib_accessor_class_ifs_param.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,18 +15,15 @@ class grib_accessor_ifs_param_t : public grib_accessor_gen_t { public: - /* Members defined in ifs_param */ - const char* paramId; - const char* type; -}; - -class grib_accessor_class_ifs_param_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_ifs_param_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_ifs_param_t() : + grib_accessor_gen_t() { class_name_ = "ifs_param"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_ifs_param_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* paramId_ = nullptr; + const char* type_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_iterator.cc b/src/accessor/grib_accessor_class_iterator.cc index 27c2b4242..308dc7da2 100644 --- a/src/accessor/grib_accessor_class_iterator.cc +++ b/src/accessor/grib_accessor_class_iterator.cc @@ -10,50 +10,17 @@ #include "grib_accessor_class_iterator.h" -grib_accessor_class_iterator_t _grib_accessor_class_iterator{"iterator"}; -grib_accessor_class* grib_accessor_class_iterator = &_grib_accessor_class_iterator; +grib_accessor_iterator_t _grib_accessor_iterator{}; +grib_accessor* grib_accessor_iterator = &_grib_accessor_iterator; -void grib_accessor_class_iterator_t::init(grib_accessor* a, const long l, grib_arguments* args) +void grib_accessor_iterator_t::init(const long l, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, l, args); - grib_accessor_iterator_t* self = (grib_accessor_iterator_t*)a; - self->args = args; + grib_accessor_gen_t::init(l, args); + args_ = args; } -void grib_accessor_class_iterator_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_iterator_t::dump(grib_dumper* dumper) { /* TODO: pass args */ - grib_dump_label(dumper, a, NULL); + grib_dump_label(dumper, this, NULL); } - -#if defined(HAVE_GEOGRAPHY) -grib_iterator* grib_iterator_new(const grib_handle* ch, unsigned long flags, int* error) -{ - grib_handle* h = (grib_handle*)ch; - grib_accessor* a = NULL; - grib_accessor_iterator_t* ita = NULL; - grib_iterator* iter = NULL; - *error = GRIB_NOT_IMPLEMENTED; - a = grib_find_accessor(h, "ITERATOR"); - ita = (grib_accessor_iterator_t*)a; - - if (!a) - return NULL; - - iter = grib_iterator_factory(h, ita->args, flags, error); - - if (iter) - *error = GRIB_SUCCESS; - - return iter; -} -#else -grib_iterator* grib_iterator_new(const grib_handle* ch, unsigned long flags, int* error) -{ - *error = GRIB_FUNCTIONALITY_NOT_ENABLED; - grib_context_log(ch->context, GRIB_LOG_ERROR, - "Geoiterator functionality not enabled. Please rebuild with -DENABLE_GEOGRAPHY=ON"); - - return NULL; -} -#endif diff --git a/src/accessor/grib_accessor_class_iterator.h b/src/accessor/grib_accessor_class_iterator.h index 03fbdf5b6..da0a8d964 100644 --- a/src/accessor/grib_accessor_class_iterator.h +++ b/src/accessor/grib_accessor_class_iterator.h @@ -15,16 +15,13 @@ class grib_accessor_iterator_t : public grib_accessor_gen_t { public: - grib_arguments* args; -}; - -class grib_accessor_class_iterator_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_iterator_t(const char* name) : grib_accessor_class_gen_t(name) {}; + grib_accessor_iterator_t() : + grib_accessor_gen_t() { class_name_ = "iterator"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_iterator_t{}; } - void init(grib_accessor* a, const long l, grib_arguments* args) override; - void dump(grib_accessor* a, grib_dumper* dumper) override; -}; + void init(const long l, grib_arguments* args) override; + void dump(grib_dumper* dumper) override; -//grib_iterator* grib_iterator_new(const grib_handle* ch, unsigned long flags, int* error) +private: + grib_arguments* args_ = nullptr; + friend eccodes::geo_iterator::Iterator* eccodes::geo_iterator::gribIteratorNew(const grib_handle*, unsigned long, int*); +}; diff --git a/src/accessor/grib_accessor_class_julian_date.cc b/src/accessor/grib_accessor_class_julian_date.cc index 945f4e803..4f7e430d2 100644 --- a/src/accessor/grib_accessor_class_julian_date.cc +++ b/src/accessor/grib_accessor_class_julian_date.cc @@ -10,82 +10,79 @@ #include "grib_accessor_class_julian_date.h" -grib_accessor_class_julian_date_t _grib_accessor_class_julian_date{ "julian_date" }; -grib_accessor_class* grib_accessor_class_julian_date = &_grib_accessor_class_julian_date; +grib_accessor_julian_date_t _grib_accessor_julian_date{}; +grib_accessor* grib_accessor_julian_date = &_grib_accessor_julian_date; - -void grib_accessor_class_julian_date_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_julian_date_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_julian_date_t* self = (grib_accessor_julian_date_t*)a; - int n = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_accessor_double_t::init(l, c); + int n = 0; + grib_handle* h = grib_handle_of_accessor(this); - self->year = grib_arguments_get_name(h, c, n++); - self->month = grib_arguments_get_name(h, c, n++); + year_ = grib_arguments_get_name(h, c, n++); + month_ = grib_arguments_get_name(h, c, n++); - self->day = grib_arguments_get_name(h, c, n++); - if (self->day == NULL) { - self->hour = 0; - self->minute = 0; - self->second = 0; - self->ymd = self->year; - self->hms = self->month; - self->year = 0; - self->month = 0; + day_ = grib_arguments_get_name(h, c, n++); + if (day_ == NULL) { + hour_ = 0; + minute_ = 0; + second_ = 0; + ymd_ = year_; + hms_ = month_; + year_ = 0; + month_ = 0; } else { - self->ymd = 0; - self->hms = 0; - self->hour = grib_arguments_get_name(h, c, n++); - self->minute = grib_arguments_get_name(h, c, n++); - self->second = grib_arguments_get_name(h, c, n++); + ymd_ = 0; + hms_ = 0; + hour_ = grib_arguments_get_name(h, c, n++); + minute_ = grib_arguments_get_name(h, c, n++); + second_ = grib_arguments_get_name(h, c, n++); } - self->sep[0] = ' '; - self->sep[1] = 0; - self->sep[2] = 0; - self->sep[3] = 0; - self->sep[4] = 0; + sep_[0] = ' '; + sep_[1] = 0; + sep_[2] = 0; + sep_[3] = 0; + sep_[4] = 0; - a->length = 0; + length_ = 0; } -void grib_accessor_class_julian_date_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_julian_date_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } -int grib_accessor_class_julian_date_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_julian_date_t::unpack_double(double* val, size_t* len) { int ret = 0; long hour, minute, second; long year, month, day, ymd, hms; - grib_handle* h = grib_handle_of_accessor(a); - grib_accessor_julian_date_t* self = (grib_accessor_julian_date_t*)a; + grib_handle* h = grib_handle_of_accessor(this); - if (self->ymd == NULL) { - ret = grib_get_long(h, self->year, &year); + if (ymd_ == NULL) { + ret = grib_get_long(h, year_, &year); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long(h, self->month, &month); + ret = grib_get_long(h, month_, &month); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long(h, self->day, &day); + ret = grib_get_long(h, day_, &day); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long(h, self->hour, &hour); + ret = grib_get_long(h, hour_, &hour); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long(h, self->minute, &minute); + ret = grib_get_long(h, minute_, &minute); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long(h, self->second, &second); + ret = grib_get_long(h, second_, &second); if (ret != GRIB_SUCCESS) return ret; } else { - ret = grib_get_long(h, self->ymd, &ymd); + ret = grib_get_long(h, ymd_, &ymd); if (ret != GRIB_SUCCESS) return ret; year = ymd / 10000; @@ -94,7 +91,7 @@ int grib_accessor_class_julian_date_t::unpack_double(grib_accessor* a, double* v ymd %= 100; day = ymd; - ret = grib_get_long(h, self->hms, &hms); + ret = grib_get_long(h, hms_, &hms); if (ret != GRIB_SUCCESS) return ret; hour = hms / 10000; @@ -109,50 +106,48 @@ int grib_accessor_class_julian_date_t::unpack_double(grib_accessor* a, double* v return ret; } -int grib_accessor_class_julian_date_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_julian_date_t::pack_double(const double* val, size_t* len) { - grib_accessor_julian_date_t* self = (grib_accessor_julian_date_t*)a; - int ret = 0; long hour = 0; long minute = 0; long second = 0; long ymd = 0, hms = 0; long year, month, day; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); ret = grib_julian_to_datetime(*val, &year, &month, &day, &hour, &minute, &second); if (ret != 0) return ret; - if (self->ymd == NULL) { - ret = grib_set_long(h, self->year, year); + if (ymd_ == NULL) { + ret = grib_set_long(h, year_, year); if (ret != 0) return ret; - ret = grib_set_long(h, self->month, month); + ret = grib_set_long(h, month_, month); if (ret != 0) return ret; - ret = grib_set_long(h, self->day, day); + ret = grib_set_long(h, day_, day); if (ret != 0) return ret; - ret = grib_set_long(h, self->hour, hour); + ret = grib_set_long(h, hour_, hour); if (ret != 0) return ret; - ret = grib_set_long(h, self->minute, minute); + ret = grib_set_long(h, minute_, minute); if (ret != 0) return ret; - ret = grib_set_long(h, self->second, second); + ret = grib_set_long(h, second_, second); if (ret != 0) return ret; } else { ymd = year * 10000 + month * 100 + day; - ret = grib_set_long(h, self->ymd, ymd); + ret = grib_set_long(h, ymd_, ymd); if (ret != 0) return ret; hms = hour * 10000 + minute * 100 + second; - ret = grib_set_long(h, self->hms, hms); + ret = grib_set_long(h, hms_, hms); if (ret != 0) return ret; } @@ -160,41 +155,40 @@ int grib_accessor_class_julian_date_t::pack_double(grib_accessor* a, const doubl return ret; } -int grib_accessor_class_julian_date_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_julian_date_t::unpack_string(char* val, size_t* len) { int ret = 0; long hour, minute, second; long year, month, day, ymd, hms; - grib_accessor_julian_date_t* self = (grib_accessor_julian_date_t*)a; - char* sep = self->sep; - grib_handle* h = grib_handle_of_accessor(a); + char* sep = sep_; + grib_handle* h = grib_handle_of_accessor(this); if (*len < 15) return GRIB_BUFFER_TOO_SMALL; - if (self->ymd == NULL) { - ret = grib_get_long(h, self->year, &year); + if (ymd_ == NULL) { + ret = grib_get_long(h, year_, &year); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long(h, self->month, &month); + ret = grib_get_long(h, month_, &month); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long(h, self->day, &day); + ret = grib_get_long(h, day_, &day); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long(h, self->hour, &hour); + ret = grib_get_long(h, hour_, &hour); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long(h, self->minute, &minute); + ret = grib_get_long(h, minute_, &minute); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long(h, self->second, &second); + ret = grib_get_long(h, second_, &second); if (ret != GRIB_SUCCESS) return ret; } else { - ret = grib_get_long(h, self->ymd, &ymd); + ret = grib_get_long(h, ymd_, &ymd); if (ret != GRIB_SUCCESS) return ret; year = ymd / 10000; @@ -203,7 +197,7 @@ int grib_accessor_class_julian_date_t::unpack_string(grib_accessor* a, char* val ymd %= 100; day = ymd; - ret = grib_get_long(h, self->hms, &hms); + ret = grib_get_long(h, hms_, &hms); if (ret != GRIB_SUCCESS) return ret; hour = hms / 10000; @@ -227,14 +221,13 @@ int grib_accessor_class_julian_date_t::unpack_string(grib_accessor* a, char* val return ret; } -int grib_accessor_class_julian_date_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_julian_date_t::pack_string(const char* val, size_t* len) { int ret = 0; long hour, minute, second; long year, month, day, ymd, hms; - grib_accessor_julian_date_t* self = (grib_accessor_julian_date_t*)a; - char* sep = self->sep; - grib_handle* h = grib_handle_of_accessor(a); + char* sep = sep_; + grib_handle* h = grib_handle_of_accessor(this); ret = sscanf(val, "%04ld%c%02ld%c%02ld%c%02ld%c%02ld%c%02ld", &year, &sep[0], &month, &sep[1], &day, &sep[2], &hour, &sep[3], &minute, &sep[4], &second); @@ -264,34 +257,34 @@ int grib_accessor_class_julian_date_t::pack_string(grib_accessor* a, const char* } } - if (self->ymd == NULL) { - ret = grib_set_long(h, self->year, year); + if (ymd_ == NULL) { + ret = grib_set_long(h, year_, year); if (ret != 0) return ret; - ret = grib_set_long(h, self->month, month); + ret = grib_set_long(h, month_, month); if (ret != 0) return ret; - ret = grib_set_long(h, self->day, day); + ret = grib_set_long(h, day_, day); if (ret != 0) return ret; - ret = grib_set_long(h, self->hour, hour); + ret = grib_set_long(h, hour_, hour); if (ret != 0) return ret; - ret = grib_set_long(h, self->minute, minute); + ret = grib_set_long(h, minute_, minute); if (ret != 0) return ret; - ret = grib_set_long(h, self->second, second); + ret = grib_set_long(h, second_, second); if (ret != 0) return ret; } else { ymd = year * 10000 + month * 100 + day; - ret = grib_set_long(h, self->ymd, ymd); + ret = grib_set_long(h, ymd_, ymd); if (ret != 0) return ret; hms = hour * 10000 + minute * 100 + second; - ret = grib_set_long(h, self->hms, hms); + ret = grib_set_long(h, hms_, hms); if (ret != 0) return ret; } @@ -299,45 +292,45 @@ int grib_accessor_class_julian_date_t::pack_string(grib_accessor* a, const char* return ret; } -int grib_accessor_class_julian_date_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_julian_date_t::unpack_long(long* val, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, " Cannot unpack %s as long", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, " Cannot unpack %s as long", name_); return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_julian_date_t::pack_long(grib_accessor* a, const long* v, size_t* len) +int grib_accessor_julian_date_t::pack_long(const long* v, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, " Cannot pack %s as long", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, " Cannot pack %s as long", name_); return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_julian_date_t::pack_expression(grib_accessor* a, grib_expression* e) +int grib_accessor_julian_date_t::pack_expression(grib_expression* e) { size_t len = 1; long lval = 0; double dval = 0; const char* cval = NULL; int ret = 0; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); switch (grib_expression_native_type(hand, e)) { case GRIB_TYPE_LONG: { len = 1; ret = grib_expression_evaluate_long(hand, e, &lval); if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to set %s as long", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to set %s as long", name_); return ret; } /*if (hand->context->debug) - printf("ECCODES DEBUG grib_accessor_class_gen::pack_expression %s %ld\n", a->name,lval);*/ - return a->pack_long(&lval, &len); + printf("ECCODES DEBUG grib_accessor_gen::pack_expression %s %ld\n", name_ ,lval);*/ + return pack_long(&lval, &len); } case GRIB_TYPE_DOUBLE: { len = 1; ret = grib_expression_evaluate_double(hand, e, &dval); /*if (hand->context->debug) - printf("ECCODES DEBUG grib_accessor_class_gen::pack_expression %s %g\n", a->name, dval);*/ - return a->pack_double(&dval, &len); + printf("ECCODES DEBUG grib_accessor_gen::pack_expression %s %g\n", name_ , dval);*/ + return pack_double(&dval, &len); } case GRIB_TYPE_STRING: { @@ -345,13 +338,13 @@ int grib_accessor_class_julian_date_t::pack_expression(grib_accessor* a, grib_ex len = sizeof(tmp); cval = grib_expression_evaluate_string(hand, e, tmp, &len, &ret); if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to set %s as string", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to set %s as string", name_); return ret; } len = strlen(cval); /*if (hand->context->debug) - printf("ECCODES DEBUG grib_accessor_class_gen::pack_expression %s %s\n", a->name, cval);*/ - return a->pack_string(cval, &len); + printf("ECCODES DEBUG grib_accessor_gen::pack_expression %s %s\n", name_ , cval);*/ + return pack_string(cval, &len); } } diff --git a/src/accessor/grib_accessor_class_julian_date.h b/src/accessor/grib_accessor_class_julian_date.h index c52380e10..0859ca9ba 100644 --- a/src/accessor/grib_accessor_class_julian_date.h +++ b/src/accessor/grib_accessor_class_julian_date.h @@ -16,30 +16,27 @@ class grib_accessor_julian_date_t : public grib_accessor_double_t { public: - /* Members defined in julian_date */ - const char *year; - const char *month; - const char *day; - const char *hour; - const char *minute; - const char *second; - const char *ymd; - const char *hms; - char sep[5]; -}; - -class grib_accessor_class_julian_date_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_julian_date_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_julian_date_t() : + grib_accessor_double_t() { class_name_ = "julian_date"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_julian_date_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int pack_expression(grib_accessor*, grib_expression*) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int pack_expression(grib_expression*) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* year_ = nullptr; + const char* month_ = nullptr; + const char* day_ = nullptr; + const char* hour_ = nullptr; + const char* minute_ = nullptr; + const char* second_ = nullptr; + const char* ymd_ = nullptr; + const char* hms_ = nullptr; + char sep_[5]; }; diff --git a/src/accessor/grib_accessor_class_julian_day.cc b/src/accessor/grib_accessor_class_julian_day.cc index a27772e6b..7b22252a0 100644 --- a/src/accessor/grib_accessor_class_julian_day.cc +++ b/src/accessor/grib_accessor_class_julian_day.cc @@ -10,93 +10,89 @@ #include "grib_accessor_class_julian_day.h" -grib_accessor_class_julian_day_t _grib_accessor_class_julian_day{ "julian_day" }; -grib_accessor_class* grib_accessor_class_julian_day = &_grib_accessor_class_julian_day; +grib_accessor_julian_day_t _grib_accessor_julian_day{}; +grib_accessor* grib_accessor_julian_day = &_grib_accessor_julian_day; - -void grib_accessor_class_julian_day_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_julian_day_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_julian_day_t* self = (grib_accessor_julian_day_t*)a; - int n = 0; + grib_accessor_double_t::init(l, c); + int n = 0; + grib_handle* h = grib_handle_of_accessor(this); - self->date = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->hour = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->minute = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->second = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + date_ = grib_arguments_get_name(h, c, n++); + hour_ = grib_arguments_get_name(h, c, n++); + minute_ = grib_arguments_get_name(h, c, n++); + second_ = grib_arguments_get_name(h, c, n++); - a->length = 0; + length_ = 0; } -void grib_accessor_class_julian_day_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_julian_day_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } -int grib_accessor_class_julian_day_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_julian_day_t::pack_long(const long* val, size_t* len) { const double v = *val; - return pack_double(a, &v, len); + return pack_double(&v, len); } -int grib_accessor_class_julian_day_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_julian_day_t::pack_double(const double* val, size_t* len) { - grib_accessor_julian_day_t* self = (grib_accessor_julian_day_t*)a; - - int ret = 0; - long hour = 0; - long minute = 0; - long second = 0; - long date = 0; - long year, month, day; + int ret = GRIB_SUCCESS; + long hour = 0, minute = 0, second = 0; + long year = 0, month = 0, day = 0; + grib_handle* h = grib_handle_of_accessor(this); ret = grib_julian_to_datetime(*val, &year, &month, &day, &hour, &minute, &second); if (ret != 0) return ret; - date = year * 10000 + month * 100 + day; + long date = year * 10000 + month * 100 + day; - ret = grib_set_long_internal(grib_handle_of_accessor(a), self->date, date); + ret = grib_set_long_internal(h, date_, date); if (ret != 0) return ret; - ret = grib_set_long_internal(grib_handle_of_accessor(a), self->hour, hour); + ret = grib_set_long_internal(h, hour_, hour); if (ret != 0) return ret; - ret = grib_set_long_internal(grib_handle_of_accessor(a), self->minute, minute); + ret = grib_set_long_internal(h, minute_, minute); if (ret != 0) return ret; - ret = grib_set_long_internal(grib_handle_of_accessor(a), self->second, second); + ret = grib_set_long_internal(h, second_, second); return ret; } -int grib_accessor_class_julian_day_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_julian_day_t::unpack_long(long* val, size_t* len) { + int ret = 0; double v = 0; - int ret = unpack_double(a, &v, len); + ret = unpack_double(&v, len); *val = (long)v; return ret; } -int grib_accessor_class_julian_day_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_julian_day_t::unpack_double(double* val, size_t* len) { int ret = 0; long date, hour, minute, second; long year, month, day; - grib_accessor_julian_day_t* self = (grib_accessor_julian_day_t*)a; + grib_handle* h = grib_handle_of_accessor(this); - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->date, &date); + ret = grib_get_long_internal(h, date_, &date); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->hour, &hour); + ret = grib_get_long_internal(h, hour_, &hour); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->minute, &minute); + ret = grib_get_long_internal(h, minute_, &minute); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->second, &second); + ret = grib_get_long_internal(h, second_, &second); if (ret != GRIB_SUCCESS) return ret; diff --git a/src/accessor/grib_accessor_class_julian_day.h b/src/accessor/grib_accessor_class_julian_day.h index 5d06753b0..8d88b3184 100644 --- a/src/accessor/grib_accessor_class_julian_day.h +++ b/src/accessor/grib_accessor_class_julian_day.h @@ -16,22 +16,19 @@ class grib_accessor_julian_day_t : public grib_accessor_double_t { public: - /* Members defined in julian_day */ - const char *date; - const char *hour; - const char *minute; - const char *second; -}; - -class grib_accessor_class_julian_day_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_julian_day_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_julian_day_t() : + grib_accessor_double_t() { class_name_ = "julian_day"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_julian_day_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* date_ = nullptr; + const char* hour_ = nullptr; + const char* minute_ = nullptr; + const char* second_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_ksec1expver.cc b/src/accessor/grib_accessor_class_ksec1expver.cc index 98cf2a400..bd981bc07 100644 --- a/src/accessor/grib_accessor_class_ksec1expver.cc +++ b/src/accessor/grib_accessor_class_ksec1expver.cc @@ -10,36 +10,35 @@ #include "grib_accessor_class_ksec1expver.h" -grib_accessor_class_ksec1expver_t _grib_accessor_class_ksec1expver{ "ksec1expver" }; -grib_accessor_class* grib_accessor_class_ksec1expver = &_grib_accessor_class_ksec1expver; +grib_accessor_ksec1expver_t _grib_accessor_ksec1expver{}; +grib_accessor* grib_accessor_ksec1expver = &_grib_accessor_ksec1expver; - -void grib_accessor_class_ksec1expver_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_ksec1expver_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_ascii_t::init(a, len, arg); - a->length = len; - Assert(a->length >= 0); + grib_accessor_ascii_t::init(len, arg); + length_ = len; + Assert(length_ >= 0); } -int grib_accessor_class_ksec1expver_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_ksec1expver_t::unpack_long(long* val, size_t* len) { long value = 0; - long pos = a->offset * 8; + long pos = offset_ * 8; char* intc = NULL; char* pTemp = NULL; char expver[5]; char refexpver[5]; - size_t llen = a->length + 1; - Assert(a->length == 4); + size_t llen = length_ + 1; + Assert(length_ == 4); if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", name_, 1); *len = 0; return GRIB_ARRAY_TOO_SMALL; } - value = grib_decode_unsigned_long(grib_handle_of_accessor(a)->buffer->data, &pos, a->length * 8); + value = grib_decode_unsigned_long(grib_handle_of_accessor(this)->buffer->data, &pos, length_ * 8); - a->unpack_string(refexpver, &llen); + unpack_string(refexpver, &llen); /* test for endian */ intc = (char*)&value; pTemp = intc; @@ -69,30 +68,32 @@ int grib_accessor_class_ksec1expver_t::unpack_long(grib_accessor* a, long* val, return GRIB_SUCCESS; } -int grib_accessor_class_ksec1expver_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_ksec1expver_t::pack_string(const char* val, size_t* len) { int i = 0; if (len[0] != 4) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong length for %s. It has to be 4", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong length for %s. It has to be 4", name_); return GRIB_INVALID_KEY_VALUE; } - if (len[0] > (a->length) + 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "pack_string: Wrong size (%lu) for %s, it contains %ld values", - len[0], a->name, a->length + 1); + if (len[0] > (length_) + 1) { + grib_context_log(context_, GRIB_LOG_ERROR, "pack_string: Wrong size (%lu) for %s, it contains %ld values", + len[0], name_, length_ + 1); len[0] = 0; return GRIB_BUFFER_TOO_SMALL; } - for (i = 0; i < a->length; i++) - grib_handle_of_accessor(a)->buffer->data[a->offset + i] = val[i]; + for (i = 0; i < length_; i++) + grib_handle_of_accessor(this)->buffer->data[offset_ + i] = val[i]; return GRIB_SUCCESS; } -int grib_accessor_class_ksec1expver_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_ksec1expver_t::pack_long(const long* val, size_t* len) { - char sval[5] = {0,}; + char sval[5] = { + 0, + }; size_t slen = 4; snprintf(sval, sizeof(sval), "%04d", (int)(*val)); - return pack_string(a, sval, &slen); + return pack_string(sval, &slen); } diff --git a/src/accessor/grib_accessor_class_ksec1expver.h b/src/accessor/grib_accessor_class_ksec1expver.h index 098a40a14..4105a94fd 100644 --- a/src/accessor/grib_accessor_class_ksec1expver.h +++ b/src/accessor/grib_accessor_class_ksec1expver.h @@ -16,16 +16,11 @@ class grib_accessor_ksec1expver_t : public grib_accessor_ascii_t { public: - /* Members defined in ksec1expver */ -}; - -class grib_accessor_class_ksec1expver_t : public grib_accessor_class_ascii_t -{ -public: - grib_accessor_class_ksec1expver_t(const char* name) : grib_accessor_class_ascii_t(name) {} + grib_accessor_ksec1expver_t() : + grib_accessor_ascii_t() { class_name_ = "ksec1expver"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_ksec1expver_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_label.cc b/src/accessor/grib_accessor_class_label.cc index 58749ea43..01b58141b 100644 --- a/src/accessor/grib_accessor_class_label.cc +++ b/src/accessor/grib_accessor_class_label.cc @@ -10,34 +10,33 @@ #include "grib_accessor_class_label.h" -grib_accessor_class_label_t _grib_accessor_class_label{ "label" }; -grib_accessor_class* grib_accessor_class_label = &_grib_accessor_class_label; +grib_accessor_label_t _grib_accessor_label{}; +grib_accessor* grib_accessor_label = &_grib_accessor_label; - -void grib_accessor_class_label_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_label_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; - a->length = 0; + grib_accessor_gen_t::init(len, arg); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + length_ = 0; } -void grib_accessor_class_label_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_label_t::dump(grib_dumper* dumper) { - grib_dump_label(dumper, a, NULL); + grib_dump_label(dumper, this, NULL); } -int grib_accessor_class_label_t::get_native_type(grib_accessor* a) +long grib_accessor_label_t::get_native_type() { return GRIB_TYPE_LABEL; } -int grib_accessor_class_label_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_label_t::unpack_string(char* val, size_t* len) { - size_t vlen = strlen(a->name); + size_t vlen = strlen(name_); if (vlen > *len) return GRIB_BUFFER_TOO_SMALL; *len = vlen; - strcpy(val, a->name); + strcpy(val, name_); return GRIB_SUCCESS; } diff --git a/src/accessor/grib_accessor_class_label.h b/src/accessor/grib_accessor_class_label.h index 59590e77c..2a0dd21b1 100644 --- a/src/accessor/grib_accessor_class_label.h +++ b/src/accessor/grib_accessor_class_label.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,11 @@ class grib_accessor_label_t : public grib_accessor_gen_t { public: - /* Members defined in label */ -}; - -class grib_accessor_class_label_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_label_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_label_t() : + grib_accessor_gen_t() { class_name_ = "label"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_label_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_string(char*, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_latitudes.cc b/src/accessor/grib_accessor_class_latitudes.cc index d67d9f257..49976c844 100644 --- a/src/accessor/grib_accessor_class_latitudes.cc +++ b/src/accessor/grib_accessor_class_latitudes.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,8 +10,8 @@ #include "grib_accessor_class_latitudes.h" -grib_accessor_class_latitudes_t _grib_accessor_class_latitudes{ "latitudes" }; -grib_accessor_class* grib_accessor_class_latitudes = &_grib_accessor_class_latitudes; +grib_accessor_latitudes_t _grib_accessor_latitudes{}; +grib_accessor* grib_accessor_latitudes = &_grib_accessor_latitudes; static int get_distinct(grib_accessor* a, double** val, long* len); static int compare_doubles(const void* a, const void* b, int ascending) @@ -22,11 +21,11 @@ static int compare_doubles(const void* a, const void* b, int ascending) const double* arg2 = (double*)b; if (ascending) { if (*arg1 < *arg2) - return -1; // Smaller values come before larger ones + return -1; // Smaller values come before larger ones } else { if (*arg1 > *arg2) - return -1; // Larger values come before smaller ones + return -1; // Larger values come before smaller ones } if (*arg1 == *arg2) return 0; @@ -44,58 +43,56 @@ static int compare_doubles_descending(const void* a, const void* b) return compare_doubles(a, b, 0); } -void grib_accessor_class_latitudes_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_latitudes_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_latitudes_t* self = (grib_accessor_latitudes_t*)a; + grib_accessor_double_t::init(l, c); int n = 0; - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->distinct = grib_arguments_get_long(grib_handle_of_accessor(a), c, n++); - self->save = 0; + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + distinct_ = grib_arguments_get_long(grib_handle_of_accessor(this), c, n++); + save_ = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_latitudes_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_latitudes_t::unpack_double(double* val, size_t* len) { - grib_context* c = a->context; - grib_accessor_latitudes_t* self = (grib_accessor_latitudes_t*)a; - int ret = 0; - double* v = val; - double dummyLon = 0; - size_t size = 0; - long count = 0; - grib_iterator* iter = NULL; + grib_context* c = context_; + int ret = 0; + double* v = val; + double dummyLon = 0; + size_t size = 0; + long count = 0; + grib_iterator* iter = NULL; - self->save = 1; - ret = value_count(a, &count); + save_ = 1; + ret = value_count(&count); if (ret) return ret; size = count; if (*len < size) { - // self->lats are computed in value_count so must free - if (self->lats) { - grib_context_free(c, self->lats); - self->lats = NULL; + // lats_ are computed in value_count so must free + if (lats_) { + grib_context_free(c, lats_); + lats_ = NULL; } return GRIB_ARRAY_TOO_SMALL; } - self->save = 0; + save_ = 0; - // self->lats are computed in value_count - if (self->lats) { + // lats_ are computed in value_count + if (lats_) { int i; - *len = self->size; + *len = size_; for (i = 0; i < size; i++) - val[i] = self->lats[i]; - grib_context_free(c, self->lats); - self->lats = NULL; - self->size = 0; + val[i] = lats_[i]; + grib_context_free(c, lats_); + lats_ = NULL; + size_ = 0; return GRIB_SUCCESS; } // ECC-1525 Performance: We do not need the values to be decoded - iter = grib_iterator_new(grib_handle_of_accessor(a), GRIB_GEOITERATOR_NO_VALUES, &ret); + iter = grib_iterator_new(grib_handle_of_accessor(this), GRIB_GEOITERATOR_NO_VALUES, &ret); if (ret != GRIB_SUCCESS) { grib_iterator_delete(iter); grib_context_log(c, GRIB_LOG_ERROR, "latitudes: Unable to create iterator"); @@ -110,18 +107,17 @@ int grib_accessor_class_latitudes_t::unpack_double(grib_accessor* a, double* val return ret; } -int grib_accessor_class_latitudes_t::value_count(grib_accessor* a, long* len) +int grib_accessor_latitudes_t::value_count(long* len) { - grib_accessor_latitudes_t* self = (grib_accessor_latitudes_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - grib_context* c = a->context; - double* val = NULL; + grib_handle* h = grib_handle_of_accessor(this); + grib_context* c = context_; + double* val = NULL; int ret; size_t size; *len = 0; - if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "latitudes: Unable to get size of %s", self->values); + if ((ret = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) { + grib_context_log(h->context, GRIB_LOG_ERROR, "latitudes: Unable to get size of %s", values_); return ret; } *len = size; @@ -133,13 +129,13 @@ int grib_accessor_class_latitudes_t::value_count(grib_accessor* a, long* len) *len = numberOfDataPoints; } - if (self->distinct) { - ret = get_distinct(a, &val, len); + if (distinct_) { + ret = get_distinct(this, &val, len); if (ret != GRIB_SUCCESS) return ret; - if (self->save) { - self->lats = val; - self->size = *len; + if (save_) { + lats_ = val; + size_ = *len; } else { grib_context_free(c, val); @@ -156,11 +152,11 @@ static int get_distinct(grib_accessor* a, double** val, long* len) double* v = NULL; double* v1 = NULL; double dummyLon = 0; - int ret = GRIB_SUCCESS; + int ret = GRIB_SUCCESS; int i; - long jScansPositively = 0; // default: north to south + long jScansPositively = 0; // default: north to south size_t size = *len; - grib_context* c = a->context; + grib_context* c = a->context_; // Performance: We do not need the values to be decoded grib_iterator* iter = grib_iterator_new(grib_handle_of_accessor(a), GRIB_GEOITERATOR_NO_VALUES, &ret); @@ -185,12 +181,12 @@ static int get_distinct(grib_accessor* a, double** val, long* len) return ret; if (jScansPositively) { if (!is_sorted_ascending(v, size)) { - qsort(v, *len, sizeof(double), &compare_doubles_ascending); //South to North + qsort(v, *len, sizeof(double), &compare_doubles_ascending); // South to North } } else { if (!is_sorted_descending(v, size)) { - qsort(v, *len, sizeof(double), &compare_doubles_descending); //North to South + qsort(v, *len, sizeof(double), &compare_doubles_descending); // North to South } } @@ -207,7 +203,7 @@ static int get_distinct(grib_accessor* a, double** val, long* len) for (i = 1; i < *len; i++) { if (v[i] != prev) { prev = v[i]; - v1[count] = prev; // Value different from previous so store it + v1[count] = prev; // Value different from previous so store it count++; } } diff --git a/src/accessor/grib_accessor_class_latitudes.h b/src/accessor/grib_accessor_class_latitudes.h index cb1f6ada8..ed2297a7c 100644 --- a/src/accessor/grib_accessor_class_latitudes.h +++ b/src/accessor/grib_accessor_class_latitudes.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,20 +15,17 @@ class grib_accessor_latitudes_t : public grib_accessor_double_t { public: - /* Members defined in latitudes */ - const char* values; - long distinct; - double* lats; - long size; - int save; -}; - -class grib_accessor_class_latitudes_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_latitudes_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_latitudes_t() : + grib_accessor_double_t() { class_name_ = "latitudes"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_latitudes_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; + long distinct_ = 0; + double* lats_ = nullptr; + long size_ = 0; + int save_ = 0; }; diff --git a/src/accessor/grib_accessor_class_latlon_increment.cc b/src/accessor/grib_accessor_class_latlon_increment.cc index 3ab3a07a0..ead5d04da 100644 --- a/src/accessor/grib_accessor_class_latlon_increment.cc +++ b/src/accessor/grib_accessor_class_latlon_increment.cc @@ -10,33 +10,30 @@ #include "grib_accessor_class_latlon_increment.h" -grib_accessor_class_latlon_increment_t _grib_accessor_class_latlon_increment{ "latlon_increment" }; -grib_accessor_class* grib_accessor_class_latlon_increment = &_grib_accessor_class_latlon_increment; +grib_accessor_latlon_increment_t _grib_accessor_latlon_increment{}; +grib_accessor* grib_accessor_latlon_increment = &_grib_accessor_latlon_increment; - -void grib_accessor_class_latlon_increment_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_latlon_increment_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_latlon_increment_t* self = (grib_accessor_latlon_increment_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_double_t::init(l, c); + int n = 0; + grib_handle* hand = grib_handle_of_accessor(this); - int n = 0; - self->directionIncrementGiven = grib_arguments_get_name(hand, c, n++); - self->directionIncrement = grib_arguments_get_name(hand, c, n++); - self->scansPositively = grib_arguments_get_name(hand, c, n++); - self->first = grib_arguments_get_name(hand, c, n++); - self->last = grib_arguments_get_name(hand, c, n++); - self->numberOfPoints = grib_arguments_get_name(hand, c, n++); - self->angleMultiplier = grib_arguments_get_name(hand, c, n++); - self->angleDivisor = grib_arguments_get_name(hand, c, n++); - self->isLongitude = grib_arguments_get_long(hand, c, n++); + directionIncrementGiven_ = grib_arguments_get_name(hand, c, n++); + directionIncrement_ = grib_arguments_get_name(hand, c, n++); + scansPositively_ = grib_arguments_get_name(hand, c, n++); + first_ = grib_arguments_get_name(hand, c, n++); + last_ = grib_arguments_get_name(hand, c, n++); + numberOfPoints_ = grib_arguments_get_name(hand, c, n++); + angleMultiplier_ = grib_arguments_get_name(hand, c, n++); + angleDivisor_ = grib_arguments_get_name(hand, c, n++); + isLongitude_ = grib_arguments_get_long(hand, c, n++); } -int grib_accessor_class_latlon_increment_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_latlon_increment_t::unpack_double(double* val, size_t* len) { - grib_accessor_latlon_increment_t* self = (grib_accessor_latlon_increment_t*)a; - int ret = GRIB_SUCCESS; - grib_handle* hand = grib_handle_of_accessor(a); + int ret = 0; + grib_handle* hand = grib_handle_of_accessor(this); long directionIncrementGiven = 0; long directionIncrement = 0; @@ -50,31 +47,31 @@ int grib_accessor_class_latlon_increment_t::unpack_double(grib_accessor* a, doub if (*len < 1) return GRIB_ARRAY_TOO_SMALL; - if ((ret = grib_get_long_internal(hand, self->directionIncrementGiven, &directionIncrementGiven)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, directionIncrementGiven_, &directionIncrementGiven)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->scansPositively, &scansPositively)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, scansPositively_, &scansPositively)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->directionIncrement, &directionIncrement)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, directionIncrement_, &directionIncrement)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(hand, self->first, &first)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(hand, first_, &first)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(hand, self->last, &last)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(hand, last_, &last)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->numberOfPoints, &numberOfPoints)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, numberOfPoints_, &numberOfPoints)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->angleMultiplier, &angleMultiplier)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, angleMultiplier_, &angleMultiplier)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->angleDivisor, &angleDivisor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, angleDivisor_, &angleDivisor)) != GRIB_SUCCESS) return ret; - if (self->isLongitude) { + if (isLongitude_) { if (last < first && scansPositively) last += 360; /*if (last > first && !scansPositively) first-=360;*/ @@ -83,7 +80,7 @@ int grib_accessor_class_latlon_increment_t::unpack_double(grib_accessor* a, doub if (!directionIncrementGiven && numberOfPoints != GRIB_MISSING_LONG) { if (numberOfPoints < 2) { /* We cannot compute the increment if we don't have enough points! */ - grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + grib_context_log(parent_->h->context, GRIB_LOG_ERROR, "Cannot compute lat/lon increments. Not enough points!"); return GRIB_GEOCALCULUS_PROBLEM; } @@ -119,12 +116,11 @@ int grib_accessor_class_latlon_increment_t::unpack_double(grib_accessor* a, doub return ret; } -int grib_accessor_class_latlon_increment_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_latlon_increment_t::pack_double(const double* val, size_t* len) { - grib_accessor_latlon_increment_t* self = (grib_accessor_latlon_increment_t*)a; - int ret = GRIB_SUCCESS; - long codedNumberOfPoints = 0; - grib_handle* hand = grib_handle_of_accessor(a); + int ret = 0; + long codedNumberOfPoints = 0; + grib_handle* hand = grib_handle_of_accessor(this); long directionIncrementGiven = 0; long directionIncrement = 0; @@ -137,30 +133,30 @@ int grib_accessor_class_latlon_increment_t::pack_double(grib_accessor* a, const long scansPositively = 0; double directionIncrementDouble = 0; - ret = grib_get_double_internal(hand, self->first, &first); + ret = grib_get_double_internal(hand, first_, &first); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_double_internal(hand, self->last, &last); + ret = grib_get_double_internal(hand, last_, &last); if (ret != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->directionIncrementGiven, &directionIncrementGiven)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, directionIncrementGiven_, &directionIncrementGiven)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->numberOfPoints, &numberOfPoints)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, numberOfPoints_, &numberOfPoints)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->scansPositively, &scansPositively)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, scansPositively_, &scansPositively)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->angleMultiplier, &angleMultiplier)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, angleMultiplier_, &angleMultiplier)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->angleDivisor, &angleDivisor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, angleDivisor_, &angleDivisor)) != GRIB_SUCCESS) return ret; - if (self->isLongitude) { + if (isLongitude_) { if (last < first && scansPositively) last += 360; if (last > first && !scansPositively) @@ -184,16 +180,16 @@ int grib_accessor_class_latlon_increment_t::pack_double(grib_accessor* a, const } } - // ret = grib_set_long_internal(hand, self->numberOfPoints,numberOfPoints); - // if(ret) grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannot pack value for %s error %d \n", a->name, self->numberOfPoints, ret); + // ret = grib_set_long_internal(hand, numberOfPoints_ ,numberOfPoints); + // if(ret) grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannot pack value for %s error %d \n", a->name, numberOfPoints_ , ret); - grib_get_long_internal(hand, self->numberOfPoints, &codedNumberOfPoints); + grib_get_long_internal(hand, numberOfPoints_, &codedNumberOfPoints); - ret = grib_set_long_internal(hand, self->directionIncrement, directionIncrement); + ret = grib_set_long_internal(hand, directionIncrement_, directionIncrement); if (ret) return ret; - ret = grib_set_long_internal(hand, self->directionIncrementGiven, directionIncrementGiven); + ret = grib_set_long_internal(hand, directionIncrementGiven_, directionIncrementGiven); if (ret) return ret; @@ -203,12 +199,12 @@ int grib_accessor_class_latlon_increment_t::pack_double(grib_accessor* a, const return GRIB_SUCCESS; } -int grib_accessor_class_latlon_increment_t::is_missing(grib_accessor* a) +int grib_accessor_latlon_increment_t::is_missing() { size_t len = 1; double val = 0; - unpack_double(a, &val, &len); + unpack_double(&val, &len); return (val == GRIB_MISSING_DOUBLE); } diff --git a/src/accessor/grib_accessor_class_latlon_increment.h b/src/accessor/grib_accessor_class_latlon_increment.h index 8dfa7cb93..fcc5d76e3 100644 --- a/src/accessor/grib_accessor_class_latlon_increment.h +++ b/src/accessor/grib_accessor_class_latlon_increment.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,25 +15,22 @@ class grib_accessor_latlon_increment_t : public grib_accessor_double_t { public: - /* Members defined in latlon_increment */ - const char* directionIncrementGiven; - const char* directionIncrement; - const char* scansPositively; - const char* first; - const char* last; - const char* numberOfPoints; - const char* angleMultiplier; - const char* angleDivisor; - long isLongitude; -}; - -class grib_accessor_class_latlon_increment_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_latlon_increment_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_latlon_increment_t() : + grib_accessor_double_t() { class_name_ = "latlon_increment"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_latlon_increment_t{}; } - int is_missing(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int is_missing() override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* directionIncrementGiven_ = nullptr; + const char* directionIncrement_ = nullptr; + const char* scansPositively_ = nullptr; + const char* first_ = nullptr; + const char* last_ = nullptr; + const char* numberOfPoints_ = nullptr; + const char* angleMultiplier_ = nullptr; + const char* angleDivisor_ = nullptr; + long isLongitude_ = 0; }; diff --git a/src/accessor/grib_accessor_class_latlonvalues.cc b/src/accessor/grib_accessor_class_latlonvalues.cc index 4b80ca32a..5dd250272 100644 --- a/src/accessor/grib_accessor_class_latlonvalues.cc +++ b/src/accessor/grib_accessor_class_latlonvalues.cc @@ -11,37 +11,35 @@ #include "grib_accessor_class_latlonvalues.h" -grib_accessor_class_latlonvalues_t _grib_accessor_class_latlonvalues{ "latlonvalues" }; -grib_accessor_class* grib_accessor_class_latlonvalues = &_grib_accessor_class_latlonvalues; +grib_accessor_latlonvalues_t _grib_accessor_latlonvalues{}; +grib_accessor* grib_accessor_latlonvalues = &_grib_accessor_latlonvalues; - -void grib_accessor_class_latlonvalues_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_latlonvalues_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_latlonvalues_t* self = (grib_accessor_latlonvalues_t*)a; + grib_accessor_double_t::init(l, c); int n = 0; - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_latlonvalues_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_latlonvalues_t::unpack_double(double* val, size_t* len) { - grib_context* c = a->context; + grib_context* c = context_; int err = 0; double* v = val; double lat, lon, value; size_t size = 0; long count = 0; - grib_iterator* iter = grib_iterator_new(grib_handle_of_accessor(a), 0, &err); + grib_iterator* iter = grib_iterator_new(grib_handle_of_accessor(this), 0, &err); if (err) { grib_iterator_delete(iter); grib_context_log(c, GRIB_LOG_ERROR, "latlonvalues: Unable to create iterator"); return err; } - err = value_count(a, &count); + err = value_count(&count); if (err) return err; size = count; @@ -63,14 +61,13 @@ int grib_accessor_class_latlonvalues_t::unpack_double(grib_accessor* a, double* return GRIB_SUCCESS; } -int grib_accessor_class_latlonvalues_t::value_count(grib_accessor* a, long* count) +int grib_accessor_latlonvalues_t::value_count(long* count) { - grib_accessor_latlonvalues_t* self = (grib_accessor_latlonvalues_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int ret = GRIB_SUCCESS; + grib_handle* h = grib_handle_of_accessor(this); + int ret = GRIB_SUCCESS; size_t size; - if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "latlonvalues: Unable to get size of %s", self->values); + if ((ret = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) { + grib_context_log(h->context, GRIB_LOG_ERROR, "latlonvalues: Unable to get size of %s", values_); return ret; } diff --git a/src/accessor/grib_accessor_class_latlonvalues.h b/src/accessor/grib_accessor_class_latlonvalues.h index 7328688c6..00cddf5e6 100644 --- a/src/accessor/grib_accessor_class_latlonvalues.h +++ b/src/accessor/grib_accessor_class_latlonvalues.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_latlonvalues_t : public grib_accessor_double_t { public: - /* Members defined in latlonvalues */ - const char* values; -}; - -class grib_accessor_class_latlonvalues_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_latlonvalues_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_latlonvalues_t() : + grib_accessor_double_t() { class_name_ = "latlonvalues"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_latlonvalues_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_library_version.cc b/src/accessor/grib_accessor_class_library_version.cc index e0f1ee1da..0a31d1df3 100644 --- a/src/accessor/grib_accessor_class_library_version.cc +++ b/src/accessor/grib_accessor_class_library_version.cc @@ -10,13 +10,14 @@ #include "grib_accessor_class_library_version.h" -grib_accessor_class_library_version_t _grib_accessor_class_library_version{ "library_version" }; -grib_accessor_class* grib_accessor_class_library_version = &_grib_accessor_class_library_version; +grib_accessor_library_version_t _grib_accessor_library_version{}; +grib_accessor* grib_accessor_library_version = &_grib_accessor_library_version; - -int grib_accessor_class_library_version_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_library_version_t::unpack_string(char* val, size_t* len) { - char result[30] = {0,}; + char result[30] = { + 0, + }; size_t size = 0; int major = ECCODES_MAJOR_VERSION; @@ -35,13 +36,13 @@ int grib_accessor_class_library_version_t::unpack_string(grib_accessor* a, char* return GRIB_SUCCESS; } -int grib_accessor_class_library_version_t::value_count(grib_accessor* a, long* count) +int grib_accessor_library_version_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_library_version_t::string_length(grib_accessor* a) +size_t grib_accessor_library_version_t::string_length() { return 255; } diff --git a/src/accessor/grib_accessor_class_library_version.h b/src/accessor/grib_accessor_class_library_version.h index cb2a45f04..a3bd85e58 100644 --- a/src/accessor/grib_accessor_class_library_version.h +++ b/src/accessor/grib_accessor_class_library_version.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,15 +15,10 @@ class grib_accessor_library_version_t : public grib_accessor_ascii_t { public: - /* Members defined in library_version */ -}; - -class grib_accessor_class_library_version_t : public grib_accessor_class_ascii_t -{ -public: - grib_accessor_class_library_version_t(const char* name) : grib_accessor_class_ascii_t(name) {} + grib_accessor_library_version_t() : + grib_accessor_ascii_t() { class_name_ = "library_version"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_library_version_t{}; } - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + int value_count(long*) override; }; diff --git a/src/accessor/grib_accessor_class_local_definition.cc b/src/accessor/grib_accessor_class_local_definition.cc index 669584f2b..6f3d8a3a7 100644 --- a/src/accessor/grib_accessor_class_local_definition.cc +++ b/src/accessor/grib_accessor_class_local_definition.cc @@ -10,40 +10,34 @@ #include "grib_accessor_class_local_definition.h" -grib_accessor_class_local_definition_t _grib_accessor_class_local_definition{ "local_definition" }; -grib_accessor_class* grib_accessor_class_local_definition = &_grib_accessor_class_local_definition; +grib_accessor_local_definition_t _grib_accessor_local_definition{}; +grib_accessor* grib_accessor_local_definition = &_grib_accessor_local_definition; - -void grib_accessor_class_local_definition_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_local_definition_t::init(const long l, grib_arguments* c) { - grib_accessor_class_unsigned_t::init(a, l, c); - grib_accessor_local_definition_t* self = (grib_accessor_local_definition_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_unsigned_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - self->grib2LocalSectionNumber = grib_arguments_get_name(hand, c, n++); - self->productDefinitionTemplateNumber = grib_arguments_get_name(hand, c, n++); - self->productDefinitionTemplateNumberInternal = grib_arguments_get_name(hand, c, n++); - self->type = grib_arguments_get_name(hand, c, n++); - self->stream = grib_arguments_get_name(hand, c, n++); - self->the_class = grib_arguments_get_name(hand, c, n++); - self->eps = grib_arguments_get_name(hand, c, n++); - self->stepType = grib_arguments_get_name(hand, c, n++); - self->derivedForecast = grib_arguments_get_name(hand, c, n++); + grib2LocalSectionNumber_ = grib_arguments_get_name(hand, c, n++); + productDefinitionTemplateNumber_ = grib_arguments_get_name(hand, c, n++); + productDefinitionTemplateNumberInternal_ = grib_arguments_get_name(hand, c, n++); + type_ = grib_arguments_get_name(hand, c, n++); + stream_ = grib_arguments_get_name(hand, c, n++); + the_class_ = grib_arguments_get_name(hand, c, n++); + eps_ = grib_arguments_get_name(hand, c, n++); + stepType_ = grib_arguments_get_name(hand, c, n++); + derivedForecast_ = grib_arguments_get_name(hand, c, n++); } -int grib_accessor_class_local_definition_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_local_definition_t::unpack_long(long* val, size_t* len) { - grib_accessor_local_definition_t* self = (grib_accessor_local_definition_t*)a; - - return grib_get_long(grib_handle_of_accessor(a), self->grib2LocalSectionNumber, val); + return grib_get_long(grib_handle_of_accessor(this), grib2LocalSectionNumber_, val); } -int grib_accessor_class_local_definition_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_local_definition_t::pack_long(const long* val, size_t* len) { - grib_accessor_local_definition_t* self = (grib_accessor_local_definition_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - + grib_handle* hand = grib_handle_of_accessor(this); long productDefinitionTemplateNumber = -1; long productDefinitionTemplateNumberInternal = -1; long productDefinitionTemplateNumberNew = -1; @@ -66,22 +60,22 @@ int grib_accessor_class_local_definition_t::pack_long(grib_accessor* a, const lo Assert(editionNumber != 1); } - if (grib_get_long(hand, self->productDefinitionTemplateNumber, &productDefinitionTemplateNumber) != GRIB_SUCCESS) + if (grib_get_long(hand, productDefinitionTemplateNumber_, &productDefinitionTemplateNumber) != GRIB_SUCCESS) tooEarly = 1; - grib_get_long(hand, self->productDefinitionTemplateNumberInternal, &productDefinitionTemplateNumberInternal); - grib_get_long(hand, self->type, &type); - grib_get_long(hand, self->stream, &stream); - grib_get_long(hand, self->the_class, &the_class); - grib_get_long(hand, self->eps, &eps); - grib_get_string(hand, self->stepType, stepType, &slen); + grib_get_long(hand, productDefinitionTemplateNumberInternal_, &productDefinitionTemplateNumberInternal); + grib_get_long(hand, type_, &type); + grib_get_long(hand, stream_, &stream); + grib_get_long(hand, the_class_, &the_class); + grib_get_long(hand, eps_, &eps); + grib_get_string(hand, stepType_, stepType, &slen); if (!strcmp(stepType, "instant")) isInstant = 1; - grib_get_long(hand, self->grib2LocalSectionNumber, &grib2LocalSectionNumber); + grib_get_long(hand, grib2LocalSectionNumber_, &grib2LocalSectionNumber); grib_get_long(hand, "is_chemical", &chemical); grib_get_long(hand, "is_aerosol", &aerosol); if (chemical == 1 && aerosol == 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Parameter cannot be both chemical and aerosol!"); + grib_context_log(context_, GRIB_LOG_ERROR, "Parameter cannot be both chemical and aerosol!"); return GRIB_ENCODING_ERROR; } @@ -100,7 +94,7 @@ int grib_accessor_class_local_definition_t::pack_long(grib_accessor* a, const lo break; case 300: - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "Invalid localDefinitionNumber %d. This local definition has been deprecated.", localDefinitionNumber); return GRIB_ENCODING_ERROR; @@ -205,7 +199,7 @@ int grib_accessor_class_local_definition_t::pack_long(grib_accessor* a, const lo default: #ifdef DEBUG // In test & development mode, fail so we remember to adjust PDTN - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "grib_accessor_local_definition_t: Invalid localDefinitionNumber %d", localDefinitionNumber); // return GRIB_ENCODING_ERROR; #endif @@ -219,25 +213,25 @@ int grib_accessor_class_local_definition_t::pack_long(grib_accessor* a, const lo productDefinitionTemplateNumberNew = -1; // disable PDT selection } - if (productDefinitionTemplateNumberNew >=0 && productDefinitionTemplateNumber != productDefinitionTemplateNumberNew) { - if (a->context->debug) { - fprintf(stderr, "ECCODES DEBUG %s %s: ldNumber=%d, newPDTN=%ld\n", a->cclass->name, __func__, + if (productDefinitionTemplateNumberNew >= 0 && productDefinitionTemplateNumber != productDefinitionTemplateNumberNew) { + if (context_->debug) { + fprintf(stderr, "ECCODES DEBUG grib_accessor_local_definition_t: ldNumber=%d, newPDTN=%ld\n", localDefinitionNumber, productDefinitionTemplateNumberNew); } if (tooEarly) - grib_set_long(hand, self->productDefinitionTemplateNumberInternal, productDefinitionTemplateNumberNew); + grib_set_long(hand, productDefinitionTemplateNumberInternal_, productDefinitionTemplateNumberNew); else - grib_set_long(hand, self->productDefinitionTemplateNumber, productDefinitionTemplateNumberNew); + grib_set_long(hand, productDefinitionTemplateNumber_, productDefinitionTemplateNumberNew); } if (derivedForecast >= 0) - grib_set_long(hand, self->derivedForecast, derivedForecast); + grib_set_long(hand, derivedForecast_, derivedForecast); - grib_set_long(hand, self->grib2LocalSectionNumber, *val); + grib_set_long(hand, grib2LocalSectionNumber_, *val); return 0; } -int grib_accessor_class_local_definition_t::value_count(grib_accessor* a, long* count) +int grib_accessor_local_definition_t::value_count(long* count) { *count = 1; return 0; diff --git a/src/accessor/grib_accessor_class_local_definition.h b/src/accessor/grib_accessor_class_local_definition.h index f91ebbef4..1aa9a4f98 100644 --- a/src/accessor/grib_accessor_class_local_definition.h +++ b/src/accessor/grib_accessor_class_local_definition.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,25 +15,22 @@ class grib_accessor_local_definition_t : public grib_accessor_unsigned_t { public: - /* Members defined in local_definition */ - const char* productDefinitionTemplateNumber; - const char* productDefinitionTemplateNumberInternal; - const char* grib2LocalSectionNumber; - const char* type; - const char* stream; - const char* the_class; - const char* eps; - const char* stepType; - const char* derivedForecast; -}; - -class grib_accessor_class_local_definition_t : public grib_accessor_class_unsigned_t -{ -public: - grib_accessor_class_local_definition_t(const char* name) : grib_accessor_class_unsigned_t(name) {} + grib_accessor_local_definition_t() : + grib_accessor_unsigned_t() { class_name_ = "local_definition"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_local_definition_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* productDefinitionTemplateNumber_ = nullptr; + const char* productDefinitionTemplateNumberInternal_ = nullptr; + const char* grib2LocalSectionNumber_ = nullptr; + const char* type_ = nullptr; + const char* stream_ = nullptr; + const char* the_class_ = nullptr; + const char* eps_ = nullptr; + const char* stepType_ = nullptr; + const char* derivedForecast_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_long.cc b/src/accessor/grib_accessor_class_long.cc index 04f6908be..25f290e84 100644 --- a/src/accessor/grib_accessor_class_long.cc +++ b/src/accessor/grib_accessor_class_long.cc @@ -10,39 +10,40 @@ #include "grib_accessor_class_long.h" -grib_accessor_class_long_t _grib_accessor_class_long{"long"}; -grib_accessor_class* grib_accessor_class_long = &_grib_accessor_class_long; +grib_accessor_long_t _grib_accessor_long{}; +grib_accessor* grib_accessor_long = &_grib_accessor_long; -void grib_accessor_class_long_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_long_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); + grib_accessor_gen_t::init(len, arg); } -int grib_accessor_class_long_t::get_native_type(grib_accessor* a) +long grib_accessor_long_t::get_native_type() { return GRIB_TYPE_LONG; } -void grib_accessor_class_long_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_long_t::dump(grib_dumper* dumper) { - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); } -int grib_accessor_class_long_t::unpack_string(grib_accessor* a, char* v, size_t* len) +int grib_accessor_long_t::unpack_string(char* v, size_t* len) { long val = 0; size_t l = 1; char repres[1024]; char format[32] = "%ld"; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); - a->unpack_long(&val, &l); + unpack_long(&val, &l); /* TODO: We should catch all errors but in this case the test ERA_Gen.sh will fail * as the output from grib_ls will be different */ - if ((val == GRIB_MISSING_LONG) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0)) { + if ((val == GRIB_MISSING_LONG) && ((flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0)) { snprintf(repres, sizeof(repres), "MISSING"); - } else { + } + else { size_t size = sizeof(format); grib_get_string(h, "formatForLongs", format, &size); snprintf(repres, sizeof(repres), format, val); @@ -51,14 +52,13 @@ int grib_accessor_class_long_t::unpack_string(grib_accessor* a, char* v, size_t* l = strlen(repres) + 1; if (*len < l) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, l, *len); + class_name_, name_, l, *len); *len = l; return GRIB_BUFFER_TOO_SMALL; } - /*grib_context_log(a->context,GRIB_LOG_DEBUG, "grib_accessor_long: Casting long %s to string ", a->name);*/ + /*grib_context_log(a->context,GRIB_LOG_DEBUG, "grib_accessor_long: Casting long %s to string ", name_ );*/ *len = l; @@ -66,18 +66,18 @@ int grib_accessor_class_long_t::unpack_string(grib_accessor* a, char* v, size_t* return GRIB_SUCCESS; } -int grib_accessor_class_long_t::pack_missing(grib_accessor* a) +int grib_accessor_long_t::pack_missing() { size_t len = 1; long value = GRIB_MISSING_LONG; - if (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) - return a->pack_long(&value, &len); + if (flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + return pack_long(&value, &len); return GRIB_VALUE_CANNOT_BE_MISSING; } -int grib_accessor_class_long_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_long_t::unpack_double(double* val, size_t* len) { size_t rlen = 0; long count = 0; @@ -86,19 +86,19 @@ int grib_accessor_class_long_t::unpack_double(grib_accessor* a, double* val, siz long oneval = 0; int ret = GRIB_SUCCESS; - ret = a->value_count(&count); + ret = value_count(&count); if (ret) return ret; rlen = count; if (*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %lu values", a->name, rlen); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s, it contains %lu values", name_, rlen); *len = 0; return GRIB_ARRAY_TOO_SMALL; } if (rlen == 1) { - ret = a->unpack_long(&oneval, &rlen); + ret = unpack_long(&oneval, &rlen); if (ret != GRIB_SUCCESS) return ret; *val = oneval; @@ -106,25 +106,25 @@ int grib_accessor_class_long_t::unpack_double(grib_accessor* a, double* val, siz return GRIB_SUCCESS; } - values = (long*)grib_context_malloc(a->context, rlen * sizeof(long)); + values = (long*)grib_context_malloc(context_, rlen * sizeof(long)); if (!values) return GRIB_OUT_OF_MEMORY; - ret = a->unpack_long(values, &rlen); + ret = unpack_long(values, &rlen); if (ret != GRIB_SUCCESS) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return ret; } for (i = 0; i < rlen; i++) val[i] = values[i]; - grib_context_free(a->context, values); + grib_context_free(context_, values); *len = rlen; return GRIB_SUCCESS; } -int grib_accessor_class_long_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_long_t::compare(grib_accessor* b) { int retval = 0; long* aval = 0; @@ -135,7 +135,7 @@ int grib_accessor_class_long_t::compare(grib_accessor* a, grib_accessor* b) size_t blen = 0; int err = 0; - err = a->value_count(&count); + err = value_count(&count); if (err) return err; alen = count; @@ -148,36 +148,36 @@ int grib_accessor_class_long_t::compare(grib_accessor* a, grib_accessor* b) if (alen != blen) return GRIB_COUNT_MISMATCH; - aval = (long*)grib_context_malloc(a->context, alen * sizeof(long)); - bval = (long*)grib_context_malloc(b->context, blen * sizeof(long)); + aval = (long*)grib_context_malloc(context_, alen * sizeof(long)); + bval = (long*)grib_context_malloc(b->context_, blen * sizeof(long)); - a->unpack_long(aval, &alen); + unpack_long(aval, &alen); b->unpack_long(bval, &blen); retval = GRIB_SUCCESS; - for (size_t i=0; icontext, aval); - grib_context_free(b->context, bval); + grib_context_free(context_, aval); + grib_context_free(b->context_, bval); return retval; } -int grib_accessor_class_long_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_long_t::pack_string(const char* val, size_t* len) { long v = 0; /* The converted value */ // ECC-1722 if (STR_EQUAL_NOCASE(val, "missing")) { - return pack_missing(a); + return pack_missing(); } if (string_to_long(val, &v, 1) != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Trying to pack \"%s\" as long. String cannot be converted to an integer", val); + grib_context_log(context_, GRIB_LOG_ERROR, + "Trying to pack \"%s\" as long. String cannot be converted to an integer", val); return GRIB_WRONG_TYPE; } - return a->pack_long(&v, len); + return pack_long(&v, len); } diff --git a/src/accessor/grib_accessor_class_long.h b/src/accessor/grib_accessor_class_long.h index 9f87618d9..bce7dd9e9 100644 --- a/src/accessor/grib_accessor_class_long.h +++ b/src/accessor/grib_accessor_class_long.h @@ -13,19 +13,17 @@ #include "grib_accessor_class_gen.h" class grib_accessor_long_t : public grib_accessor_gen_t -{}; - -class grib_accessor_class_long_t : public grib_accessor_class_gen_t { public: - grib_accessor_class_long_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_long_t() : + grib_accessor_gen_t() { class_name_ = "long"; } // grib_accessor* create_empty_accessor() override { return new grib_accessor_long_t{}; } - void init(grib_accessor* a, const long len, grib_arguments* arg) override; - int get_native_type(grib_accessor* a) override; - int pack_missing(grib_accessor* a) override; - int pack_string(grib_accessor* a, const char*, size_t* len) override; - int unpack_double(grib_accessor* a, double* val, size_t* len) override; - int unpack_string(grib_accessor* a, char*, size_t* len) override; - void dump(grib_accessor* a, grib_dumper*) override; - int compare(grib_accessor* a, grib_accessor*) override; + void init(const long len, grib_arguments* arg) override; + long get_native_type() override; + int pack_missing() override; + int pack_string(const char*, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + void dump(grib_dumper*) override; + int compare(grib_accessor*) override; }; diff --git a/src/accessor/grib_accessor_class_long_vector.cc b/src/accessor/grib_accessor_class_long_vector.cc index 6759ea799..d8c004e90 100644 --- a/src/accessor/grib_accessor_class_long_vector.cc +++ b/src/accessor/grib_accessor_class_long_vector.cc @@ -11,90 +11,85 @@ #include "grib_accessor_class_long_vector.h" #include "grib_accessor_class_abstract_long_vector.h" -grib_accessor_class_long_vector_t _grib_accessor_class_long_vector{ "long_vector" }; -grib_accessor_class* grib_accessor_class_long_vector = &_grib_accessor_class_long_vector; +grib_accessor_long_vector_t _grib_accessor_long_vector{}; +grib_accessor* grib_accessor_long_vector = &_grib_accessor_long_vector; - -void grib_accessor_class_long_vector_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_long_vector_t::init(const long l, grib_arguments* c) { - grib_accessor_class_abstract_long_vector_t::init(a, l, c); - grib_accessor_long_vector_t* self = (grib_accessor_long_vector_t*)a; + grib_accessor_abstract_long_vector_t::init(l, c); grib_accessor* va = NULL; grib_accessor_abstract_long_vector_t* v = NULL; - int n = 0; + int n = 0; - self->vector = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - va = (grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a), self->vector); - v = (grib_accessor_abstract_long_vector_t*)va; + vector_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + va = (grib_accessor*)grib_find_accessor(grib_handle_of_accessor(this), vector_); + v = (grib_accessor_abstract_long_vector_t*)va; - self->index = grib_arguments_get_long(grib_handle_of_accessor(a), c, n++); + index_ = grib_arguments_get_long(grib_handle_of_accessor(this), c, n++); - /* check self->index on init and never change it */ - Assert(self->index < v->number_of_elements && self->index >= 0); + /* check index_ on init and never change it */ + Assert(index_ < v->number_of_elements_ && index_ >= 0); - a->length = 0; + length_ = 0; } -int grib_accessor_class_long_vector_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_long_vector_t::unpack_long(long* val, size_t* len) { size_t size = 0; int err = 0; long* vector; - grib_accessor_long_vector_t* self = (grib_accessor_long_vector_t*)a; grib_accessor* va = NULL; grib_accessor_abstract_long_vector_t* v = NULL; - va = (grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a), self->vector); + va = (grib_accessor*)grib_find_accessor(grib_handle_of_accessor(this), vector_); v = (grib_accessor_abstract_long_vector_t*)va; /*TODO implement the dirty mechanism to avoid to unpack every time */ - err = grib_get_size(grib_handle_of_accessor(a), self->vector, &size); + err = grib_get_size(grib_handle_of_accessor(this), vector_, &size); if (err) return err; DEBUG_ASSERT(size > 0); - vector = (long*)grib_context_malloc(a->context, sizeof(long) * size); + vector = (long*)grib_context_malloc(context_, sizeof(long) * size); err = va->unpack_long(vector, &size); - grib_context_free(a->context, vector); + grib_context_free(context_, vector); if (err) return err; - *val = v->v[self->index]; + *val = v->v_[index_]; return GRIB_SUCCESS; } -int grib_accessor_class_long_vector_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_long_vector_t::unpack_double(double* val, size_t* len) { long lval = 0; int err = 0; - grib_accessor_long_vector_t* self = (grib_accessor_long_vector_t*)a; grib_accessor* va = NULL; grib_accessor_abstract_long_vector_t* v = NULL; - va = (grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a), self->vector); - v = (grib_accessor_abstract_long_vector_t*)va; + va = (grib_accessor*)grib_find_accessor(grib_handle_of_accessor(this), vector_); + v = (grib_accessor_abstract_long_vector_t*)va; - err = unpack_long(a, &lval, len); + err = unpack_long(&lval, len); - *val = (double)v->v[self->index]; + *val = (double)v->v_[index_]; return err; } -int grib_accessor_class_long_vector_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_long_vector_t::pack_long(const long* val, size_t* len) { int err = 0; - grib_accessor_long_vector_t* self = (grib_accessor_long_vector_t*)a; grib_accessor* va = NULL; grib_accessor_abstract_long_vector_t* v = NULL; - va = (grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a), self->vector); + va = (grib_accessor*)grib_find_accessor(grib_handle_of_accessor(this), vector_); v = (grib_accessor_abstract_long_vector_t*)va; - v->pack_index = self->index; + v->pack_index_ = index_; err = va->pack_long(val, len); return err; } -int grib_accessor_class_long_vector_t::get_native_type(grib_accessor* a) +long grib_accessor_long_vector_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_long_vector.h b/src/accessor/grib_accessor_class_long_vector.h index 010a4ed7e..67c064450 100644 --- a/src/accessor/grib_accessor_class_long_vector.h +++ b/src/accessor/grib_accessor_class_long_vector.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_long_vector_t : public grib_accessor_abstract_long_vector_t { public: - /* Members defined in long_vector */ - const char* vector; - int index; -}; - -class grib_accessor_class_long_vector_t : public grib_accessor_class_abstract_long_vector_t -{ -public: - grib_accessor_class_long_vector_t(const char* name) : grib_accessor_class_abstract_long_vector_t(name) {} + grib_accessor_long_vector_t() : + grib_accessor_abstract_long_vector_t() { class_name_ = "long_vector"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_long_vector_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* vector_ = nullptr; + int index_ = 0; }; diff --git a/src/accessor/grib_accessor_class_longitudes.cc b/src/accessor/grib_accessor_class_longitudes.cc index 1b40cbcc7..b262079c1 100644 --- a/src/accessor/grib_accessor_class_longitudes.cc +++ b/src/accessor/grib_accessor_class_longitudes.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,31 +10,27 @@ #include "grib_accessor_class_longitudes.h" -grib_accessor_class_longitudes_t _grib_accessor_class_longitudes{ "longitudes" }; -grib_accessor_class* grib_accessor_class_longitudes = &_grib_accessor_class_longitudes; - +grib_accessor_longitudes_t _grib_accessor_longitudes{}; +grib_accessor* grib_accessor_longitudes = &_grib_accessor_longitudes; static int get_distinct(grib_accessor* a, double** val, long* len); - -void grib_accessor_class_longitudes_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_longitudes_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_longitudes_t* self = (grib_accessor_longitudes_t*)a; + grib_accessor_double_t::init(l, c); int n = 0; - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->distinct = grib_arguments_get_long(grib_handle_of_accessor(a), c, n++); - self->save = 0; - self->lons = 0; + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + distinct_ = grib_arguments_get_long(grib_handle_of_accessor(this), c, n++); + save_ = 0; + lons_ = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_longitudes_t::unpack_double(grib_accessor* a, double* val, size_t* len) -{ - grib_accessor_longitudes_t* self = (grib_accessor_longitudes_t*)a; - grib_context* c = a->context; +int grib_accessor_longitudes_t::unpack_double(double* val, size_t* len) +{ + grib_context* c = context_; int ret = 0; double* v = val; double dummyLat = 0; @@ -43,35 +38,35 @@ int grib_accessor_class_longitudes_t::unpack_double(grib_accessor* a, double* va long count = 0; grib_iterator* iter = NULL; - self->save = 1; - ret = value_count(a, &count); + save_ = 1; + ret = value_count(&count); if (ret) return ret; size = count; if (*len < size) { - /* self->lons are computed in value_count*/ - if (self->lons) { - grib_context_free(c, self->lons); - self->lons = NULL; + /* lons_ are computed in value_count*/ + if (lons_) { + grib_context_free(c, lons_); + lons_ = NULL; } return GRIB_ARRAY_TOO_SMALL; } - self->save = 0; + save_ = 0; - /* self->lons are computed in value_count*/ - if (self->lons) { + /* lons_ are computed in value_count*/ + if (lons_) { int i; - *len = self->size; + *len = size_; for (i = 0; i < size; i++) - val[i] = self->lons[i]; - grib_context_free(c, self->lons); - self->lons = NULL; - self->size = 0; + val[i] = lons_[i]; + grib_context_free(c, lons_); + lons_ = NULL; + size_ = 0; return GRIB_SUCCESS; } // ECC-1525 Performance: We do not need the values to be decoded - iter = grib_iterator_new(grib_handle_of_accessor(a), GRIB_GEOITERATOR_NO_VALUES, &ret); + iter = grib_iterator_new(grib_handle_of_accessor(this), GRIB_GEOITERATOR_NO_VALUES, &ret); if (ret != GRIB_SUCCESS) { grib_iterator_delete(iter); grib_context_log(c, GRIB_LOG_ERROR, "longitudes: Unable to create iterator"); @@ -86,17 +81,16 @@ int grib_accessor_class_longitudes_t::unpack_double(grib_accessor* a, double* va return ret; } -int grib_accessor_class_longitudes_t::value_count(grib_accessor* a, long* len) +int grib_accessor_longitudes_t::value_count(long* len) { - grib_accessor_longitudes_t* self = (grib_accessor_longitudes_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - grib_context* c = a->context; - double* val = NULL; + grib_handle* h = grib_handle_of_accessor(this); + grib_context* c = context_; + double* val = NULL; int ret; size_t size; *len = 0; - if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "longitudes: Unable to get size of %s", self->values); + if ((ret = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) { + grib_context_log(h->context, GRIB_LOG_ERROR, "longitudes: Unable to get size of %s", values_); return ret; } *len = size; @@ -108,13 +102,13 @@ int grib_accessor_class_longitudes_t::value_count(grib_accessor* a, long* len) *len = numberOfDataPoints; } - if (self->distinct) { - ret = get_distinct(a, &val, len); + if (distinct_) { + ret = get_distinct(this, &val, len); if (ret != GRIB_SUCCESS) return ret; - if (self->save) { - self->lons = val; - self->size = *len; + if (save_) { + lons_ = val; + size_ = *len; } else { grib_context_free(c, val); @@ -145,7 +139,7 @@ static int get_distinct(grib_accessor* a, double** val, long* len) double dummyLat = 0; int ret = 0; size_t size = *len; - grib_context* c = a->context; + grib_context* c = a->context_; // Performance: We do not need the values to be decoded grib_iterator* iter = grib_iterator_new(grib_handle_of_accessor(a), GRIB_GEOITERATOR_NO_VALUES, &ret); diff --git a/src/accessor/grib_accessor_class_longitudes.h b/src/accessor/grib_accessor_class_longitudes.h index def174a74..75402d42b 100644 --- a/src/accessor/grib_accessor_class_longitudes.h +++ b/src/accessor/grib_accessor_class_longitudes.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,20 +15,17 @@ class grib_accessor_longitudes_t : public grib_accessor_double_t { public: - /* Members defined in longitudes */ - const char* values; - long distinct; - double* lons; - long size; - int save; -}; - -class grib_accessor_class_longitudes_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_longitudes_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_longitudes_t() : + grib_accessor_double_t() { class_name_ = "longitudes"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_longitudes_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; + long distinct_ = 0; + double* lons_ = nullptr; + long size_ = 0; + int save_ = 0; }; diff --git a/src/accessor/grib_accessor_class_lookup.cc b/src/accessor/grib_accessor_class_lookup.cc index e58162ccb..0ec0c62e1 100644 --- a/src/accessor/grib_accessor_class_lookup.cc +++ b/src/accessor/grib_accessor_class_lookup.cc @@ -10,40 +10,35 @@ #include "grib_accessor_class_lookup.h" -grib_accessor_class_lookup_t _grib_accessor_class_lookup{ "lookup" }; -grib_accessor_class* grib_accessor_class_lookup = &_grib_accessor_class_lookup; +grib_accessor_lookup_t _grib_accessor_lookup{}; +grib_accessor* grib_accessor_lookup = &_grib_accessor_lookup; - -void grib_accessor_class_lookup_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_lookup_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_long_t::init(a, len, arg); - grib_accessor_lookup_t* self = (grib_accessor_lookup_t*)a; - - a->length = 0; - self->llength = len; - self->loffset = grib_arguments_get_long(grib_handle_of_accessor(a), arg, 0); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - self->real_name = grib_arguments_get_expression(grib_handle_of_accessor(a), arg, 1); + grib_accessor_long_t::init(len, arg); + length_ = 0; + llength_ = len; + loffset_ = grib_arguments_get_long(grib_handle_of_accessor(this), arg, 0); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + real_name_ = grib_arguments_get_expression(grib_handle_of_accessor(this), arg, 1); } -void grib_accessor_class_lookup_t::post_init(grib_accessor* a) +void grib_accessor_lookup_t::post_init() { - grib_accessor_lookup_t* self = (grib_accessor_lookup_t*)a; - if (self->real_name) { - grib_dependency_observe_expression(a, self->real_name); + if (real_name_) { + grib_dependency_observe_expression(this, real_name_); } } -void grib_accessor_class_lookup_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_lookup_t::dump(grib_dumper* dumper) { - grib_accessor_lookup_t* self = (grib_accessor_lookup_t*)a; unsigned char bytes[1024] = {0,}; char msg[1024] = {0,}; char buf[2048]; unsigned long v = 0; - size_t llen = self->llength; - a->unpack_bytes(bytes, &llen); + size_t llen = llength_; + unpack_bytes(bytes, &llen); bytes[llen] = 0; for (size_t i = 0; i < llen; i++) { msg[i] = isprint(bytes[i]) ? bytes[i] : '?'; @@ -53,18 +48,17 @@ void grib_accessor_class_lookup_t::dump(grib_accessor* a, grib_dumper* dumper) msg[llen] = 0; - snprintf(buf, sizeof(buf), "%s %lu %ld-%ld", msg, v, (long)a->offset + self->loffset, (long)self->llength); + snprintf(buf, sizeof(buf), "%s %lu %ld-%ld", msg, v, (long)offset_ + loffset_, (long)llength_); - grib_dump_long(dumper, a, buf); + grib_dump_long(dumper, this, buf); } -int grib_accessor_class_lookup_t::unpack_string(grib_accessor* a, char* v, size_t* len) +int grib_accessor_lookup_t::unpack_string(char* v, size_t* len) { - grib_accessor_lookup_t* self = (grib_accessor_lookup_t*)a; - unsigned char bytes[1024] = {0,}; + unsigned char bytes[1024] = {0,}; - size_t llen = self->llength; - a->unpack_bytes(bytes, &llen); + size_t llen = llength_; + unpack_bytes(bytes, &llen); bytes[llen] = 0; for (size_t i = 0; i < llen; i++) { @@ -76,7 +70,7 @@ int grib_accessor_class_lookup_t::unpack_string(grib_accessor* a, char* v, size_ /* Try unpack as long */ size_t length = 10; long lval = 0; - int err = unpack_long(a, &lval, &length); + int err = unpack_long(&lval, &length); if (!err) { char str[5]; int conv = snprintf(str, sizeof(str), "%ld", lval); @@ -89,15 +83,14 @@ int grib_accessor_class_lookup_t::unpack_string(grib_accessor* a, char* v, size_ return GRIB_SUCCESS; } -int grib_accessor_class_lookup_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_lookup_t::unpack_long(long* val, size_t* len) { - grib_accessor_lookup_t* self = (grib_accessor_lookup_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); - long pos = (a->offset + self->loffset) * 8; + long pos = (offset_ + loffset_) * 8; if (len[0] < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", name_, 1); len[0] = 0; return GRIB_ARRAY_TOO_SMALL; } @@ -105,36 +98,34 @@ int grib_accessor_class_lookup_t::unpack_long(grib_accessor* a, long* val, size_ /* This is used when reparsing or rebuilding */ if (h->loader) { Assert(*len == 1); - return h->loader->lookup_long(h->context, h->loader, a->name, val); + return h->loader->lookup_long(h->context, h->loader, name_, val); } - val[0] = grib_decode_unsigned_long(h->buffer->data, &pos, self->llength * 8); + val[0] = grib_decode_unsigned_long(h->buffer->data, &pos, llength_ * 8); len[0] = 1; - /*printf("###########lookup unpack_long: %s %ld %ld\n",a->name, pos/8, val[0]);*/ + /*printf("###########lookup unpack_long: %s %ld %ld\n",name_ , pos/8, val[0]);*/ return GRIB_SUCCESS; } -int grib_accessor_class_lookup_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_lookup_t::pack_long(const long* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -long grib_accessor_class_lookup_t::byte_count(grib_accessor* a) +long grib_accessor_lookup_t::byte_count() { - grib_accessor_lookup_t* self = (grib_accessor_lookup_t*)a; - return self->llength; + return llength_; } -long grib_accessor_class_lookup_t::byte_offset(grib_accessor* a) +long grib_accessor_lookup_t::byte_offset() { - grib_accessor_lookup_t* self = (grib_accessor_lookup_t*)a; - return self->loffset; + return loffset_; } -int grib_accessor_class_lookup_t::notify_change(grib_accessor* self, grib_accessor* changed) +int grib_accessor_lookup_t::notify_change(grib_accessor* changed) { /* Forward changes */ - return grib_dependency_notify_change(self); + return grib_dependency_notify_change(this); } diff --git a/src/accessor/grib_accessor_class_lookup.h b/src/accessor/grib_accessor_class_lookup.h index be1663ae7..1a8eba3f2 100644 --- a/src/accessor/grib_accessor_class_lookup.h +++ b/src/accessor/grib_accessor_class_lookup.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,23 +15,21 @@ class grib_accessor_lookup_t : public grib_accessor_long_t { public: - long llength; - long loffset; - grib_expression* real_name; -}; - -class grib_accessor_class_lookup_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_lookup_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_lookup_t() : + grib_accessor_long_t() { class_name_ = "lookup"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_lookup_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - long byte_count(grib_accessor*) override; - long byte_offset(grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void post_init(grib_accessor*) override; - int notify_change(grib_accessor*, grib_accessor*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + long byte_count() override; + long byte_offset() override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + void post_init() override; + int notify_change(grib_accessor*) override; + +private: + long llength_ = 0; + long loffset_ = 0; + grib_expression* real_name_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_mars_param.cc b/src/accessor/grib_accessor_class_mars_param.cc index 77c59a0bc..b9b0d2c2c 100644 --- a/src/accessor/grib_accessor_class_mars_param.cc +++ b/src/accessor/grib_accessor_class_mars_param.cc @@ -10,37 +10,33 @@ #include "grib_accessor_class_mars_param.h" -grib_accessor_class_mars_param_t _grib_accessor_class_mars_param{ "mars_param" }; -grib_accessor_class* grib_accessor_class_mars_param = &_grib_accessor_class_mars_param; +grib_accessor_mars_param_t _grib_accessor_mars_param{}; +grib_accessor* grib_accessor_mars_param = &_grib_accessor_mars_param; - -void grib_accessor_class_mars_param_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_mars_param_t::init(const long l, grib_arguments* c) { - grib_accessor_class_ascii_t::init(a, l, c); - grib_accessor_mars_param_t* self = (grib_accessor_mars_param_t*)a; - - int n = 0; - self->paramId = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->table = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->param = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + grib_accessor_ascii_t::init(l, c); + int n = 0; + paramId_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + table_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + param_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); } // For an implementation of pack_string, see -// src/deprecated/grib_accessor_class_mars_param.cc +// src/deprecated/grib_accessor_mars_param.cc // For an alternative implementation of unpack_string, see -// src/deprecated/grib_accessor_class_mars_param.cc +// src/deprecated/grib_accessor_mars_param.cc // -int grib_accessor_class_mars_param_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_mars_param_t::unpack_string(char* val, size_t* len) { - grib_accessor_mars_param_t* self = (grib_accessor_mars_param_t*)a; - long param = 0; - long table = 0; - int ret = 0; + long param = 0; + long table = 0; + int ret = 0; - if (self->table != NULL && (ret = grib_get_long_internal(grib_handle_of_accessor(a), self->table, &table)) != GRIB_SUCCESS) + if (table_ != NULL && (ret = grib_get_long_internal(grib_handle_of_accessor(this), table_, &table)) != GRIB_SUCCESS) return ret; - if (self->param != NULL && (ret = grib_get_long_internal(grib_handle_of_accessor(a), self->param, ¶m)) != GRIB_SUCCESS) + if (param_ != NULL && (ret = grib_get_long_internal(grib_handle_of_accessor(this), param_, ¶m)) != GRIB_SUCCESS) return ret; /*if (table==200) table=128;*/ @@ -50,7 +46,7 @@ int grib_accessor_class_mars_param_t::unpack_string(grib_accessor* a, char* val, return GRIB_SUCCESS; } -size_t grib_accessor_class_mars_param_t::string_length(grib_accessor* a) +size_t grib_accessor_mars_param_t::string_length() { return 7; } diff --git a/src/accessor/grib_accessor_class_mars_param.h b/src/accessor/grib_accessor_class_mars_param.h index 1eab50fb6..1fb03b2e1 100644 --- a/src/accessor/grib_accessor_class_mars_param.h +++ b/src/accessor/grib_accessor_class_mars_param.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,18 +15,15 @@ class grib_accessor_mars_param_t : public grib_accessor_ascii_t { public: - /* Members defined in mars_param */ - const char* paramId; - const char* table; - const char* param; -}; - -class grib_accessor_class_mars_param_t : public grib_accessor_class_ascii_t -{ -public: - grib_accessor_class_mars_param_t(const char* name) : grib_accessor_class_ascii_t(name) {} + grib_accessor_mars_param_t() : + grib_accessor_ascii_t() { class_name_ = "mars_param"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_mars_param_t{}; } - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + void init(const long, grib_arguments*) override; + +private: + const char* paramId_ = nullptr; + const char* table_ = nullptr; + const char* param_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_mars_step.cc b/src/accessor/grib_accessor_class_mars_step.cc index 8fd9f9dfa..d7fa6902d 100644 --- a/src/accessor/grib_accessor_class_mars_step.cc +++ b/src/accessor/grib_accessor_class_mars_step.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,34 +10,31 @@ #include "grib_accessor_class_mars_step.h" -grib_accessor_class_mars_step_t _grib_accessor_class_mars_step{ "mars_step" }; -grib_accessor_class* grib_accessor_class_mars_step = &_grib_accessor_class_mars_step; +grib_accessor_mars_step_t _grib_accessor_mars_step{}; +grib_accessor* grib_accessor_mars_step = &_grib_accessor_mars_step; - -void grib_accessor_class_mars_step_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_mars_step_t::init(const long l, grib_arguments* c) { - grib_accessor_class_ascii_t::init(a, l, c); - int n = 0; - grib_accessor_mars_step_t* self = (grib_accessor_mars_step_t*)a; - self->stepRange = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->stepType = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + grib_accessor_ascii_t::init(l, c); + int n = 0; + stepRange_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + stepType_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); } -int grib_accessor_class_mars_step_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_mars_step_t::pack_string(const char* val, size_t* len) { char stepType[100]; size_t stepTypeLen = 100; char buf[100] = {0,}; int ret; - grib_accessor_mars_step_t* self = (grib_accessor_mars_step_t*)a; - grib_accessor* stepRangeAcc = grib_find_accessor(grib_handle_of_accessor(a), self->stepRange); + grib_accessor* stepRangeAcc = grib_find_accessor(grib_handle_of_accessor(this), stepRange_); if (!stepRangeAcc) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s not found", self->stepRange); + grib_context_log(context_, GRIB_LOG_ERROR, "%s not found", stepRange_); return GRIB_NOT_FOUND; } - if ((ret = grib_get_string(grib_handle_of_accessor(a), self->stepType, stepType, &stepTypeLen)) != GRIB_SUCCESS) + if ((ret = grib_get_string(grib_handle_of_accessor(this), stepType_, stepType, &stepTypeLen)) != GRIB_SUCCESS) return ret; if (!strcmp(stepType, "instant")) @@ -49,20 +45,17 @@ int grib_accessor_class_mars_step_t::pack_string(grib_accessor* a, const char* v return stepRangeAcc->pack_string(buf, len); } -int grib_accessor_class_mars_step_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_mars_step_t::unpack_string(char* val, size_t* len) { - grib_accessor_mars_step_t* self = (grib_accessor_mars_step_t*)a; - int ret = 0; char buf[100] = {0,}; char* p = NULL; size_t buflen = 100; long step; - grib_accessor* stepRangeAcc = grib_find_accessor(grib_handle_of_accessor(a), self->stepRange); - const char* cclass_name = a->cclass->name; + grib_accessor* stepRangeAcc = grib_find_accessor(grib_handle_of_accessor(this), stepRange_); if (!stepRangeAcc) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: %s not found", cclass_name, self->stepRange); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: %s not found", class_name_, stepRange_); return GRIB_NOT_FOUND; } @@ -70,9 +63,9 @@ int grib_accessor_class_mars_step_t::unpack_string(grib_accessor* a, char* val, return ret; if (*len < buflen) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, buflen, *len); + class_name_, name_, buflen, *len); *len = buflen; return GRIB_BUFFER_TOO_SMALL; } @@ -88,20 +81,19 @@ int grib_accessor_class_mars_step_t::unpack_string(grib_accessor* a, char* val, return ret; } -int grib_accessor_class_mars_step_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_mars_step_t::pack_long(const long* val, size_t* len) { char buff[100] = {0,}; size_t bufflen = 100; snprintf(buff, sizeof(buff), "%ld", *val); - return pack_string(a, buff, &bufflen); + return pack_string(buff, &bufflen); } -int grib_accessor_class_mars_step_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_mars_step_t::unpack_long(long* val, size_t* len) { - grib_accessor_mars_step_t* self = (grib_accessor_mars_step_t*)a; - grib_accessor* stepRangeAcc = grib_find_accessor(grib_handle_of_accessor(a), self->stepRange); + grib_accessor* stepRangeAcc = grib_find_accessor(grib_handle_of_accessor(this), stepRange_); if (!stepRangeAcc) return GRIB_NOT_FOUND; @@ -109,18 +101,18 @@ int grib_accessor_class_mars_step_t::unpack_long(grib_accessor* a, long* val, si return stepRangeAcc->unpack_long(val, len); } -int grib_accessor_class_mars_step_t::value_count(grib_accessor* a, long* count) +int grib_accessor_mars_step_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_mars_step_t::string_length(grib_accessor* a) +size_t grib_accessor_mars_step_t::string_length() { return 16; } -int grib_accessor_class_mars_step_t::get_native_type(grib_accessor* a) +long grib_accessor_mars_step_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_mars_step.h b/src/accessor/grib_accessor_class_mars_step.h index 8a49f56a6..fe8912fcc 100644 --- a/src/accessor/grib_accessor_class_mars_step.h +++ b/src/accessor/grib_accessor_class_mars_step.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,22 +15,19 @@ class grib_accessor_mars_step_t : public grib_accessor_ascii_t { public: - /* Members defined in mars_step */ - const char* stepRange; - const char* stepType; -}; - -class grib_accessor_class_mars_step_t : public grib_accessor_class_ascii_t -{ -public: - grib_accessor_class_mars_step_t(const char* name) : grib_accessor_class_ascii_t(name) {} + grib_accessor_mars_step_t() : + grib_accessor_ascii_t() { class_name_ = "mars_step"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_mars_step_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* stepRange_ = nullptr; + const char* stepType_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_md5.cc b/src/accessor/grib_accessor_class_md5.cc index 40cbae672..8099f5f6f 100644 --- a/src/accessor/grib_accessor_class_md5.cc +++ b/src/accessor/grib_accessor_class_md5.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -12,27 +11,25 @@ #include "grib_accessor_class_md5.h" #include "md5.h" -grib_accessor_class_md5_t _grib_accessor_class_md5{ "md5" }; -grib_accessor_class* grib_accessor_class_md5 = &_grib_accessor_class_md5; +grib_accessor_md5_t _grib_accessor_md5{}; +grib_accessor* grib_accessor_md5 = &_grib_accessor_md5; - -void grib_accessor_class_md5_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_md5_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_accessor_md5_t* self = (grib_accessor_md5_t*)a; + grib_accessor_gen_t::init(len, arg); char* b = 0; int n = 0; grib_string_list* current = 0; - grib_context* context = a->context; + grib_context* context = context_; - self->offset = grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++); - self->length = grib_arguments_get_expression(grib_handle_of_accessor(a), arg, n++); - self->blocklist = NULL; - while ((b = (char*)grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++)) != NULL) { - if (!self->blocklist) { - self->blocklist = (grib_string_list*)grib_context_malloc_clear(context, sizeof(grib_string_list)); - self->blocklist->value = grib_context_strdup(context, b); - current = self->blocklist; + offset_key_ = grib_arguments_get_name(grib_handle_of_accessor(this), arg, n++); + length_key_ = grib_arguments_get_expression(grib_handle_of_accessor(this), arg, n++); + blocklist_ = NULL; + while ((b = (char*)grib_arguments_get_name(grib_handle_of_accessor(this), arg, n++)) != NULL) { + if (!blocklist_) { + blocklist_ = (grib_string_list*)grib_context_malloc_clear(context, sizeof(grib_string_list)); + blocklist_->value = grib_context_strdup(context, b); + current = blocklist_; } else { Assert(current); @@ -43,17 +40,18 @@ void grib_accessor_class_md5_t::init(grib_accessor* a, const long len, grib_argu } } } - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + + grib_accessor::length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; } -int grib_accessor_class_md5_t::get_native_type(grib_accessor* a) +long grib_accessor_md5_t::get_native_type() { return GRIB_TYPE_STRING; } -int grib_accessor_class_md5_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_md5_t::compare(grib_accessor* b) { int retval = GRIB_SUCCESS; @@ -62,7 +60,7 @@ int grib_accessor_class_md5_t::compare(grib_accessor* a, grib_accessor* b) int err = 0; long count = 0; - err = a->value_count(&count); + err = value_count(&count); if (err) return err; alen = count; @@ -78,50 +76,48 @@ int grib_accessor_class_md5_t::compare(grib_accessor* a, grib_accessor* b) return retval; } -int grib_accessor_class_md5_t::unpack_string(grib_accessor* a, char* v, size_t* len) +int grib_accessor_md5_t::unpack_string(char* v, size_t* len) { - grib_accessor_md5_t* self = (grib_accessor_md5_t*)a; unsigned mess_len; unsigned char* mess; unsigned char* p; long offset = 0, length = 0; grib_string_list* blocklist = NULL; - int ret = GRIB_SUCCESS; - long i = 0; + int ret = GRIB_SUCCESS; + long i = 0; struct grib_md5_state md5c; if (*len < 32) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %d bytes long (len=%zu)", - cclass_name, a->name, 32, *len); + class_name_, name_, 32, *len); *len = 32; return GRIB_BUFFER_TOO_SMALL; } - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offset, &offset)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), offset_key_, &offset)) != GRIB_SUCCESS) return ret; - if ((ret = grib_expression_evaluate_long(grib_handle_of_accessor(a), self->length, &length)) != GRIB_SUCCESS) + if ((ret = grib_expression_evaluate_long(grib_handle_of_accessor(this), length_key_, &length)) != GRIB_SUCCESS) return ret; - mess = (unsigned char*)grib_context_malloc(a->context, length); - memcpy(mess, grib_handle_of_accessor(a)->buffer->data + offset, length); + mess = (unsigned char*)grib_context_malloc(context_, length); + memcpy(mess, grib_handle_of_accessor(this)->buffer->data + offset, length); mess_len = length; - blocklist = a->context->blocklist; + blocklist = context_->blocklist; /* passed blocklist overrides context blocklist. Consider to modify following line to extend context blocklist. */ - if (self->blocklist) - blocklist = self->blocklist; + if (blocklist_) + blocklist = blocklist_; while (blocklist && blocklist->value) { - const grib_accessor* b = grib_find_accessor(grib_handle_of_accessor(a), blocklist->value); + const grib_accessor* b = grib_find_accessor(grib_handle_of_accessor(this), blocklist->value); if (!b) { - grib_context_free(a->context, mess); + grib_context_free(context_, mess); return GRIB_NOT_FOUND; } - p = mess + b->offset - offset; - for (i = 0; i < b->length; i++) + p = mess + b->offset_ - offset; + for (i = 0; i < b->length_; i++) *(p++) = 0; blocklist = blocklist->next; @@ -130,17 +126,16 @@ int grib_accessor_class_md5_t::unpack_string(grib_accessor* a, char* v, size_t* grib_md5_init(&md5c); grib_md5_add(&md5c, mess, mess_len); grib_md5_end(&md5c, v); - grib_context_free(a->context, mess); + grib_context_free(context_, mess); *len = strlen(v) + 1; return ret; } -void grib_accessor_class_md5_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_md5_t::destroy(grib_context* c) { - grib_accessor_md5_t* self = (grib_accessor_md5_t*)a; - if (self->blocklist) { - grib_string_list* next = self->blocklist; + if (blocklist_) { + grib_string_list* next = blocklist_; grib_string_list* cur = NULL; while (next) { cur = next; @@ -149,10 +144,10 @@ void grib_accessor_class_md5_t::destroy(grib_context* c, grib_accessor* a) grib_context_free(c, cur); } } - grib_accessor_class_gen_t::destroy(c, a); + grib_accessor_gen_t::destroy(c); } -int grib_accessor_class_md5_t::value_count(grib_accessor* a, long* count) +int grib_accessor_md5_t::value_count(long* count) { *count = 1; /* ECC-1475 */ return 0; diff --git a/src/accessor/grib_accessor_class_md5.h b/src/accessor/grib_accessor_class_md5.h index ae66f397f..e77ec513c 100644 --- a/src/accessor/grib_accessor_class_md5.h +++ b/src/accessor/grib_accessor_class_md5.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,21 +15,18 @@ class grib_accessor_md5_t : public grib_accessor_gen_t { public: - /* Members defined in md5 */ - const char* offset; - grib_expression* length; - grib_string_list* blocklist; -}; - -class grib_accessor_class_md5_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_md5_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_md5_t() : + grib_accessor_gen_t() { class_name_ = "md5"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_md5_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int compare(grib_accessor*, grib_accessor*) override; + long get_native_type() override; + int unpack_string(char*, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void init(const long, grib_arguments*) override; + int compare(grib_accessor*) override; + +private: + const char* offset_key_ = nullptr; + grib_expression* length_key_ = nullptr; + grib_string_list* blocklist_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_message.cc b/src/accessor/grib_accessor_class_message.cc index c49c5b20a..a8b7e1996 100644 --- a/src/accessor/grib_accessor_class_message.cc +++ b/src/accessor/grib_accessor_class_message.cc @@ -10,70 +10,69 @@ #include "grib_accessor_class_message.h" -grib_accessor_class_message_t _grib_accessor_class_message{ "message" }; -grib_accessor_class* grib_accessor_class_message = &_grib_accessor_class_message; +grib_accessor_message_t _grib_accessor_message{}; +grib_accessor* grib_accessor_message = &_grib_accessor_message; - -void grib_accessor_class_message_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_message_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_bytes_t::init(a, len, arg); - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length = grib_handle_of_accessor(a)->buffer->ulength - len - a->offset; + grib_accessor_bytes_t::init(len, arg); + flags_ |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + length_ = grib_handle_of_accessor(this)->buffer->ulength - len - offset_; } // static int compare(grib_accessor* a, grib_accessor* b) // { -// if (a->length != b->length) +// if (length_ != b->length) // return GRIB_COUNT_MISMATCH; // return GRIB_SUCCESS; // } -void grib_accessor_class_message_t::update_size(grib_accessor* a, size_t new_size) +void grib_accessor_message_t::update_size(size_t new_size) { - a->length = new_size; + length_ = new_size; } -void grib_accessor_class_message_t::resize(grib_accessor* a, size_t new_size) +void grib_accessor_message_t::resize(size_t new_size) { - grib_context_log(a->context, GRIB_LOG_FATAL, "%s %s: Not supported", a->cclass->name, __func__); + grib_context_log(context_, GRIB_LOG_FATAL, "%s %s: Not supported", class_name_, __func__); - // void* zero = grib_context_malloc_clear(a->context, new_size); + // void* zero = grib_context_malloc_clear(context_ , new_size); // grib_buffer_replace(a, (const unsigned char*)zero, new_size, 1, 0); - // grib_context_free(a->context, zero); - // grib_context_log(a->context, GRIB_LOG_DEBUG, "resize: grib_accessor_class_message %ld %ld %s %s", - // (long)new_size, (long)a->length, a->cclass->name, a->name); - // Assert(new_size == a->length); + // grib_context_free(context_ , zero); + // grib_context_log(context_ , GRIB_LOG_DEBUG, "resize: grib_accessor_message %ld %ld %s %s", + // (long)new_size, (long)a->length, a->cclass->name, name_ ); + // Assert(new_size == length_ ); } -int grib_accessor_class_message_t::value_count(grib_accessor* a, long* count) +int grib_accessor_message_t::value_count(long* count) { *count = 1; return 0; } -int grib_accessor_class_message_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_message_t::unpack_string(char* val, size_t* len) { long i = 0; - size_t l = string_length(a) + 1; - grib_handle* h = grib_handle_of_accessor(a); + size_t l = string_length() + 1; + grib_handle* h = grib_handle_of_accessor(this); if (*len < l) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - a->cclass->name, a->name, l, *len); + class_name_, name_, l, *len); *len = l; return GRIB_BUFFER_TOO_SMALL; } - for (i = 0; i < a->length; i++) - val[i] = h->buffer->data[a->offset + i]; + for (i = 0; i < length_; i++) + val[i] = h->buffer->data[offset_ + i]; val[i] = 0; *len = i; return GRIB_SUCCESS; } -size_t grib_accessor_class_message_t::string_length(grib_accessor* a) +size_t grib_accessor_message_t::string_length() { - return a->length; + return length_; } diff --git a/src/accessor/grib_accessor_class_message.h b/src/accessor/grib_accessor_class_message.h index 2e29d6ebd..70e2b51ac 100644 --- a/src/accessor/grib_accessor_class_message.h +++ b/src/accessor/grib_accessor_class_message.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,18 +15,13 @@ class grib_accessor_message_t : public grib_accessor_bytes_t { public: - /* Members defined in message */ -}; - -class grib_accessor_class_message_t : public grib_accessor_class_bytes_t -{ -public: - grib_accessor_class_message_t(const char* name) : grib_accessor_class_bytes_t(name) {} + grib_accessor_message_t() : + grib_accessor_bytes_t() { class_name_ = "message"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_message_t{}; } - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; - void resize(grib_accessor*,size_t) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + void resize(size_t) override; }; diff --git a/src/accessor/grib_accessor_class_message_copy.cc b/src/accessor/grib_accessor_class_message_copy.cc index 43b7fb42d..ca38698ba 100644 --- a/src/accessor/grib_accessor_class_message_copy.cc +++ b/src/accessor/grib_accessor_class_message_copy.cc @@ -10,42 +10,41 @@ #include "grib_accessor_class_message_copy.h" -grib_accessor_class_message_copy_t _grib_accessor_class_message_copy{ "message_copy" }; -grib_accessor_class* grib_accessor_class_message_copy = &_grib_accessor_class_message_copy; +grib_accessor_message_copy_t _grib_accessor_message_copy{}; +grib_accessor* grib_accessor_message_copy = &_grib_accessor_message_copy; - -void grib_accessor_class_message_copy_t::init(grib_accessor* a, const long length, grib_arguments* args) +void grib_accessor_message_copy_t::init(const long length, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, length, args); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length = 0; + grib_accessor_gen_t::init(length, args); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + length_ = 0; } -void grib_accessor_class_message_copy_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_message_copy_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } -int grib_accessor_class_message_copy_t::get_native_type(grib_accessor* a) +long grib_accessor_message_copy_t::get_native_type() { return GRIB_TYPE_STRING; } -int grib_accessor_class_message_copy_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_message_copy_t::unpack_string(char* val, size_t* len) { - size_t slen = grib_handle_of_accessor(a)->buffer->ulength; + size_t slen = grib_handle_of_accessor(this)->buffer->ulength; size_t i; unsigned char* v = 0; if (*len < slen) { return GRIB_ARRAY_TOO_SMALL; } - v = grib_handle_of_accessor(a)->buffer->data; + v = grib_handle_of_accessor(this)->buffer->data; /* replace unprintable characters with space */ for (i = 0; i < slen; i++) if (v[i] > 126) v[i] = 32; - memcpy(val, grib_handle_of_accessor(a)->buffer->data, slen); + memcpy(val, grib_handle_of_accessor(this)->buffer->data, slen); val[i] = 0; *len = slen; @@ -53,12 +52,12 @@ int grib_accessor_class_message_copy_t::unpack_string(grib_accessor* a, char* va return GRIB_SUCCESS; } -size_t grib_accessor_class_message_copy_t::string_length(grib_accessor* a) +size_t grib_accessor_message_copy_t::string_length() { - return grib_handle_of_accessor(a)->buffer->ulength; + return grib_handle_of_accessor(this)->buffer->ulength; } -long grib_accessor_class_message_copy_t::byte_count(grib_accessor* a) +long grib_accessor_message_copy_t::byte_count() { - return a->length; + return length_; } diff --git a/src/accessor/grib_accessor_class_message_copy.h b/src/accessor/grib_accessor_class_message_copy.h index 608817a93..920fab233 100644 --- a/src/accessor/grib_accessor_class_message_copy.h +++ b/src/accessor/grib_accessor_class_message_copy.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,18 +15,13 @@ class grib_accessor_message_copy_t : public grib_accessor_gen_t { public: - /* Members defined in message_copy */ -}; - -class grib_accessor_class_message_copy_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_message_copy_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_message_copy_t() : + grib_accessor_gen_t() { class_name_ = "message_copy"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_message_copy_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - long byte_count(grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + long byte_count() override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_multdouble.cc b/src/accessor/grib_accessor_class_multdouble.cc index c86539190..f610cbfc5 100644 --- a/src/accessor/grib_accessor_class_multdouble.cc +++ b/src/accessor/grib_accessor_class_multdouble.cc @@ -10,31 +10,28 @@ #include "grib_accessor_class_multdouble.h" -grib_accessor_class_multdouble_t _grib_accessor_class_multdouble{ "multdouble" }; -grib_accessor_class* grib_accessor_class_multdouble = &_grib_accessor_class_multdouble; +grib_accessor_multdouble_t _grib_accessor_multdouble{}; +grib_accessor* grib_accessor_multdouble = &_grib_accessor_multdouble; - -void grib_accessor_class_multdouble_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_multdouble_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_multdouble_t* self = (grib_accessor_multdouble_t*)a; + grib_accessor_double_t::init(l, c); int n = 0; - self->val = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->multiplier = grib_arguments_get_double(grib_handle_of_accessor(a), c, n++); + val_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + multiplier_ = grib_arguments_get_double(grib_handle_of_accessor(this), c, n++); } -int grib_accessor_class_multdouble_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_multdouble_t::unpack_double(double* val, size_t* len) { - const grib_accessor_multdouble_t* self = (grib_accessor_multdouble_t*)a; int ret = GRIB_SUCCESS; double value = 0; - ret = grib_get_double_internal(grib_handle_of_accessor(a), self->val, &value); + ret = grib_get_double_internal(grib_handle_of_accessor(this), val_, &value); if (ret != GRIB_SUCCESS) return ret; - *val = value * self->multiplier; + *val = value * multiplier_; *len = 1; return GRIB_SUCCESS; diff --git a/src/accessor/grib_accessor_class_multdouble.h b/src/accessor/grib_accessor_class_multdouble.h index 025daf903..be715df88 100644 --- a/src/accessor/grib_accessor_class_multdouble.h +++ b/src/accessor/grib_accessor_class_multdouble.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_multdouble_t : public grib_accessor_double_t { public: - /* Members defined in multdouble */ - const char* val; - double multiplier; -}; - -class grib_accessor_class_multdouble_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_multdouble_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_multdouble_t() : + grib_accessor_double_t() { class_name_ = "multdouble"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_multdouble_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* val_ = nullptr; + double multiplier_ = 0.; }; diff --git a/src/accessor/grib_accessor_class_nearest.cc b/src/accessor/grib_accessor_class_nearest.cc index a958c5092..f8d97d00a 100644 --- a/src/accessor/grib_accessor_class_nearest.cc +++ b/src/accessor/grib_accessor_class_nearest.cc @@ -10,38 +10,36 @@ #include "grib_accessor_class_nearest.h" -grib_accessor_class_nearest_t _grib_accessor_class_nearest{"nearest"}; -grib_accessor_class* grib_accessor_class_nearest = &_grib_accessor_class_nearest; +grib_accessor_nearest_t _grib_accessor_nearest{}; +grib_accessor* grib_accessor_nearest = &_grib_accessor_nearest; - -void grib_accessor_class_nearest_t::init(grib_accessor* a, const long l, grib_arguments* args) +void grib_accessor_nearest_t::init(const long l, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, l, args); - grib_accessor_nearest_t* self = (grib_accessor_nearest_t*)a; - self->args = args; + grib_accessor_gen_t::init(l, args); + args_ = args; } -void grib_accessor_class_nearest_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_nearest_t::dump(grib_dumper* dumper) { /* TODO: pass args */ - grib_dump_label(dumper, a, NULL); + grib_dump_label(dumper, this, NULL); } #if defined(HAVE_GEOGRAPHY) grib_nearest* grib_nearest_new(const grib_handle* ch, int* error) { - grib_handle* h = (grib_handle*)ch; - grib_accessor* a = NULL; + grib_handle* h = (grib_handle*)ch; + grib_accessor* a = NULL; grib_accessor_nearest_t* na = NULL; - grib_nearest* n = NULL; - *error = GRIB_NOT_IMPLEMENTED; - a = grib_find_accessor(h, "NEAREST"); - na = (grib_accessor_nearest_t*)a; + grib_nearest* n = NULL; + *error = GRIB_NOT_IMPLEMENTED; + a = grib_find_accessor(h, "NEAREST"); + na = (grib_accessor_nearest_t*)a; if (!a) return NULL; - n = grib_nearest_factory(h, na->args, error); + n = grib_nearest_factory(h, na->args_, error); if (n) *error = GRIB_SUCCESS; diff --git a/src/accessor/grib_accessor_class_nearest.h b/src/accessor/grib_accessor_class_nearest.h index 3ac4fdae2..9a012c349 100644 --- a/src/accessor/grib_accessor_class_nearest.h +++ b/src/accessor/grib_accessor_class_nearest.h @@ -15,17 +15,16 @@ class grib_accessor_nearest_t : public grib_accessor_gen_t { public: - grib_arguments* args; -}; - - -class grib_accessor_class_nearest_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_nearest_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_nearest_t() : + grib_accessor_gen_t() { class_name_ = "nearest"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_nearest_t{}; } - void init(grib_accessor* a, const long l, grib_arguments* args) override; - void dump(grib_accessor* a, grib_dumper* dumper) override; + void init(const long l, grib_arguments* args) override; + void dump(grib_dumper* dumper) override; + +private: + grib_arguments* args_ = nullptr; + + friend grib_nearest* grib_nearest_new(const grib_handle* ch, int* error); }; -//grib_nearest* grib_nearest_new(const grib_handle* ch, int* error); +// grib_nearest* grib_nearest_new(const grib_handle* ch, int* error); diff --git a/src/accessor/grib_accessor_class_non_alpha.cc b/src/accessor/grib_accessor_class_non_alpha.cc index 7e434dfb6..37ce3b795 100644 --- a/src/accessor/grib_accessor_class_non_alpha.cc +++ b/src/accessor/grib_accessor_class_non_alpha.cc @@ -10,76 +10,74 @@ #include "grib_accessor_class_non_alpha.h" -grib_accessor_class_non_alpha_t _grib_accessor_class_non_alpha{ "non_alpha" }; -grib_accessor_class* grib_accessor_class_non_alpha = &_grib_accessor_class_non_alpha; +grib_accessor_non_alpha_t _grib_accessor_non_alpha{}; +grib_accessor* grib_accessor_non_alpha = &_grib_accessor_non_alpha; - -void grib_accessor_class_non_alpha_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_non_alpha_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_buffer* buffer = grib_handle_of_accessor(a)->buffer; + grib_accessor_gen_t::init(len, arg); + const grib_buffer* buffer = grib_handle_of_accessor(this)->buffer; + unsigned char* v = buffer->data + offset_; size_t i = 0; - unsigned char* v; - - v = buffer->data + a->offset; - i = 0; while ((*v < 33 || *v > 126) && i <= buffer->ulength) { v++; i++; } - a->length = i; + length_ = i; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_non_alpha_t::value_count(grib_accessor* a, long* count) +int grib_accessor_non_alpha_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_non_alpha_t::string_length(grib_accessor* a) +size_t grib_accessor_non_alpha_t::string_length() { - return a->length; + return length_; } -void grib_accessor_class_non_alpha_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_non_alpha_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } -int grib_accessor_class_non_alpha_t::get_native_type(grib_accessor* a) +long grib_accessor_non_alpha_t::get_native_type() { return GRIB_TYPE_STRING; } -int grib_accessor_class_non_alpha_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_non_alpha_t::unpack_string(char* val, size_t* len) { - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); long i = 0; - if (*len < (a->length + 1)) { - grib_context_log(a->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%lu) for %s, it contains %ld values", - *len, a->name, a->length + 1); - *len = a->length + 1; + if (*len < (length_ + 1)) { + grib_context_log(context_, GRIB_LOG_ERROR, "unpack_string: Wrong size (%lu) for %s, it contains %ld values", + *len, name_, length_ + 1); + *len = length_ + 1; return GRIB_BUFFER_TOO_SMALL; } - for (i = 0; i < a->length; i++) { - val[i] = hand->buffer->data[a->offset + i]; + for (i = 0; i < length_; i++) { + val[i] = hand->buffer->data[offset_ + i]; } val[i] = 0; *len = i; return GRIB_SUCCESS; } -int grib_accessor_class_non_alpha_t::unpack_long(grib_accessor* a, long* v, size_t* len) +int grib_accessor_non_alpha_t::unpack_long(long* v, size_t* len) { - char val[1024] = {0,}; + char val[1024] = { + 0, + }; size_t l = sizeof(val); size_t i = 0; char* last = NULL; - int err = a->unpack_string(val, &l); + int err = unpack_string(val, &l); if (err) return err; @@ -99,12 +97,12 @@ int grib_accessor_class_non_alpha_t::unpack_long(grib_accessor* a, long* v, size return GRIB_SUCCESS; } -int grib_accessor_class_non_alpha_t::unpack_double(grib_accessor* a, double* v, size_t* len) +int grib_accessor_non_alpha_t::unpack_double(double* v, size_t* len) { char val[1024]; size_t l = sizeof(val); char* last = NULL; - a->unpack_string(val, &l); + unpack_string(val, &l); *v = strtod(val, &last); if (*last == 0) { @@ -114,7 +112,7 @@ int grib_accessor_class_non_alpha_t::unpack_double(grib_accessor* a, double* v, return GRIB_NOT_IMPLEMENTED; } -long grib_accessor_class_non_alpha_t::next_offset(grib_accessor* a) +long grib_accessor_non_alpha_t::next_offset() { - return a->offset + a->length; + return offset_ + length_; } diff --git a/src/accessor/grib_accessor_class_non_alpha.h b/src/accessor/grib_accessor_class_non_alpha.h index 83b1ca9ba..d1de79562 100644 --- a/src/accessor/grib_accessor_class_non_alpha.h +++ b/src/accessor/grib_accessor_class_non_alpha.h @@ -16,21 +16,16 @@ class grib_accessor_non_alpha_t : public grib_accessor_gen_t { public: - /* Members defined in non_alpha */ -}; - -class grib_accessor_class_non_alpha_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_non_alpha_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_non_alpha_t() : + grib_accessor_gen_t() { class_name_ = "non_alpha"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_non_alpha_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + long next_offset() override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_number_of_coded_values.cc b/src/accessor/grib_accessor_class_number_of_coded_values.cc index a4410d75d..4ca9d4c2b 100644 --- a/src/accessor/grib_accessor_class_number_of_coded_values.cc +++ b/src/accessor/grib_accessor_class_number_of_coded_values.cc @@ -10,56 +10,52 @@ #include "grib_accessor_class_number_of_coded_values.h" -grib_accessor_class_number_of_coded_values_t _grib_accessor_class_number_of_coded_values{ "number_of_coded_values" }; -grib_accessor_class* grib_accessor_class_number_of_coded_values = &_grib_accessor_class_number_of_coded_values; +grib_accessor_number_of_coded_values_t _grib_accessor_number_of_coded_values{}; +grib_accessor* grib_accessor_number_of_coded_values = &_grib_accessor_number_of_coded_values; - -void grib_accessor_class_number_of_coded_values_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_number_of_coded_values_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_number_of_coded_values_t* self = (grib_accessor_number_of_coded_values_t*)a; + grib_accessor_long_t::init(l, c); + grib_handle* h = grib_handle_of_accessor(this); - int n = 0; - self->bitsPerValue = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->offsetBeforeData = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->offsetAfterData = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->unusedBits = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->numberOfValues = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + int n = 0; + bitsPerValue_ = grib_arguments_get_name(h, c, n++); + offsetBeforeData_ = grib_arguments_get_name(h, c, n++); + offsetAfterData_ = grib_arguments_get_name(h, c, n++); + unusedBits_ = grib_arguments_get_name(h, c, n++); + numberOfValues_ = grib_arguments_get_name(h, c, n++); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -int grib_accessor_class_number_of_coded_values_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_number_of_coded_values_t::unpack_long(long* val, size_t* len) { - int ret = GRIB_SUCCESS; - long bpv = 0; - long offsetBeforeData = 0, offsetAfterData = 0, unusedBits = 0, numberOfValues; + int ret = GRIB_SUCCESS; + long bpv = 0, offsetBeforeData = 0, offsetAfterData = 0, unusedBits = 0, numberOfValues; + grib_handle* h = grib_handle_of_accessor(this); - grib_accessor_number_of_coded_values_t* self = (grib_accessor_number_of_coded_values_t*)a; - - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->bitsPerValue, &bpv)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, bitsPerValue_, &bpv)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetBeforeData, &offsetBeforeData)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, offsetBeforeData_, &offsetBeforeData)) != GRIB_SUCCESS) return ret; - - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetAfterData, &offsetAfterData)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, offsetAfterData_, &offsetAfterData)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->unusedBits, &unusedBits)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, unusedBits_, &unusedBits)) != GRIB_SUCCESS) return ret; if (bpv != 0) { - grib_context_log(a->context, GRIB_LOG_DEBUG, - "grib_accessor_number_of_coded_values_t: offsetAfterData=%ld offsetBeforeData=%ld unusedBits=%ld bpv=%ld\n", - offsetAfterData, offsetBeforeData, unusedBits, bpv); + grib_context_log(context_, GRIB_LOG_DEBUG, + "grib_accessor_number_of_coded_values_t: offsetAfterData=%ld offsetBeforeData=%ld unusedBits=%ld bpv=%ld", + offsetAfterData, offsetBeforeData, unusedBits, bpv); DEBUG_ASSERT(offsetAfterData > offsetBeforeData); *val = ((offsetAfterData - offsetBeforeData) * 8 - unusedBits) / bpv; } else { - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfValues, &numberOfValues)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, numberOfValues_, &numberOfValues)) != GRIB_SUCCESS) return ret; *val = numberOfValues; diff --git a/src/accessor/grib_accessor_class_number_of_coded_values.h b/src/accessor/grib_accessor_class_number_of_coded_values.h index 6578e1dcf..23504db1d 100644 --- a/src/accessor/grib_accessor_class_number_of_coded_values.h +++ b/src/accessor/grib_accessor_class_number_of_coded_values.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_number_of_coded_values_t : public grib_accessor_long_t { public: - /* Members defined in number_of_coded_values */ - const char* numberOfValues; - const char* bitsPerValue; - const char* offsetBeforeData; - const char* offsetAfterData; - const char* unusedBits; -}; - -class grib_accessor_class_number_of_coded_values_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_number_of_coded_values_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_number_of_coded_values_t() : + grib_accessor_long_t() { class_name_ = "number_of_coded_values"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_number_of_coded_values_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* numberOfValues_ = nullptr; + const char* bitsPerValue_ = nullptr; + const char* offsetBeforeData_ = nullptr; + const char* offsetAfterData_ = nullptr; + const char* unusedBits_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_number_of_points.cc b/src/accessor/grib_accessor_class_number_of_points.cc index 53fcf6fbe..3fae3d9f0 100644 --- a/src/accessor/grib_accessor_class_number_of_points.cc +++ b/src/accessor/grib_accessor_class_number_of_points.cc @@ -10,56 +10,51 @@ #include "grib_accessor_class_number_of_points.h" -grib_accessor_class_number_of_points_t _grib_accessor_class_number_of_points{ "number_of_points" }; -grib_accessor_class* grib_accessor_class_number_of_points = &_grib_accessor_class_number_of_points; +grib_accessor_number_of_points_t _grib_accessor_number_of_points{}; +grib_accessor* grib_accessor_number_of_points = &_grib_accessor_number_of_points; - -void grib_accessor_class_number_of_points_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_number_of_points_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - int n = 0; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_long_t::init(l, c); + int n = 0; + grib_handle* hand = grib_handle_of_accessor(this); - grib_accessor_number_of_points_t* self = (grib_accessor_number_of_points_t*)a; - - self->ni = grib_arguments_get_name(hand, c, n++); - self->nj = grib_arguments_get_name(hand, c, n++); - self->plpresent = grib_arguments_get_name(hand, c, n++); - self->pl = grib_arguments_get_name(hand, c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + ni_ = grib_arguments_get_name(hand, c, n++); + nj_ = grib_arguments_get_name(hand, c, n++); + plpresent_ = grib_arguments_get_name(hand, c, n++); + pl_ = grib_arguments_get_name(hand, c, n++); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -int grib_accessor_class_number_of_points_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_number_of_points_t::unpack_long(long* val, size_t* len) { - grib_accessor_number_of_points_t* self = (grib_accessor_number_of_points_t*)a; - int ret = GRIB_SUCCESS; long ni = 0, nj = 0, plpresent = 0; size_t plsize = 0; long* pl = NULL; int i = 0; - grib_context* c = a->context; - grib_handle* hand = grib_handle_of_accessor(a); + grib_context* c = context_; + grib_handle* hand = grib_handle_of_accessor(this); - if ((ret = grib_get_long_internal(hand, self->ni, &ni)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, ni_, &ni)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->nj, &nj)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, nj_, &nj)) != GRIB_SUCCESS) return ret; - if (self->plpresent && - ((ret = grib_get_long_internal(hand, self->plpresent, &plpresent)) != GRIB_SUCCESS)) + if (plpresent_ && + ((ret = grib_get_long_internal(hand, plpresent_, &plpresent)) != GRIB_SUCCESS)) return ret; - if (grib_is_missing(hand, self->nj, &ret) && ret == GRIB_SUCCESS) { - grib_context_log(c, GRIB_LOG_ERROR, "grib_accessor_class_number_of_points: Key %s cannot be 'missing'!", self->nj); + if (grib_is_missing(hand, nj_, &ret) && ret == GRIB_SUCCESS) { + grib_context_log(c, GRIB_LOG_ERROR, "grib_accessor_number_of_points: Key %s cannot be 'missing'!", nj_); return GRIB_GEOCALCULUS_PROBLEM; } if (nj == 0) { - grib_context_log(c, GRIB_LOG_ERROR, "grib_accessor_class_number_of_points: Key %s cannot be 0!", self->nj); + grib_context_log(c, GRIB_LOG_ERROR, "grib_accessor_number_of_points: Key %s cannot be 0!", nj_); return GRIB_GEOCALCULUS_PROBLEM; } @@ -67,7 +62,7 @@ int grib_accessor_class_number_of_points_t::unpack_long(grib_accessor* a, long* /*reduced*/ plsize = nj; pl = (long*)grib_context_malloc(c, sizeof(long) * plsize); - grib_get_long_array_internal(hand, self->pl, pl, &plsize); + grib_get_long_array_internal(hand, pl_, pl, &plsize); *val = 0; for (i = 0; i < plsize; i++) *val += pl[i]; diff --git a/src/accessor/grib_accessor_class_number_of_points.h b/src/accessor/grib_accessor_class_number_of_points.h index f55d9bbeb..3233bbf5b 100644 --- a/src/accessor/grib_accessor_class_number_of_points.h +++ b/src/accessor/grib_accessor_class_number_of_points.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,18 +15,15 @@ class grib_accessor_number_of_points_t : public grib_accessor_long_t { public: - /* Members defined in number_of_points */ - const char* ni; - const char* nj; - const char* plpresent; - const char* pl; -}; - -class grib_accessor_class_number_of_points_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_number_of_points_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_number_of_points_t() : + grib_accessor_long_t() { class_name_ = "number_of_points"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_number_of_points_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* ni_ = nullptr; + const char* nj_ = nullptr; + const char* plpresent_ = nullptr; + const char* pl_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_number_of_points_gaussian.cc b/src/accessor/grib_accessor_class_number_of_points_gaussian.cc index cf8fa8db0..73a5e17a6 100644 --- a/src/accessor/grib_accessor_class_number_of_points_gaussian.cc +++ b/src/accessor/grib_accessor_class_number_of_points_gaussian.cc @@ -10,36 +10,34 @@ #include "grib_accessor_class_number_of_points_gaussian.h" -grib_accessor_class_number_of_points_gaussian_t _grib_accessor_class_number_of_points_gaussian{ "number_of_points_gaussian" }; -grib_accessor_class* grib_accessor_class_number_of_points_gaussian = &_grib_accessor_class_number_of_points_gaussian; - +grib_accessor_number_of_points_gaussian_t _grib_accessor_number_of_points_gaussian{}; +grib_accessor* grib_accessor_number_of_points_gaussian = &_grib_accessor_number_of_points_gaussian; #define EFDEBUG 0 -void grib_accessor_class_number_of_points_gaussian_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_number_of_points_gaussian_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - int n = 0; - grib_handle* h = grib_handle_of_accessor(a); - grib_accessor_number_of_points_gaussian_t* self = (grib_accessor_number_of_points_gaussian_t*)a; + grib_accessor_long_t::init(l, c); + int n = 0; + grib_handle* h = grib_handle_of_accessor(this); - self->ni = grib_arguments_get_name(h, c, n++); - self->nj = grib_arguments_get_name(h, c, n++); - self->plpresent = grib_arguments_get_name(h, c, n++); - self->pl = grib_arguments_get_name(h, c, n++); - self->order = grib_arguments_get_name(h, c, n++); - self->lat_first = grib_arguments_get_name(h, c, n++); - self->lon_first = grib_arguments_get_name(h, c, n++); - self->lat_last = grib_arguments_get_name(h, c, n++); - self->lon_last = grib_arguments_get_name(h, c, n++); - self->support_legacy = grib_arguments_get_name(h, c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + ni_ = grib_arguments_get_name(h, c, n++); + nj_ = grib_arguments_get_name(h, c, n++); + plpresent_ = grib_arguments_get_name(h, c, n++); + pl_ = grib_arguments_get_name(h, c, n++); + order_ = grib_arguments_get_name(h, c, n++); + lat_first_ = grib_arguments_get_name(h, c, n++); + lon_first_ = grib_arguments_get_name(h, c, n++); + lat_last_ = grib_arguments_get_name(h, c, n++); + lon_last_ = grib_arguments_get_name(h, c, n++); + support_legacy_ = grib_arguments_get_name(h, c, n++); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } // Old implementation of num_points_reduced_gauss_old -// See src/deprecated/grib_accessor_class_number_of_points_gaussian.cc +// See src/deprecated/grib_accessor_number_of_points_gaussian.cc // static int angleApproximatelyEqual(double A, double B, double angular_precision) { @@ -111,30 +109,26 @@ static int get_number_of_data_values(grib_handle* h, size_t* numDataValues) return err; } -static int unpack_long_with_legacy_support(grib_accessor* a, long* val, size_t* len); -static int unpack_long_new(grib_accessor* a, long* val, size_t* len); - -int grib_accessor_class_number_of_points_gaussian_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_number_of_points_gaussian_t::unpack_long(long* val, size_t* len) { - int err = GRIB_SUCCESS; - long support_legacy = 1; - grib_accessor_number_of_points_gaussian_t* self = (grib_accessor_number_of_points_gaussian_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + int err = GRIB_SUCCESS; + long support_legacy = 1; + grib_handle* h = grib_handle_of_accessor(this); - if ((err = grib_get_long_internal(h, self->support_legacy, &support_legacy)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, support_legacy_, &support_legacy)) != GRIB_SUCCESS) return err; if (support_legacy == 1) - return unpack_long_with_legacy_support(a, val, len); + return unpack_long_with_legacy_support(val, len); else - return unpack_long_new(a, val, len); + return unpack_long_new(val, len); } /* New algorithm */ -static int unpack_long_new(grib_accessor* a, long* val, size_t* len) +int grib_accessor_number_of_points_gaussian_t::unpack_long_new(long* val, size_t* len) { - int err = GRIB_SUCCESS; - int is_global = 0; + int err = GRIB_SUCCESS; + int is_global = 0; long ni = 0, nj = 0, plpresent = 0, order = 0; size_t plsize = 0; double lat_first, lat_last, lon_first, lon_last; @@ -144,18 +138,17 @@ static int unpack_long_new(grib_accessor* a, long* val, size_t* len) long ilon_first = 0, ilon_last = 0; double angular_precision = 1.0 / 1000000.0; long angleSubdivisions = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); - grib_accessor_number_of_points_gaussian_t* self = (grib_accessor_number_of_points_gaussian_t*)a; - grib_context* c = a->context; + grib_context* c = context_; - if ((err = grib_get_long_internal(h, self->ni, &ni)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, ni_, &ni)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(h, self->nj, &nj)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, nj_, &nj)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(h, self->plpresent, &plpresent)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, plpresent_, &plpresent)) != GRIB_SUCCESS) return err; if (nj == 0) @@ -172,23 +165,23 @@ static int unpack_long_new(grib_accessor* a, long* val, size_t* len) // double lon_first_row = 0, lon_last_row = 0; /*reduced*/ - if ((err = grib_get_long_internal(h, self->order, &order)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, order_, &order)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(h, self->lat_first, &lat_first)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(h, lat_first_, &lat_first)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(h, self->lon_first, &lon_first)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(h, lon_first_, &lon_first)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(h, self->lat_last, &lat_last)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(h, lat_last_, &lat_last)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(h, self->lon_last, &lon_last)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(h, lon_last_, &lon_last)) != GRIB_SUCCESS) return err; - if ((err = grib_get_size(h, self->pl, &plsize)) != GRIB_SUCCESS) + if ((err = grib_get_size(h, pl_, &plsize)) != GRIB_SUCCESS) return err; pl = (long*)grib_context_malloc_clear(c, sizeof(long) * plsize); plsave = pl; - grib_get_long_array_internal(h, self->pl, pl, &plsize); + grib_get_long_array_internal(h, pl_, pl, &plsize); if (lon_last < 0) lon_last += 360; @@ -240,10 +233,10 @@ static int unpack_long_new(grib_accessor* a, long* val, size_t* len) } /* With Legacy support */ -static int unpack_long_with_legacy_support(grib_accessor* a, long* val, size_t* len) +int grib_accessor_number_of_points_gaussian_t::unpack_long_with_legacy_support(long* val, size_t* len) { - int err = GRIB_SUCCESS; - int is_global = 0; + int err = GRIB_SUCCESS; + int is_global = 0; long ni = 0, nj = 0, plpresent = 0, order = 0; size_t plsize = 0; double lat_first, lat_last, lon_first, lon_last; @@ -253,19 +246,18 @@ static int unpack_long_with_legacy_support(grib_accessor* a, long* val, size_t* long ilon_first = 0, ilon_last = 0; double angular_precision = 1.0 / 1000000.0; long angleSubdivisions = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); size_t numDataValues = 0; - grib_accessor_number_of_points_gaussian_t* self = (grib_accessor_number_of_points_gaussian_t*)a; - grib_context* c = a->context; + grib_context* c = context_; - if ((err = grib_get_long_internal(h, self->ni, &ni)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, ni_, &ni)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(h, self->nj, &nj)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, nj_, &nj)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(h, self->plpresent, &plpresent)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, plpresent_, &plpresent)) != GRIB_SUCCESS) return err; if (nj == 0) @@ -282,23 +274,23 @@ static int unpack_long_with_legacy_support(grib_accessor* a, long* val, size_t* // double lon_first_row = 0, lon_last_row = 0; /*reduced*/ - if ((err = grib_get_long_internal(h, self->order, &order)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, order_, &order)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(h, self->lat_first, &lat_first)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(h, lat_first_, &lat_first)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(h, self->lon_first, &lon_first)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(h, lon_first_, &lon_first)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(h, self->lat_last, &lat_last)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(h, lat_last_, &lat_last)) != GRIB_SUCCESS) return err; - if ((err = grib_get_double_internal(h, self->lon_last, &lon_last)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(h, lon_last_, &lon_last)) != GRIB_SUCCESS) return err; - if ((err = grib_get_size(h, self->pl, &plsize)) != GRIB_SUCCESS) + if ((err = grib_get_size(h, pl_, &plsize)) != GRIB_SUCCESS) return err; pl = (long*)grib_context_malloc_clear(c, sizeof(long) * plsize); plsave = pl; - grib_get_long_array_internal(h, self->pl, pl, &plsize); + grib_get_long_array_internal(h, pl_, pl, &plsize); if (lon_last < 0) lon_last += 360; diff --git a/src/accessor/grib_accessor_class_number_of_points_gaussian.h b/src/accessor/grib_accessor_class_number_of_points_gaussian.h index d00fb5b6e..fcad5d273 100644 --- a/src/accessor/grib_accessor_class_number_of_points_gaussian.h +++ b/src/accessor/grib_accessor_class_number_of_points_gaussian.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,24 +15,24 @@ class grib_accessor_number_of_points_gaussian_t : public grib_accessor_long_t { public: - /* Members defined in number_of_points_gaussian */ - const char* ni; - const char* nj; - const char* plpresent; - const char* pl; - const char* order; - const char* lat_first; - const char* lon_first; - const char* lat_last; - const char* lon_last; - const char* support_legacy; -}; - -class grib_accessor_class_number_of_points_gaussian_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_number_of_points_gaussian_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_number_of_points_gaussian_t() : + grib_accessor_long_t() { class_name_ = "number_of_points_gaussian"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_number_of_points_gaussian_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* ni_ = nullptr; + const char* nj_ = nullptr; + const char* plpresent_ = nullptr; + const char* pl_ = nullptr; + const char* order_ = nullptr; + const char* lat_first_ = nullptr; + const char* lon_first_ = nullptr; + const char* lat_last_ = nullptr; + const char* lon_last_ = nullptr; + const char* support_legacy_ = nullptr; + + int unpack_long_new(long* val, size_t* len); + int unpack_long_with_legacy_support(long* val, size_t* len); }; diff --git a/src/accessor/grib_accessor_class_number_of_values.cc b/src/accessor/grib_accessor_class_number_of_values.cc index 80cd39f85..6456d3ffe 100644 --- a/src/accessor/grib_accessor_class_number_of_values.cc +++ b/src/accessor/grib_accessor_class_number_of_values.cc @@ -10,46 +10,44 @@ #include "grib_accessor_class_number_of_values.h" -grib_accessor_class_number_of_values_t _grib_accessor_class_number_of_values{ "number_of_values" }; -grib_accessor_class* grib_accessor_class_number_of_values = &_grib_accessor_class_number_of_values; +grib_accessor_number_of_values_t _grib_accessor_number_of_values{}; +grib_accessor* grib_accessor_number_of_values = &_grib_accessor_number_of_values; - -void grib_accessor_class_number_of_values_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_number_of_values_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - int n = 0; - grib_accessor_number_of_values_t* self = (grib_accessor_number_of_values_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_long_t::init(l, c); + int n = 0; + grib_handle* hand = grib_handle_of_accessor(this); - self->values = grib_arguments_get_name(hand, c, n++); - self->bitsPerValue = grib_arguments_get_name(hand, c, n++); - self->numberOfPoints = grib_arguments_get_name(hand, c, n++); - self->bitmapPresent = grib_arguments_get_name(hand, c, n++); - self->bitmap = grib_arguments_get_name(hand, c, n++); - self->numberOfCodedValues = grib_arguments_get_name(hand, c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + values_ = grib_arguments_get_name(hand, c, n++); + bitsPerValue_ = grib_arguments_get_name(hand, c, n++); + numberOfPoints_ = grib_arguments_get_name(hand, c, n++); + bitmapPresent_ = grib_arguments_get_name(hand, c, n++); + bitmap_ = grib_arguments_get_name(hand, c, n++); + numberOfCodedValues_ = grib_arguments_get_name(hand, c, n++); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length = 0; + length_ = 0; } -int grib_accessor_class_number_of_values_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_number_of_values_t::unpack_long(long* val, size_t* len) { - grib_accessor_number_of_values_t* self = (grib_accessor_number_of_values_t*)a; - int ret = GRIB_SUCCESS; + int ret = GRIB_SUCCESS; long npoints = 0, bitmap_present = 0; size_t size = 0; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints, &npoints)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), numberOfPoints_, &npoints)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->bitmapPresent, &bitmap_present)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), bitmapPresent_, &bitmap_present)) != GRIB_SUCCESS) return ret; if (bitmap_present) { - size = npoints; - double* bitmap = (double*)grib_context_malloc(a->context, sizeof(double) * size); - if ((ret = grib_get_double_array_internal(grib_handle_of_accessor(a), self->bitmap, bitmap, &size)) != GRIB_SUCCESS) { - grib_context_free(a->context, bitmap); + double* bitmap; + size = npoints; + bitmap = (double*)grib_context_malloc(context_, sizeof(double) * size); + if ((ret = grib_get_double_array_internal(grib_handle_of_accessor(this), bitmap_, bitmap, &size)) != GRIB_SUCCESS) { + grib_context_free(context_, bitmap); return ret; } *val = 0; @@ -59,7 +57,7 @@ int grib_accessor_class_number_of_values_t::unpack_long(grib_accessor* a, long* } } - grib_context_free(a->context, bitmap); + grib_context_free(context_, bitmap); } else { *val = npoints; diff --git a/src/accessor/grib_accessor_class_number_of_values.h b/src/accessor/grib_accessor_class_number_of_values.h index 895669f34..7f0ed5b65 100644 --- a/src/accessor/grib_accessor_class_number_of_values.h +++ b/src/accessor/grib_accessor_class_number_of_values.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,20 +15,17 @@ class grib_accessor_number_of_values_t : public grib_accessor_long_t { public: - /* Members defined in number_of_values */ - const char* values; - const char* bitsPerValue; - const char* numberOfPoints; - const char* bitmapPresent; - const char* bitmap; - const char* numberOfCodedValues; -}; - -class grib_accessor_class_number_of_values_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_number_of_values_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_number_of_values_t() : + grib_accessor_long_t() { class_name_ = "number_of_values"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_number_of_values_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; + const char* bitsPerValue_ = nullptr; + const char* numberOfPoints_ = nullptr; + const char* bitmapPresent_ = nullptr; + const char* bitmap_ = nullptr; + const char* numberOfCodedValues_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_number_of_values_data_raw_packing.cc b/src/accessor/grib_accessor_class_number_of_values_data_raw_packing.cc index c443e7c24..e76eb4197 100644 --- a/src/accessor/grib_accessor_class_number_of_values_data_raw_packing.cc +++ b/src/accessor/grib_accessor_class_number_of_values_data_raw_packing.cc @@ -10,36 +10,32 @@ #include "grib_accessor_class_number_of_values_data_raw_packing.h" -grib_accessor_class_number_of_values_data_raw_packing_t _grib_accessor_class_number_of_values_data_raw_packing{ "number_of_values_data_raw_packing" }; -grib_accessor_class* grib_accessor_class_number_of_values_data_raw_packing = &_grib_accessor_class_number_of_values_data_raw_packing; +grib_accessor_number_of_values_data_raw_packing_t _grib_accessor_number_of_values_data_raw_packing{}; +grib_accessor* grib_accessor_number_of_values_data_raw_packing = &_grib_accessor_number_of_values_data_raw_packing; - -void grib_accessor_class_number_of_values_data_raw_packing_t::init(grib_accessor* a, const long v, grib_arguments* args) +void grib_accessor_number_of_values_data_raw_packing_t::init(const long v, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, v, args); - grib_accessor_number_of_values_data_raw_packing_t* self = (grib_accessor_number_of_values_data_raw_packing_t*)a; - + grib_accessor_gen_t::init(v, args); int n = 0; - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->precision = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length = 0; + + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + precision_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + length_ = 0; } -int grib_accessor_class_number_of_values_data_raw_packing_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_number_of_values_data_raw_packing_t::unpack_long(long* val, size_t* len) { - grib_accessor_number_of_values_data_raw_packing_t* self = (grib_accessor_number_of_values_data_raw_packing_t*)a; - int err = 0; grib_accessor* adata = NULL; long precision = 0; int bytes = 0; long byte_count = 0; - adata = grib_find_accessor(grib_handle_of_accessor(a), self->values); + adata = grib_find_accessor(grib_handle_of_accessor(this), values_); Assert(adata != NULL); byte_count = adata->byte_count(); - if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->precision, &precision)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(grib_handle_of_accessor(this), precision_, &precision)) != GRIB_SUCCESS) return err; switch (precision) { @@ -60,7 +56,7 @@ int grib_accessor_class_number_of_values_data_raw_packing_t::unpack_long(grib_ac return err; } -int grib_accessor_class_number_of_values_data_raw_packing_t::get_native_type(grib_accessor* a) +long grib_accessor_number_of_values_data_raw_packing_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_number_of_values_data_raw_packing.h b/src/accessor/grib_accessor_class_number_of_values_data_raw_packing.h index 798f428f5..0cfcf6471 100644 --- a/src/accessor/grib_accessor_class_number_of_values_data_raw_packing.h +++ b/src/accessor/grib_accessor_class_number_of_values_data_raw_packing.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,14 @@ class grib_accessor_number_of_values_data_raw_packing_t : public grib_accessor_gen_t { public: - /* Members defined in number_of_values_data_raw_packing */ - const char* values; - const char* precision; -}; - -class grib_accessor_class_number_of_values_data_raw_packing_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_number_of_values_data_raw_packing_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_number_of_values_data_raw_packing_t() : + grib_accessor_gen_t() { class_name_ = "number_of_values_data_raw_packing"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_number_of_values_data_raw_packing_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; + const char* precision_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_octahedral_gaussian.cc b/src/accessor/grib_accessor_class_octahedral_gaussian.cc index 69074bef3..bffe8b1b0 100644 --- a/src/accessor/grib_accessor_class_octahedral_gaussian.cc +++ b/src/accessor/grib_accessor_class_octahedral_gaussian.cc @@ -10,21 +10,19 @@ #include "grib_accessor_class_octahedral_gaussian.h" -grib_accessor_class_octahedral_gaussian_t _grib_accessor_class_octahedral_gaussian{ "octahedral_gaussian" }; -grib_accessor_class* grib_accessor_class_octahedral_gaussian = &_grib_accessor_class_octahedral_gaussian; +grib_accessor_octahedral_gaussian_t _grib_accessor_octahedral_gaussian{}; +grib_accessor* grib_accessor_octahedral_gaussian = &_grib_accessor_octahedral_gaussian; - -void grib_accessor_class_octahedral_gaussian_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_octahedral_gaussian_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_octahedral_gaussian_t* self = (grib_accessor_octahedral_gaussian_t*)a; - int n = 0; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_long_t::init(l, c); + int n = 0; + grib_handle* hand = grib_handle_of_accessor(this); - self->N = grib_arguments_get_name(hand, c, n++); - self->Ni = grib_arguments_get_name(hand, c, n++); - self->plpresent = grib_arguments_get_name(hand, c, n++); - self->pl = grib_arguments_get_name(hand, c, n++); + N_ = grib_arguments_get_name(hand, c, n++); + Ni_ = grib_arguments_get_name(hand, c, n++); + plpresent_ = grib_arguments_get_name(hand, c, n++); + pl_ = grib_arguments_get_name(hand, c, n++); } /* Returns 1 (=true) if input pl array is Octahedral, 0 otherwise. @@ -70,19 +68,18 @@ static int is_pl_octahedral(const long pl[], size_t size) return 1; /* it's octahedral */ } -int grib_accessor_class_octahedral_gaussian_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_octahedral_gaussian_t::unpack_long(long* val, size_t* len) { - grib_accessor_octahedral_gaussian_t* self = (grib_accessor_octahedral_gaussian_t*)a; int ret = GRIB_SUCCESS; long Ni; long plpresent = 0; long* pl = NULL; /* pl array */ size_t plsize = 0; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); - grib_context* c = a->context; + grib_context* c = context_; - if ((ret = grib_get_long_internal(hand, self->Ni, &Ni)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, Ni_, &Ni)) != GRIB_SUCCESS) return ret; /* If Ni is not missing, then this is a plain gaussian grid and not reduced. */ @@ -92,14 +89,14 @@ int grib_accessor_class_octahedral_gaussian_t::unpack_long(grib_accessor* a, lon return GRIB_SUCCESS; } - if ((ret = grib_get_long_internal(hand, self->plpresent, &plpresent)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, plpresent_, &plpresent)) != GRIB_SUCCESS) return ret; if (!plpresent) { *val = 0; /* Not octahedral */ return GRIB_SUCCESS; } - if ((ret = grib_get_size(hand, self->pl, &plsize)) != GRIB_SUCCESS) + if ((ret = grib_get_size(hand, pl_, &plsize)) != GRIB_SUCCESS) return ret; Assert(plsize); /* pl array must have at least one element */ @@ -107,7 +104,7 @@ int grib_accessor_class_octahedral_gaussian_t::unpack_long(grib_accessor* a, lon if (!pl) { return GRIB_OUT_OF_MEMORY; } - if ((ret = grib_get_long_array_internal(hand, self->pl, pl, &plsize)) != GRIB_SUCCESS) + if ((ret = grib_get_long_array_internal(hand, pl_, pl, &plsize)) != GRIB_SUCCESS) return ret; /* pl[0] is guaranteed to exist. Have already asserted previously */ @@ -117,7 +114,7 @@ int grib_accessor_class_octahedral_gaussian_t::unpack_long(grib_accessor* a, lon return ret; } -int grib_accessor_class_octahedral_gaussian_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_octahedral_gaussian_t::pack_long(const long* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } diff --git a/src/accessor/grib_accessor_class_octahedral_gaussian.h b/src/accessor/grib_accessor_class_octahedral_gaussian.h index cc7f52a25..96b88ba44 100644 --- a/src/accessor/grib_accessor_class_octahedral_gaussian.h +++ b/src/accessor/grib_accessor_class_octahedral_gaussian.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_octahedral_gaussian_t : public grib_accessor_long_t { public: - /* Members defined in octahedral_gaussian */ - const char* N; - const char* Ni; - const char* plpresent; - const char* pl; -}; - -class grib_accessor_class_octahedral_gaussian_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_octahedral_gaussian_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_octahedral_gaussian_t() : + grib_accessor_long_t() { class_name_ = "octahedral_gaussian"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_octahedral_gaussian_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* N_ = nullptr; + const char* Ni_ = nullptr; + const char* plpresent_ = nullptr; + const char* pl_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_octet_number.cc b/src/accessor/grib_accessor_class_octet_number.cc index 354a39820..e54117420 100644 --- a/src/accessor/grib_accessor_class_octet_number.cc +++ b/src/accessor/grib_accessor_class_octet_number.cc @@ -10,29 +10,28 @@ #include "grib_accessor_class_octet_number.h" -grib_accessor_class_octet_number_t _grib_accessor_class_octet_number{ "octet_number" }; -grib_accessor_class* grib_accessor_class_octet_number = &_grib_accessor_class_octet_number; +grib_accessor_octet_number_t _grib_accessor_octet_number{}; +grib_accessor* grib_accessor_octet_number = &_grib_accessor_octet_number; - -void grib_accessor_class_octet_number_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_octet_number_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_octet_number_t* self = (grib_accessor_octet_number_t*)a; + grib_accessor_long_t::init(l, c); - int n = 0; - self->left = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->right = grib_arguments_get_long(grib_handle_of_accessor(a), c, n++); + int n = 0; + left_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + right_ = grib_arguments_get_long(grib_handle_of_accessor(this), c, n++); - a->length = 0; + length_ = 0; } -int grib_accessor_class_octet_number_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_octet_number_t::unpack_long(long* val, size_t* len) { - grib_accessor_octet_number_t* self = (grib_accessor_octet_number_t*)a; int ret = GRIB_SUCCESS; - long offset = a->offset + self->right; + long offset; - if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->left, offset)) != GRIB_SUCCESS) + offset = offset_ + right_; + + if ((ret = grib_set_long_internal(grib_handle_of_accessor(this), left_, offset)) != GRIB_SUCCESS) return ret; *val = offset; @@ -41,7 +40,7 @@ int grib_accessor_class_octet_number_t::unpack_long(grib_accessor* a, long* val, return ret; } -int grib_accessor_class_octet_number_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_octet_number_t::pack_long(const long* val, size_t* len) { return GRIB_SUCCESS; } diff --git a/src/accessor/grib_accessor_class_octet_number.h b/src/accessor/grib_accessor_class_octet_number.h index 691dcb564..084bfeebe 100644 --- a/src/accessor/grib_accessor_class_octet_number.h +++ b/src/accessor/grib_accessor_class_octet_number.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,14 @@ class grib_accessor_octet_number_t : public grib_accessor_long_t { public: - /* Members defined in octet_number */ - const char* left; - long right; -}; - -class grib_accessor_class_octet_number_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_octet_number_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_octet_number_t() : + grib_accessor_long_t() { class_name_ = "octet_number"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_octet_number_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* left_ = nullptr; + long right_ = 0; }; diff --git a/src/accessor/grib_accessor_class_offset_file.cc b/src/accessor/grib_accessor_class_offset_file.cc index 8c06bfb78..8be03b020 100644 --- a/src/accessor/grib_accessor_class_offset_file.cc +++ b/src/accessor/grib_accessor_class_offset_file.cc @@ -10,46 +10,44 @@ #include "grib_accessor_class_offset_file.h" -grib_accessor_class_offset_file_t _grib_accessor_class_offset_file{ "offset_file" }; -grib_accessor_class* grib_accessor_class_offset_file = &_grib_accessor_class_offset_file; +grib_accessor_offset_file_t _grib_accessor_offset_file{}; +grib_accessor* grib_accessor_offset_file = &_grib_accessor_offset_file; - -void grib_accessor_class_offset_file_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_offset_file_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length = 0; + grib_accessor_double_t::init(l, c); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + length_ = 0; } -int grib_accessor_class_offset_file_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_offset_file_t::unpack_double(double* val, size_t* len) { - *val = (double)grib_handle_of_accessor(a)->offset; + *val = (double)grib_handle_of_accessor(this)->offset; *len = 1; return GRIB_SUCCESS; } -int grib_accessor_class_offset_file_t::unpack_string(grib_accessor* a, char* v, size_t* len) +int grib_accessor_offset_file_t::unpack_string(char* v, size_t* len) { - double val = 0; - size_t l = 1; + double val = 0; + size_t l = 1; char repres[1024] = {0,}; int err = 0; - const char* cclass_name = a->cclass->name; - err = a->unpack_double(&val, &l); + err = unpack_double(&val, &l); if (err) return err; snprintf(repres, sizeof(repres), "%.0f", val); l = strlen(repres) + 1; if (l > *len) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, l, *len); + class_name_, name_, l, *len); *len = l; return GRIB_BUFFER_TOO_SMALL; } - grib_context_log(a->context, GRIB_LOG_DEBUG, "%s: Casting double %s to string", __func__, a->name); + grib_context_log(context_, GRIB_LOG_DEBUG, "%s: Casting double %s to string", __func__, name_); *len = l; diff --git a/src/accessor/grib_accessor_class_offset_file.h b/src/accessor/grib_accessor_class_offset_file.h index 6cb25b864..8a0a1a3c4 100644 --- a/src/accessor/grib_accessor_class_offset_file.h +++ b/src/accessor/grib_accessor_class_offset_file.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,15 +15,10 @@ class grib_accessor_offset_file_t : public grib_accessor_double_t { public: - /* Members defined in offset_file */ -}; - -class grib_accessor_class_offset_file_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_offset_file_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_offset_file_t() : + grib_accessor_double_t() { class_name_ = "offset_file"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_offset_file_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_offset_values.cc b/src/accessor/grib_accessor_class_offset_values.cc index 1219d0030..a2f94d8c5 100644 --- a/src/accessor/grib_accessor_class_offset_values.cc +++ b/src/accessor/grib_accessor_class_offset_values.cc @@ -10,22 +10,20 @@ #include "grib_accessor_class_offset_values.h" -grib_accessor_class_offset_values_t _grib_accessor_class_offset_values{ "offset_values" }; -grib_accessor_class* grib_accessor_class_offset_values = &_grib_accessor_class_offset_values; +grib_accessor_offset_values_t _grib_accessor_offset_values{}; +grib_accessor* grib_accessor_offset_values = &_grib_accessor_offset_values; - -void grib_accessor_class_offset_values_t::init(grib_accessor* a, const long l, grib_arguments* args) +void grib_accessor_offset_values_t::init(const long l, grib_arguments* args) { - grib_accessor_class_double_t::init(a, l, args); - int n = 0; - grib_accessor_offset_values_t* self = (grib_accessor_offset_values_t*)a; - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->missingValue = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + grib_accessor_double_t::init(l, args); + int n = 0; + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + missingValue_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -int grib_accessor_class_offset_values_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_offset_values_t::unpack_double(double* val, size_t* len) { int ret = 0; *val = 0; @@ -33,35 +31,34 @@ int grib_accessor_class_offset_values_t::unpack_double(grib_accessor* a, double* return ret; } -int grib_accessor_class_offset_values_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_offset_values_t::pack_double(const double* val, size_t* len) { double* values = NULL; size_t size = 0; double missingValue = 0; long missingValuesPresent = 0; int ret = 0, i = 0; - grib_accessor_offset_values_t* self = (grib_accessor_offset_values_t*)a; - grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + grib_context* c = context_; + grib_handle* h = grib_handle_of_accessor(this); if (*val == 0) return GRIB_SUCCESS; - if ((ret = grib_get_double_internal(h, self->missingValue, &missingValue)) != GRIB_SUCCESS) { + if ((ret = grib_get_double_internal(h, missingValue_, &missingValue)) != GRIB_SUCCESS) { return ret; } if ((ret = grib_get_long_internal(h, "missingValuesPresent", &missingValuesPresent)) != GRIB_SUCCESS) { return ret; } - if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) return ret; values = (double*)grib_context_malloc(c, size * sizeof(double)); if (!values) return GRIB_OUT_OF_MEMORY; - if ((ret = grib_get_double_array_internal(h, self->values, values, &size)) != GRIB_SUCCESS) { + if ((ret = grib_get_double_array_internal(h, values_, values, &size)) != GRIB_SUCCESS) { grib_context_free(c, values); return ret; } @@ -76,7 +73,7 @@ int grib_accessor_class_offset_values_t::pack_double(grib_accessor* a, const dou } } - if ((ret = grib_set_double_array_internal(h, self->values, values, size)) != GRIB_SUCCESS) + if ((ret = grib_set_double_array_internal(h, values_, values, size)) != GRIB_SUCCESS) return ret; grib_context_free(c, values); diff --git a/src/accessor/grib_accessor_class_offset_values.h b/src/accessor/grib_accessor_class_offset_values.h index 702e48da7..ca18a75d8 100644 --- a/src/accessor/grib_accessor_class_offset_values.h +++ b/src/accessor/grib_accessor_class_offset_values.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,14 @@ class grib_accessor_offset_values_t : public grib_accessor_double_t { public: - /* Members defined in offset_values */ - const char* values; - const char* missingValue; -}; - -class grib_accessor_class_offset_values_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_offset_values_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_offset_values_t() : + grib_accessor_double_t() { class_name_ = "offset_values"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_offset_values_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; + const char* missingValue_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_optimal_step_units.cc b/src/accessor/grib_accessor_class_optimal_step_units.cc index 6ce297e30..feeb90a2a 100644 --- a/src/accessor/grib_accessor_class_optimal_step_units.cc +++ b/src/accessor/grib_accessor_class_optimal_step_units.cc @@ -12,70 +12,66 @@ #include "step.h" #include "step_utilities.h" -grib_accessor_class_optimal_step_units_t _grib_accessor_class_optimal_step_units{ "optimal_step_units" }; -grib_accessor_class* grib_accessor_class_optimal_step_units = &_grib_accessor_class_optimal_step_units; +grib_accessor_optimal_step_units_t _grib_accessor_optimal_step_units{}; +grib_accessor* grib_accessor_optimal_step_units = &_grib_accessor_optimal_step_units; - -void grib_accessor_class_optimal_step_units_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_optimal_step_units_t::init(const long l, grib_arguments* c) { - grib_accessor_class_gen_t::init(a, l, c); - grib_accessor_optimal_step_units_t* self = (grib_accessor_optimal_step_units_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_gen_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - self->forecast_time_value = grib_arguments_get_name(hand, c, n++); - self->forecast_time_unit = grib_arguments_get_name(hand, c, n++); - self->time_range_value = grib_arguments_get_name(hand, c, n++); - self->time_range_unit = grib_arguments_get_name(hand, c, n++); - a->length = 0; - self->overwriteStepUnits = eccodes::Unit{ eccodes::Unit::Value::MISSING }.value(); + forecast_time_value_ = grib_arguments_get_name(hand, c, n++); + forecast_time_unit_ = grib_arguments_get_name(hand, c, n++); + time_range_value_ = grib_arguments_get_name(hand, c, n++); + time_range_unit_ = grib_arguments_get_name(hand, c, n++); + length_ = 0; + overwriteStepUnits_ = eccodes::Unit{ eccodes::Unit::Value::MISSING }.value(); } -void grib_accessor_class_optimal_step_units_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_optimal_step_units_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } -size_t grib_accessor_class_optimal_step_units_t::string_length(grib_accessor* a) +size_t grib_accessor_optimal_step_units_t::string_length() { return 255; } -int grib_accessor_class_optimal_step_units_t::pack_expression(grib_accessor* a, grib_expression* e) +int grib_accessor_optimal_step_units_t::pack_expression(grib_expression* e) { const char* cval = NULL; int ret = 0; long lval = 0; size_t len = 1; - grib_handle* hand = grib_handle_of_accessor(a); - const char* cclass_name = a->cclass->name; + grib_handle* hand = grib_handle_of_accessor(this); if (strcmp(e->cclass->name, "long") == 0) { - grib_expression_evaluate_long(hand, e, &lval); // TODO(maee): check return value - ret = a->pack_long(&lval, &len); + grib_expression_evaluate_long(hand, e, &lval); /* TODO: check return value */ + ret = pack_long(&lval, &len); } else { char tmp[1024]; len = sizeof(tmp); cval = grib_expression_evaluate_string(hand, e, tmp, &len, &ret); if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s.%s: Unable to evaluate string %s to be set in %s", - cclass_name, __func__, grib_expression_get_name(e), a->name); + class_name_, __func__, grib_expression_get_name(e), name_); return ret; } len = strlen(cval) + 1; // if (hand->context->debug) - // printf("ECCODES DEBUG grib_accessor_class_codetable::pack_expression %s %s\n", a->name, cval); - ret = a->pack_string(cval, &len); + // printf("ECCODES DEBUG grib_accessor_codetable::pack_expression %s %s\n", name_ , cval); + ret = pack_string(cval, &len); } return ret; } -int grib_accessor_class_optimal_step_units_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_optimal_step_units_t::pack_long(const long* val, size_t* len) { - grib_handle* h = grib_handle_of_accessor(a); - grib_accessor_optimal_step_units_t* self = (grib_accessor_optimal_step_units_t*)a; + grib_handle* h = grib_handle_of_accessor(this); long start_step = 0; long start_step_unit = 0; @@ -99,7 +95,7 @@ int grib_accessor_class_optimal_step_units_t::pack_long(grib_accessor* a, const std::string msg = std::string{ "Invalid unit: " } + std::to_string(*val) + " (" + e.what() + ")" + ". Available units are: " + supported_units_str; - grib_context_log(a->context, GRIB_LOG_ERROR, "%s", msg.c_str()); + grib_context_log(context_, GRIB_LOG_ERROR, "%s", msg.c_str()); return GRIB_INVALID_ARGUMENT; } @@ -107,7 +103,7 @@ int grib_accessor_class_optimal_step_units_t::pack_long(grib_accessor* a, const // "grib-set -s stepUnits=m in.grib out.grib", the following code initiates an indirect update // of the low-level keys: forecastTime,indicatorOfUnitOfTimeRange,indicatorOfUnitForTimeRange,lengthOfTimeRange - self->overwriteStepUnits = *val; + overwriteStepUnits_ = *val; if ((ret = grib_set_long_internal(h, "forceStepUnits", *val)) != GRIB_SUCCESS) return ret; @@ -137,31 +133,30 @@ int grib_accessor_class_optimal_step_units_t::pack_long(grib_accessor* a, const } catch (std::exception& e) { std::string msg = std::string{ "Failed to convert steps to: " } + std::to_string(*val) + " (" + e.what() + ")"; - grib_context_log(a->context, GRIB_LOG_ERROR, "%s", msg.c_str()); + grib_context_log(context_, GRIB_LOG_ERROR, "%s", msg.c_str()); return GRIB_INTERNAL_ERROR; } return GRIB_SUCCESS; } -int grib_accessor_class_optimal_step_units_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_optimal_step_units_t::unpack_long(long* val, size_t* len) { - const grib_accessor_optimal_step_units_t* self = (grib_accessor_optimal_step_units_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); try { - if (eccodes::Unit{ self->overwriteStepUnits } != eccodes::Unit{ eccodes::Unit::Value::MISSING }) { - *val = self->overwriteStepUnits; + if (eccodes::Unit{ overwriteStepUnits_ } != eccodes::Unit{ eccodes::Unit::Value::MISSING }) { + *val = overwriteStepUnits_; return GRIB_SUCCESS; } - auto forecast_time_opt = get_step(h, self->forecast_time_value, self->forecast_time_unit); - auto time_range_opt = get_step(h, self->time_range_value, self->time_range_unit); + auto forecast_time_opt = get_step(h, forecast_time_value_, forecast_time_unit_); + auto time_range_opt = get_step(h, time_range_value_, time_range_unit_); if (forecast_time_opt && time_range_opt) { auto [step_a, step_b] = find_common_units(forecast_time_opt.value().optimize_unit(), (forecast_time_opt.value() + time_range_opt.value()).optimize_unit()); - *val = step_a.unit().value(); + *val = step_a.unit().value(); } else if (forecast_time_opt && !time_range_opt) { *val = forecast_time_opt.value().optimize_unit().unit().value(); @@ -174,18 +169,18 @@ int grib_accessor_class_optimal_step_units_t::unpack_long(grib_accessor* a, long } } catch (std::exception& e) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s", e.what()); + grib_context_log(context_, GRIB_LOG_ERROR, "%s", e.what()); return GRIB_INTERNAL_ERROR; } return GRIB_SUCCESS; } -int grib_accessor_class_optimal_step_units_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_optimal_step_units_t::pack_string(const char* val, size_t* len) { try { long unit = eccodes::Unit{ val }.value(); - pack_long(a, &unit, len); + pack_long(&unit, len); } catch (std::exception& e) { auto supported_units = eccodes::Unit::list_supported_units(); @@ -195,19 +190,19 @@ int grib_accessor_class_optimal_step_units_t::pack_string(grib_accessor* a, cons supported_units_str.pop_back(); std::string msg = "Invalid unit: " + std::string(val) + " (" + e.what() + ")" + ". Available units are: " + supported_units_str; - grib_context_log(a->context, GRIB_LOG_ERROR, "%s", msg.c_str()); + grib_context_log(context_, GRIB_LOG_ERROR, "%s", msg.c_str()); return GRIB_INVALID_ARGUMENT; } return GRIB_SUCCESS; } -int grib_accessor_class_optimal_step_units_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_optimal_step_units_t::unpack_string(char* val, size_t* len) { int ret = 0; long unit = 0; size_t unit_len = 0; - if ((ret = unpack_long(a, &unit, &unit_len)) != GRIB_SUCCESS) + if ((ret = unpack_long(&unit, &unit_len)) != GRIB_SUCCESS) return ret; *len = snprintf(val, *len, "%s", eccodes::Unit{ unit }.value().c_str()); return GRIB_SUCCESS; @@ -215,12 +210,12 @@ int grib_accessor_class_optimal_step_units_t::unpack_string(grib_accessor* a, ch // Step units are never missing // If the user does not specify a step unit, we default to hours -int grib_accessor_class_optimal_step_units_t::is_missing(grib_accessor* a) +int grib_accessor_optimal_step_units_t::is_missing() { return 0; } -int grib_accessor_class_optimal_step_units_t::get_native_type(grib_accessor* a) +long grib_accessor_optimal_step_units_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_optimal_step_units.h b/src/accessor/grib_accessor_class_optimal_step_units.h index e7aa35247..6621b2970 100644 --- a/src/accessor/grib_accessor_class_optimal_step_units.h +++ b/src/accessor/grib_accessor_class_optimal_step_units.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,27 +15,24 @@ class grib_accessor_optimal_step_units_t : public grib_accessor_gen_t { public: - /* Members defined in optimal_step_units */ - const char* forecast_time_value; - const char* forecast_time_unit; - const char* time_range_value; - const char* time_range_unit; - long overwriteStepUnits; -}; - -class grib_accessor_class_optimal_step_units_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_optimal_step_units_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_optimal_step_units_t() : + grib_accessor_gen_t() { class_name_ = "optimal_step_units"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_optimal_step_units_t{}; } - int get_native_type(grib_accessor*) override; - int is_missing(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int pack_expression(grib_accessor*, grib_expression*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int is_missing() override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int pack_expression(grib_expression*) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* forecast_time_value_ = nullptr; + const char* forecast_time_unit_ = nullptr; + const char* time_range_value_ = nullptr; + const char* time_range_unit_ = nullptr; + long overwriteStepUnits_ = 0; }; diff --git a/src/accessor/grib_accessor_class_pack_bufr_values.cc b/src/accessor/grib_accessor_class_pack_bufr_values.cc index 810287614..a80d9735f 100644 --- a/src/accessor/grib_accessor_class_pack_bufr_values.cc +++ b/src/accessor/grib_accessor_class_pack_bufr_values.cc @@ -10,73 +10,67 @@ #include "grib_accessor_class_pack_bufr_values.h" -grib_accessor_class_pack_bufr_values_t _grib_accessor_class_pack_bufr_values{ "pack_bufr_values" }; -grib_accessor_class* grib_accessor_class_pack_bufr_values = &_grib_accessor_class_pack_bufr_values; +grib_accessor_pack_bufr_values_t _grib_accessor_pack_bufr_values{}; +grib_accessor* grib_accessor_pack_bufr_values = &_grib_accessor_pack_bufr_values; - -void grib_accessor_class_pack_bufr_values_t::init(grib_accessor* a, const long len, grib_arguments* params) +void grib_accessor_pack_bufr_values_t::init(const long len, grib_arguments* params) { - grib_accessor_class_gen_t::init(a, len, params); + grib_accessor_gen_t::init(len, params); char* key; - grib_accessor_pack_bufr_values_t* self = (grib_accessor_pack_bufr_values_t*)a; - key = (char*)grib_arguments_get_name(grib_handle_of_accessor(a), params, 0); - self->data_accessor = grib_find_accessor(grib_handle_of_accessor(a), key); + key = (char*)grib_arguments_get_name(grib_handle_of_accessor(this), params, 0); + data_accessor_ = grib_find_accessor(grib_handle_of_accessor(this), key); - a->length = 0; + length_ = 0; } -void grib_accessor_class_pack_bufr_values_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_pack_bufr_values_t::dump(grib_dumper* dumper) { } -int grib_accessor_class_pack_bufr_values_t::unpack_string_array(grib_accessor* a, char** buffer, size_t* len) +int grib_accessor_pack_bufr_values_t::unpack_string_array(char** buffer, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_pack_bufr_values_t::unpack_string(grib_accessor* a, char* buffer, size_t* len) +int grib_accessor_pack_bufr_values_t::unpack_string(char* buffer, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_pack_bufr_values_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_pack_bufr_values_t::unpack_long(long* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_pack_bufr_values_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_pack_bufr_values_t::unpack_double(double* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_pack_bufr_values_t::value_count(grib_accessor* a, long* count) +int grib_accessor_pack_bufr_values_t::value_count(long* count) { *count = 1; return 0; } -void grib_accessor_class_pack_bufr_values_t::destroy(grib_context* context, grib_accessor* a) +void grib_accessor_pack_bufr_values_t::destroy(grib_context* context) { - grib_accessor_class_gen_t::destroy(context, a); + grib_accessor_gen_t::destroy(context); } -int grib_accessor_class_pack_bufr_values_t::get_native_type(grib_accessor* a) +long grib_accessor_pack_bufr_values_t::get_native_type() { return GRIB_TYPE_LONG; } -int grib_accessor_class_pack_bufr_values_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_pack_bufr_values_t::pack_long(const long* val, size_t* len) { - grib_accessor_pack_bufr_values_t* self = (grib_accessor_pack_bufr_values_t*)a; - grib_accessor* data = (grib_accessor*)self->data_accessor; - + grib_accessor* data = (grib_accessor*)data_accessor_; return data->pack_double(0, 0); } -int grib_accessor_class_pack_bufr_values_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_pack_bufr_values_t::pack_double(const double* val, size_t* len) { - grib_accessor_pack_bufr_values_t* self = (grib_accessor_pack_bufr_values_t*)a; - grib_accessor* data = (grib_accessor*)self->data_accessor; - + grib_accessor* data = (grib_accessor*)data_accessor_; return data->pack_double(0, 0); } diff --git a/src/accessor/grib_accessor_class_pack_bufr_values.h b/src/accessor/grib_accessor_class_pack_bufr_values.h index 0a59a5141..f70617484 100644 --- a/src/accessor/grib_accessor_class_pack_bufr_values.h +++ b/src/accessor/grib_accessor_class_pack_bufr_values.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,24 +15,21 @@ class grib_accessor_pack_bufr_values_t : public grib_accessor_gen_t { public: - /* Members defined in pack_bufr_values */ - grib_accessor* data_accessor; -}; - -class grib_accessor_class_pack_bufr_values_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_pack_bufr_values_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_pack_bufr_values_t() : + grib_accessor_gen_t() { class_name_ = "pack_bufr_values"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_pack_bufr_values_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int unpack_string_array(grib_accessor*, char**, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + int unpack_string_array(char**, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + grib_accessor* data_accessor_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_packing_type.cc b/src/accessor/grib_accessor_class_packing_type.cc index 50ac9540d..1abc8d5ef 100644 --- a/src/accessor/grib_accessor_class_packing_type.cc +++ b/src/accessor/grib_accessor_class_packing_type.cc @@ -10,58 +10,54 @@ #include "grib_accessor_class_packing_type.h" -grib_accessor_class_packing_type_t _grib_accessor_class_packing_type{ "packing_type" }; -grib_accessor_class* grib_accessor_class_packing_type = &_grib_accessor_class_packing_type; +grib_accessor_packing_type_t _grib_accessor_packing_type{}; +grib_accessor* grib_accessor_packing_type = &_grib_accessor_packing_type; - -void grib_accessor_class_packing_type_t::init(grib_accessor* a, const long l, grib_arguments* args) +void grib_accessor_packing_type_t::init(const long l, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, l, args); - int n = 0; - grib_accessor_packing_type_t* self = (grib_accessor_packing_type_t*)a; - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->packing_type = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + grib_accessor_gen_t::init(l, args); + int n = 0; + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + packing_type_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -size_t grib_accessor_class_packing_type_t::string_length(grib_accessor* a) +size_t grib_accessor_packing_type_t::string_length() { return 1024; } -int grib_accessor_class_packing_type_t::get_native_type(grib_accessor* a) +long grib_accessor_packing_type_t::get_native_type() { return GRIB_TYPE_STRING; } -int grib_accessor_class_packing_type_t::pack_string(grib_accessor* a, const char* sval, size_t* len) +int grib_accessor_packing_type_t::pack_string(const char* sval, size_t* len) { - grib_accessor_packing_type_t* self = (grib_accessor_packing_type_t*)a; - - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); double* values = NULL; - grib_context* c = a->context; + grib_context* c = context_; size_t size = 0; int err = 0; - if ((err = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) + if ((err = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) return err; values = (double*)grib_context_malloc(c, size * sizeof(double)); if (!values) return GRIB_OUT_OF_MEMORY; - if ((err = grib_get_double_array_internal(h, self->values, values, &size)) != GRIB_SUCCESS) { + if ((err = grib_get_double_array_internal(h, values_, values, &size)) != GRIB_SUCCESS) { grib_context_free(c, values); return err; } - if ((err = grib_set_string_internal(h, self->packing_type, sval, len)) != GRIB_SUCCESS) { + if ((err = grib_set_string_internal(h, packing_type_, sval, len)) != GRIB_SUCCESS) { grib_context_free(c, values); return err; } - if ((err = grib_set_double_array_internal(h, self->values, values, size)) != GRIB_SUCCESS) { + if ((err = grib_set_double_array_internal(h, values_, values, size)) != GRIB_SUCCESS) { grib_context_free(c, values); return err; } @@ -70,10 +66,9 @@ int grib_accessor_class_packing_type_t::pack_string(grib_accessor* a, const char return GRIB_SUCCESS; } -int grib_accessor_class_packing_type_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_packing_type_t::unpack_string(char* val, size_t* len) { - grib_accessor_packing_type_t* self = (grib_accessor_packing_type_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); - return grib_get_string(h, self->packing_type, val, len); + return grib_get_string(h, packing_type_, val, len); } diff --git a/src/accessor/grib_accessor_class_packing_type.h b/src/accessor/grib_accessor_class_packing_type.h index 7deb8f4cf..7b8285f30 100644 --- a/src/accessor/grib_accessor_class_packing_type.h +++ b/src/accessor/grib_accessor_class_packing_type.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_packing_type_t : public grib_accessor_gen_t { public: - /* Members defined in packing_type */ - const char* values; - const char* packing_type; -}; - -class grib_accessor_class_packing_type_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_packing_type_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_packing_type_t() : + grib_accessor_gen_t() { class_name_ = "packing_type"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_packing_type_t{}; } - int get_native_type(grib_accessor*) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_string(const char*, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; + const char* packing_type_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_pad.cc b/src/accessor/grib_accessor_class_pad.cc index df83c4d5e..dbc151288 100644 --- a/src/accessor/grib_accessor_class_pad.cc +++ b/src/accessor/grib_accessor_class_pad.cc @@ -10,25 +10,22 @@ #include "grib_accessor_class_pad.h" -grib_accessor_class_pad_t _grib_accessor_class_pad{ "pad" }; -grib_accessor_class* grib_accessor_class_pad = &_grib_accessor_class_pad; +grib_accessor_pad_t _grib_accessor_pad{}; +grib_accessor* grib_accessor_pad = &_grib_accessor_pad; - -void grib_accessor_class_pad_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_pad_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_padding_t::init(a, len, arg); - grib_accessor_pad_t* self = (grib_accessor_pad_t*)a; + grib_accessor_padding_t::init(len, arg); - self->expression = grib_arguments_get_expression(grib_handle_of_accessor(a), arg, 0); - a->length = preferred_size(a, 1); + expression_ = grib_arguments_get_expression(grib_handle_of_accessor(this), arg, 0); + length_ = preferred_size(1); } -size_t grib_accessor_class_pad_t::preferred_size(grib_accessor* a, int from_handle) +size_t grib_accessor_pad_t::preferred_size(int from_handle) { - grib_accessor_pad_t* self = (grib_accessor_pad_t*)a; long length = 0; - grib_expression_evaluate_long(grib_handle_of_accessor(a), self->expression, &length); + grib_expression_evaluate_long(grib_handle_of_accessor(this), expression_, &length); return length > 0 ? length : 0; } diff --git a/src/accessor/grib_accessor_class_pad.h b/src/accessor/grib_accessor_class_pad.h index 5234e73a5..648394f37 100644 --- a/src/accessor/grib_accessor_class_pad.h +++ b/src/accessor/grib_accessor_class_pad.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,12 @@ class grib_accessor_pad_t : public grib_accessor_padding_t { public: - /* Members defined in padding */ - /* Members defined in pad */ - grib_expression* expression; -}; - -class grib_accessor_class_pad_t : public grib_accessor_class_padding_t -{ -public: - grib_accessor_class_pad_t(const char* name) : grib_accessor_class_padding_t(name) {} + grib_accessor_pad_t() : + grib_accessor_padding_t() { class_name_ = "pad"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_pad_t{}; } - void init(grib_accessor*, const long, grib_arguments*) override; - size_t preferred_size(grib_accessor*, int) override; + void init(const long, grib_arguments*) override; + size_t preferred_size(int) override; + +private: + grib_expression* expression_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_padding.cc b/src/accessor/grib_accessor_class_padding.cc index 226e4b75b..e70c93147 100644 --- a/src/accessor/grib_accessor_class_padding.cc +++ b/src/accessor/grib_accessor_class_padding.cc @@ -10,55 +10,54 @@ #include "grib_accessor_class_padding.h" -grib_accessor_class_padding_t _grib_accessor_class_padding{ "padding" }; -grib_accessor_class* grib_accessor_class_padding = &_grib_accessor_class_padding; +grib_accessor_padding_t _grib_accessor_padding{}; +grib_accessor* grib_accessor_padding = &_grib_accessor_padding; - -void grib_accessor_class_padding_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_padding_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_bytes_t::init(a, len, arg); - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_bytes_t::init(len, arg); + flags_ |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_padding_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_padding_t::compare(grib_accessor* b) { - if (a->length != b->length) + if (length_ != b->length_) return GRIB_COUNT_MISMATCH; return GRIB_SUCCESS; } -void grib_accessor_class_padding_t::update_size(grib_accessor* a, size_t new_size) +void grib_accessor_padding_t::update_size(size_t new_size) { - a->length = new_size; + length_ = new_size; } -void grib_accessor_class_padding_t::resize(grib_accessor* a, size_t new_size) +void grib_accessor_padding_t::resize(size_t new_size) { - void* zero = grib_context_malloc_clear(a->context, new_size); + void* zero = grib_context_malloc_clear(context_, new_size); - grib_buffer_replace(a, (const unsigned char*)zero, new_size, + grib_buffer_replace(this, (const unsigned char*)zero, new_size, /*update_lengths=*/1, /*update_paddings=*/0); - grib_context_free(a->context, zero); + grib_context_free(context_, zero); - grib_context_log(a->context, GRIB_LOG_DEBUG, - "grib_accessor_class_padding::resize new_size=%zu a->length=%ld %s %s", - new_size, a->length, a->cclass->name, a->name); - Assert(new_size == a->length); + grib_context_log(context_, GRIB_LOG_DEBUG, + "grib_accessor_padding::resize new_size=%zu length_ =%ld %s %s", + new_size, length_, class_name_, name_); + Assert(new_size == length_); } -int grib_accessor_class_padding_t::value_count(grib_accessor* a, long* c) +int grib_accessor_padding_t::value_count(long* c) { - *c = a->length; + *c = length_; return 0; } -long grib_accessor_class_padding_t::byte_count(grib_accessor* a) +long grib_accessor_padding_t::byte_count() { - return a->length; + return length_; } -size_t grib_accessor_class_padding_t::string_length(grib_accessor* a) +size_t grib_accessor_padding_t::string_length() { - return (size_t)a->length; + return (size_t)length_; } diff --git a/src/accessor/grib_accessor_class_padding.h b/src/accessor/grib_accessor_class_padding.h index aeda21f09..ac0c37d14 100644 --- a/src/accessor/grib_accessor_class_padding.h +++ b/src/accessor/grib_accessor_class_padding.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,14 @@ class grib_accessor_padding_t : public grib_accessor_bytes_t { public: - /* Members defined in padding */ -}; - -class grib_accessor_class_padding_t : public grib_accessor_class_bytes_t -{ -public: - grib_accessor_class_padding_t(const char* name) : grib_accessor_class_bytes_t(name) {} + grib_accessor_padding_t() : + grib_accessor_bytes_t() { class_name_ = "padding"; } //grib_accessor* create_empty_accessor() override { return new grib_accessor_padding_t{}; } - size_t string_length(grib_accessor*) override; - long byte_count(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; - void resize(grib_accessor*,size_t) override; - int compare(grib_accessor*, grib_accessor*) override; + size_t string_length() override; + long byte_count() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + void resize(size_t) override; + int compare(grib_accessor*) override; }; diff --git a/src/accessor/grib_accessor_class_padto.cc b/src/accessor/grib_accessor_class_padto.cc index 4fa523acd..2f496e640 100644 --- a/src/accessor/grib_accessor_class_padto.cc +++ b/src/accessor/grib_accessor_class_padto.cc @@ -10,36 +10,32 @@ #include "grib_accessor_class_padto.h" -grib_accessor_class_padto_t _grib_accessor_class_padto{ "padto" }; -grib_accessor_class* grib_accessor_class_padto = &_grib_accessor_class_padto; +grib_accessor_padto_t _grib_accessor_padto{}; +grib_accessor* grib_accessor_padto = &_grib_accessor_padto; - -size_t grib_accessor_class_padto_t::preferred_size(grib_accessor* a, int from_handle) +size_t grib_accessor_padto_t::preferred_size(int from_handle) { - grib_accessor_padto_t* self = (grib_accessor_padto_t*)a; - long length = 0; long theEnd; - grib_expression_evaluate_long(grib_handle_of_accessor(a), self->expression, &theEnd); + grib_expression_evaluate_long(grib_handle_of_accessor(this), expression_, &theEnd); - length = theEnd - a->offset; + length = theEnd - offset_; - //printf("preferred_size: prefered: %ld current:%ld %s %s %ld\n", (long)length,(long)a->length,a->cclass->name,a->name,(long)a->offset); + /* printf("preferred_size: prefered: %ld current:%ld %s %s %ld\n", (long)length,(long)a->length,a->cclass->name,a->name,(long)offset_ ); */ return length > 0 ? length : 0; } -void grib_accessor_class_padto_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_padto_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_padding_t::init(a, len, arg); - grib_accessor_padto_t* self = (grib_accessor_padto_t*)a; + grib_accessor_padding_t::init(len, arg); - self->expression = grib_arguments_get_expression(grib_handle_of_accessor(a), arg, 0); - a->length = preferred_size(a, 1); + expression_ = grib_arguments_get_expression(grib_handle_of_accessor(this), arg, 0); + length_ = preferred_size(1); } -void grib_accessor_class_padto_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_padto_t::dump(grib_dumper* dumper) { - //grib_dump_string(dumper,a,NULL); + /*grib_dump_string(dumper,a,NULL);*/ } diff --git a/src/accessor/grib_accessor_class_padto.h b/src/accessor/grib_accessor_class_padto.h index a1b7b398a..c3833d7a7 100644 --- a/src/accessor/grib_accessor_class_padto.h +++ b/src/accessor/grib_accessor_class_padto.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_padto_t : public grib_accessor_padding_t { public: - /* Members defined in padto */ - grib_expression* expression; -}; - -class grib_accessor_class_padto_t : public grib_accessor_class_padding_t -{ -public: - grib_accessor_class_padto_t(const char* name) : grib_accessor_class_padding_t(name) {} + grib_accessor_padto_t() : + grib_accessor_padding_t() { class_name_ = "padto"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_padto_t{}; } - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - size_t preferred_size(grib_accessor*, int) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + size_t preferred_size(int) override; + +private: + grib_expression* expression_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_padtoeven.cc b/src/accessor/grib_accessor_class_padtoeven.cc index b91a9fb51..af1865173 100644 --- a/src/accessor/grib_accessor_class_padtoeven.cc +++ b/src/accessor/grib_accessor_class_padtoeven.cc @@ -10,40 +10,37 @@ #include "grib_accessor_class_padtoeven.h" -grib_accessor_class_padtoeven_t _grib_accessor_class_padtoeven{ "padtoeven" }; -grib_accessor_class* grib_accessor_class_padtoeven = &_grib_accessor_class_padtoeven; +grib_accessor_padtoeven_t _grib_accessor_padtoeven{}; +grib_accessor* grib_accessor_padtoeven = &_grib_accessor_padtoeven; - -size_t grib_accessor_class_padtoeven_t::preferred_size(grib_accessor* a, int from_handle) +size_t grib_accessor_padtoeven_t::preferred_size(int from_handle) { - grib_accessor_padtoeven_t* self = (grib_accessor_padtoeven_t*)a; - long offset = 0; - long length = 0; + long offset = 0; + long length = 0; long seclen; - grib_get_long_internal(grib_handle_of_accessor(a), self->section_offset, &offset); - grib_get_long_internal(grib_handle_of_accessor(a), self->section_length, &length); + grib_get_long_internal(grib_handle_of_accessor(this), section_offset_, &offset); + grib_get_long_internal(grib_handle_of_accessor(this), section_length_, &length); if ((length % 2) && from_handle) { - // grib_context_log(a->context, + // grib_context_log(context_ , // GRIB_LOG_ERROR,"GRIB message has an odd length section (%ld, %s)", - // (long)length,a->name); + // (long)length,name_ ); return 0; } - // printf("EVEN %ld %ld\n",(long) a->offset,(long) offset); - seclen = a->offset - offset; + /* printf("EVEN %ld %ld\n",(long) offset_ ,(long) offset);*/ + seclen = offset_ - offset; return (seclen % 2) ? 1 : 0; } -void grib_accessor_class_padtoeven_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_padtoeven_t::init(const long len, grib_arguments* args) { - grib_accessor_class_padding_t::init(a, len, args); - grib_accessor_padtoeven_t* self = (grib_accessor_padtoeven_t*)a; + grib_accessor_padding_t::init(len, args); - self->section_offset = grib_arguments_get_name(grib_handle_of_accessor(a), args, 0); - self->section_length = grib_arguments_get_name(grib_handle_of_accessor(a), args, 1); + section_offset_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 0); + section_length_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, 1); - a->length = preferred_size(a, 1); + length_ = preferred_size(1); } diff --git a/src/accessor/grib_accessor_class_padtoeven.h b/src/accessor/grib_accessor_class_padtoeven.h index 9f42f5880..44bc4ccc0 100644 --- a/src/accessor/grib_accessor_class_padtoeven.h +++ b/src/accessor/grib_accessor_class_padtoeven.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_padtoeven_t : public grib_accessor_padding_t { public: - /* Members defined in padtoeven */ - const char* section_offset; - const char* section_length; -}; - -class grib_accessor_class_padtoeven_t : public grib_accessor_class_padding_t -{ -public: - grib_accessor_class_padtoeven_t(const char* name) : grib_accessor_class_padding_t(name) {} + grib_accessor_padtoeven_t() : + grib_accessor_padding_t() { class_name_ = "padtoeven"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_padtoeven_t{}; } - void init(grib_accessor*, const long, grib_arguments*) override; - size_t preferred_size(grib_accessor*, int) override; + void init(const long, grib_arguments*) override; + size_t preferred_size(int) override; + +private: + const char* section_offset_ = nullptr; + const char* section_length_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_padtomultiple.cc b/src/accessor/grib_accessor_class_padtomultiple.cc index b76c1d78a..0888c526c 100644 --- a/src/accessor/grib_accessor_class_padtomultiple.cc +++ b/src/accessor/grib_accessor_class_padtomultiple.cc @@ -10,32 +10,29 @@ #include "grib_accessor_class_padtomultiple.h" -grib_accessor_class_padtomultiple_t _grib_accessor_class_padtomultiple{ "padtomultiple" }; -grib_accessor_class* grib_accessor_class_padtomultiple = &_grib_accessor_class_padtomultiple; +grib_accessor_padtomultiple_t _grib_accessor_padtomultiple{}; +grib_accessor* grib_accessor_padtomultiple = &_grib_accessor_padtomultiple; - -size_t grib_accessor_class_padtomultiple_t::preferred_size(grib_accessor* a, int from_handle) +size_t grib_accessor_padtomultiple_t::preferred_size(int from_handle) { - grib_accessor_padtomultiple_t* self = (grib_accessor_padtomultiple_t*)a; long padding = 0; long begin = 0; long multiple = 0; - grib_expression_evaluate_long(grib_handle_of_accessor(a), self->begin, &begin); - grib_expression_evaluate_long(grib_handle_of_accessor(a), self->multiple, &multiple); + grib_expression_evaluate_long(grib_handle_of_accessor(this), begin_, &begin); + grib_expression_evaluate_long(grib_handle_of_accessor(this), multiple_, &multiple); - padding = a->offset - begin; + padding = offset_ - begin; padding = ((padding + multiple - 1) / multiple) * multiple - padding; return padding == 0 ? multiple : padding; } -void grib_accessor_class_padtomultiple_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_padtomultiple_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_padding_t::init(a, len, arg); - grib_accessor_padtomultiple_t* self = (grib_accessor_padtomultiple_t*)a; + grib_accessor_padding_t::init(len, arg); - self->begin = grib_arguments_get_expression(grib_handle_of_accessor(a), arg, 0); - self->multiple = grib_arguments_get_expression(grib_handle_of_accessor(a), arg, 1); - a->length = preferred_size(a, 1); + begin_ = grib_arguments_get_expression(grib_handle_of_accessor(this), arg, 0); + multiple_ = grib_arguments_get_expression(grib_handle_of_accessor(this), arg, 1); + length_ = preferred_size(1); } diff --git a/src/accessor/grib_accessor_class_padtomultiple.h b/src/accessor/grib_accessor_class_padtomultiple.h index 1de8e4059..53709c7d5 100644 --- a/src/accessor/grib_accessor_class_padtomultiple.h +++ b/src/accessor/grib_accessor_class_padtomultiple.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_padtomultiple_t : public grib_accessor_padding_t { public: - /* Members defined in padtomultiple */ - grib_expression* begin; - grib_expression* multiple; -}; - -class grib_accessor_class_padtomultiple_t : public grib_accessor_class_padding_t -{ -public: - grib_accessor_class_padtomultiple_t(const char* name) : grib_accessor_class_padding_t(name) {} + grib_accessor_padtomultiple_t() : + grib_accessor_padding_t() { class_name_ = "padtomultiple"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_padtomultiple_t{}; } - void init(grib_accessor*, const long, grib_arguments*) override; - size_t preferred_size(grib_accessor*, int) override; + void init(const long, grib_arguments*) override; + size_t preferred_size(int) override; + +private: + grib_expression* begin_ = nullptr; + grib_expression* multiple_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_position.cc b/src/accessor/grib_accessor_class_position.cc index a2c3daacd..148bb11ce 100644 --- a/src/accessor/grib_accessor_class_position.cc +++ b/src/accessor/grib_accessor_class_position.cc @@ -11,44 +11,43 @@ #include "grib_accessor_class_position.h" -grib_accessor_class_position_t _grib_accessor_class_position{ "position" }; -grib_accessor_class* grib_accessor_class_position = &_grib_accessor_class_position; +grib_accessor_position_t _grib_accessor_position{}; +grib_accessor* grib_accessor_position = &_grib_accessor_position; - -void grib_accessor_class_position_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_position_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + grib_accessor_gen_t::init(len, arg); + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_HIDDEN; + flags_ |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; } -int grib_accessor_class_position_t::get_native_type(grib_accessor* a) +long grib_accessor_position_t::get_native_type() { return GRIB_TYPE_LONG; } -void grib_accessor_class_position_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_position_t::dump(grib_dumper* dumper) { - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); } -int grib_accessor_class_position_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_position_t::unpack_long(long* val, size_t* len) { if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values ", a->name, 1); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values ", name_, 1); *len = 0; return GRIB_ARRAY_TOO_SMALL; } - *val = a->offset; + *val = offset_; *len = 1; return GRIB_SUCCESS; } // static int compare(grib_accessor* a, grib_accessor* b) // { -// if (a->offset != b->offset) +// if (offset_ != b->offset) // return GRIB_OFFSET_MISMATCH; // return GRIB_SUCCESS; // } diff --git a/src/accessor/grib_accessor_class_position.h b/src/accessor/grib_accessor_class_position.h index 58e5beb24..5f20b1ae6 100644 --- a/src/accessor/grib_accessor_class_position.h +++ b/src/accessor/grib_accessor_class_position.h @@ -16,16 +16,11 @@ class grib_accessor_position_t : public grib_accessor_gen_t { public: - /* Members defined in position */ -}; - -class grib_accessor_class_position_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_position_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_position_t() : + grib_accessor_gen_t() { class_name_ = "position"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_position_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_long(long* val, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_proj_string.cc b/src/accessor/grib_accessor_class_proj_string.cc index 03866753d..b42da8c45 100644 --- a/src/accessor/grib_accessor_class_proj_string.cc +++ b/src/accessor/grib_accessor_class_proj_string.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,24 +10,22 @@ #include "grib_accessor_class_proj_string.h" -grib_accessor_class_proj_string_t _grib_accessor_class_proj_string{ "proj_string" }; -grib_accessor_class* grib_accessor_class_proj_string = &_grib_accessor_class_proj_string; +grib_accessor_proj_string_t _grib_accessor_proj_string{}; +grib_accessor* grib_accessor_proj_string = &_grib_accessor_proj_string; - -void grib_accessor_class_proj_string_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_proj_string_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_accessor_proj_string_t* self = (grib_accessor_proj_string_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + grib_accessor_gen_t::init(len, arg); + grib_handle* h = grib_handle_of_accessor(this); - self->grid_type = grib_arguments_get_name(h, arg, 0); - self->endpoint = grib_arguments_get_long(h, arg, 1); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + grid_type_ = grib_arguments_get_name(h, arg, 0); + endpoint_ = grib_arguments_get_long(h, arg, 1); + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; } -int grib_accessor_class_proj_string_t::get_native_type(grib_accessor* a) +long grib_accessor_proj_string_t::get_native_type() { return GRIB_TYPE_STRING; } @@ -208,28 +205,26 @@ static proj_mapping proj_mappings[] = { #define ENDPOINT_SOURCE 0 #define ENDPOINT_TARGET 1 -int grib_accessor_class_proj_string_t::unpack_string(grib_accessor* a, char* v, size_t* len) +int grib_accessor_proj_string_t::unpack_string(char* v, size_t* len) { - grib_accessor_proj_string_t* self = (grib_accessor_proj_string_t*)a; int err = 0, found = 0; size_t i = 0; char grid_type[64] = {0,}; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); size_t size = sizeof(grid_type) / sizeof(*grid_type); - Assert(self->endpoint == ENDPOINT_SOURCE || self->endpoint == ENDPOINT_TARGET); + Assert(endpoint_ == ENDPOINT_SOURCE || endpoint_ == ENDPOINT_TARGET); size_t l = 100; // Safe bet if (*len < l) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is at least %zu bytes long (len=%zu)", - cclass_name, a->name, l, *len); + class_name_, name_, l, *len); *len = l; return GRIB_BUFFER_TOO_SMALL; } - err = grib_get_string(h, self->grid_type, grid_type, &size); + err = grib_get_string(h, grid_type_, grid_type, &size); if (err) return err; const size_t num_proj_mappings = sizeof(proj_mappings) / sizeof(proj_mappings[0]); @@ -237,7 +232,7 @@ int grib_accessor_class_proj_string_t::unpack_string(grib_accessor* a, char* v, proj_mapping pm = proj_mappings[i]; if (strcmp(grid_type, pm.gridType) == 0) { found = 1; - if (self->endpoint == ENDPOINT_SOURCE) { + if (endpoint_ == ENDPOINT_SOURCE) { snprintf(v, 64, "EPSG:4326"); } else { diff --git a/src/accessor/grib_accessor_class_proj_string.h b/src/accessor/grib_accessor_class_proj_string.h index e214c32a9..a49773638 100644 --- a/src/accessor/grib_accessor_class_proj_string.h +++ b/src/accessor/grib_accessor_class_proj_string.h @@ -16,17 +16,14 @@ class grib_accessor_proj_string_t : public grib_accessor_gen_t { public: - /* Members defined in proj_string */ - const char* grid_type; - int endpoint; -}; - -class grib_accessor_class_proj_string_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_proj_string_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_proj_string_t() : + grib_accessor_gen_t() { class_name_ = "proj_string"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_proj_string_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_string(char*, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* grid_type_ = nullptr; + int endpoint_ = 0; }; diff --git a/src/accessor/grib_accessor_class_raw.cc b/src/accessor/grib_accessor_class_raw.cc index cf1f502c7..2196bd668 100644 --- a/src/accessor/grib_accessor_class_raw.cc +++ b/src/accessor/grib_accessor_class_raw.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,49 +10,46 @@ #include "grib_accessor_class_raw.h" -grib_accessor_class_raw_t _grib_accessor_class_raw{ "raw" }; -grib_accessor_class* grib_accessor_class_raw = &_grib_accessor_class_raw; +grib_accessor_raw_t _grib_accessor_raw{}; +grib_accessor* grib_accessor_raw = &_grib_accessor_raw; - -void grib_accessor_class_raw_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_raw_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); + grib_accessor_gen_t::init(len, arg); int n = 0; int err = 0; long sectionLength; - grib_accessor_raw_t* self = (grib_accessor_raw_t*)a; grib_expression* e; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); - a->length = 0; - self->totalLength = grib_arguments_get_name(hand, arg, n++); - self->sectionLength = grib_arguments_get_name(hand, arg, n++); + length_ = 0; + totalLength_ = grib_arguments_get_name(hand, arg, n++); + sectionLength_ = grib_arguments_get_name(hand, arg, n++); e = grib_arguments_get_expression(hand, arg, n++); - err = grib_expression_evaluate_long(hand, e, &(self->relativeOffset)); + err = grib_expression_evaluate_long(hand, e, &(relativeOffset_)); if (err) grib_context_log(hand->context, GRIB_LOG_ERROR, "Unable to evaluate relativeOffset"); - grib_get_long(hand, self->sectionLength, §ionLength); + grib_get_long(hand, sectionLength_, §ionLength); - a->length = sectionLength - self->relativeOffset; - if (a->length < 0) - a->length = 0; + length_ = sectionLength - relativeOffset_; + if (length_ < 0) + length_ = 0; - /* Assert(a->length>=0); */ + /* Assert(length_ >=0); */ } -int grib_accessor_class_raw_t::get_native_type(grib_accessor* a) +long grib_accessor_raw_t::get_native_type() { return GRIB_TYPE_BYTES; } - -int grib_accessor_class_raw_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_raw_t::compare(grib_accessor* b) { int retval = GRIB_SUCCESS; - size_t alen = (size_t)a->byte_count(); + size_t alen = (size_t)byte_count(); size_t blen = (size_t)b->byte_count(); if (alen != blen) return GRIB_COUNT_MISMATCH; @@ -61,66 +57,65 @@ int grib_accessor_class_raw_t::compare(grib_accessor* a, grib_accessor* b) return retval; } -long grib_accessor_class_raw_t::byte_count(grib_accessor* a) +long grib_accessor_raw_t::byte_count() { - return a->length; + return length_; } -int grib_accessor_class_raw_t::value_count(grib_accessor* a, long* len) +int grib_accessor_raw_t::value_count(long* len) { - *len = a->length; + *len = length_; return 0; } -int grib_accessor_class_raw_t::unpack_bytes(grib_accessor* a, unsigned char* buffer, size_t* len) +int grib_accessor_raw_t::unpack_bytes(unsigned char* buffer, size_t* len) { - if (*len < a->length) { - *len = a->length; + if (*len < length_) { + *len = length_; return GRIB_ARRAY_TOO_SMALL; } - *len = a->length; + *len = length_; - memcpy(buffer, grib_handle_of_accessor(a)->buffer->data + a->offset, *len); + memcpy(buffer, grib_handle_of_accessor(this)->buffer->data + offset_, *len); return GRIB_SUCCESS; } -void grib_accessor_class_raw_t::update_size(grib_accessor* a, size_t s) +void grib_accessor_raw_t::update_size(size_t s) { - grib_context_log(a->context, GRIB_LOG_DEBUG, "updating size of %s old %ld new %ld", a->name, a->length, s); - a->length = s; - Assert(a->length >= 0); + grib_context_log(context_, GRIB_LOG_DEBUG, "updating size of %s old %ld new %ld", name_, length_, s); + length_ = s; + Assert(length_ >= 0); } void accessor_raw_set_length(grib_accessor* a, size_t len) { - a->length = len; + a->length_ = len; } long accessor_raw_get_offset(grib_accessor* a) { - return a->offset; + return a->offset_; } -int grib_accessor_class_raw_t::pack_bytes(grib_accessor* a, const unsigned char* val, size_t* len) +int grib_accessor_raw_t::pack_bytes(const unsigned char* val, size_t* len) { size_t length = *len; long totalLength; long sectionLength; - grib_handle* h = grib_handle_of_accessor(a); - grib_accessor_raw_t* self = (grib_accessor_raw_t*)a; - long dlen = length - a->length; + grib_handle* h = grib_handle_of_accessor(this); + long dlen = length - length_; - grib_get_long(h, self->totalLength, &totalLength); + grib_get_long(h, totalLength_, &totalLength); totalLength += dlen; - grib_get_long(h, self->sectionLength, §ionLength); + grib_get_long(h, sectionLength_, §ionLength); sectionLength += dlen; - grib_buffer_replace(a, val, length, 1, 1); + grib_buffer_replace(this, val, length, 1, 1); - grib_set_long(h, self->totalLength, totalLength); - grib_set_long(h, self->sectionLength, sectionLength); - a->length = length; + grib_set_long(h, totalLength_, totalLength); + grib_set_long(h, sectionLength_, sectionLength); + length_ = length; return GRIB_SUCCESS; } diff --git a/src/accessor/grib_accessor_class_raw.h b/src/accessor/grib_accessor_class_raw.h index 8a588ac61..b05642393 100644 --- a/src/accessor/grib_accessor_class_raw.h +++ b/src/accessor/grib_accessor_class_raw.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,23 +15,20 @@ class grib_accessor_raw_t : public grib_accessor_gen_t { public: - /* Members defined in raw */ - const char* totalLength; - const char* sectionLength; - long relativeOffset; -}; - -class grib_accessor_class_raw_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_raw_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_raw_t() : + grib_accessor_gen_t() { class_name_ = "raw"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_raw_t{}; } - int get_native_type(grib_accessor*) override; - int pack_bytes(grib_accessor*, const unsigned char*, size_t* len) override; - int unpack_bytes(grib_accessor*, unsigned char*, size_t* len) override; - long byte_count(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; - int compare(grib_accessor*, grib_accessor*) override; + long get_native_type() override; + int pack_bytes(const unsigned char*, size_t* len) override; + int unpack_bytes(unsigned char*, size_t* len) override; + long byte_count() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + int compare(grib_accessor*) override; + +private: + const char* totalLength_ = nullptr; + const char* sectionLength_ = nullptr; + long relativeOffset_ = 0; }; diff --git a/src/accessor/grib_accessor_class_rdbtime_guess_date.cc b/src/accessor/grib_accessor_class_rdbtime_guess_date.cc index f4b317daa..55c545eec 100644 --- a/src/accessor/grib_accessor_class_rdbtime_guess_date.cc +++ b/src/accessor/grib_accessor_class_rdbtime_guess_date.cc @@ -11,42 +11,39 @@ #include "grib_accessor_class_rdbtime_guess_date.h" -grib_accessor_class_rdbtime_guess_date_t _grib_accessor_class_rdbtime_guess_date{"rdbtime_guess_date"}; -grib_accessor_class* grib_accessor_class_rdbtime_guess_date = &_grib_accessor_class_rdbtime_guess_date; +grib_accessor_rdbtime_guess_date_t _grib_accessor_rdbtime_guess_date{}; +grib_accessor* grib_accessor_rdbtime_guess_date = &_grib_accessor_rdbtime_guess_date; - -void grib_accessor_class_rdbtime_guess_date_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_rdbtime_guess_date_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_rdbtime_guess_date_t* self = (grib_accessor_rdbtime_guess_date_t*)a; + grib_accessor_long_t::init(l, c); int n = 0; - self->typicalYear = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->typicalMonth = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->typicalDay = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->rdbDay = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->yearOrMonth = grib_arguments_get_long(grib_handle_of_accessor(a), c, n++); + typicalYear_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + typicalMonth_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + typicalDay_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + rdbDay_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + yearOrMonth_ = grib_arguments_get_long(grib_handle_of_accessor(this), c, n++); - /* a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; */ + /* flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; */ } -int grib_accessor_class_rdbtime_guess_date_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_rdbtime_guess_date_t::unpack_long(long* val, size_t* len) { - grib_accessor_rdbtime_guess_date_t* self = (grib_accessor_rdbtime_guess_date_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); long typicalYear, typicalMonth, typicalDay, rdbDay; long rdbYear, rdbMonth; - int ret = grib_get_long(h, self->typicalYear, &typicalYear); + int ret = grib_get_long(h, typicalYear_, &typicalYear); if (ret) return ret; - ret = grib_get_long(h, self->typicalMonth, &typicalMonth); + ret = grib_get_long(h, typicalMonth_, &typicalMonth); if (ret) return ret; - ret = grib_get_long(h, self->typicalDay, &typicalDay); + ret = grib_get_long(h, typicalDay_, &typicalDay); if (ret) return ret; - ret = grib_get_long(h, self->rdbDay, &rdbDay); + ret = grib_get_long(h, rdbDay_, &rdbDay); if (ret) return ret; @@ -65,13 +62,13 @@ int grib_accessor_class_rdbtime_guess_date_t::unpack_long(grib_accessor* a, long rdbMonth = typicalMonth; } - *val = self->yearOrMonth == 1 ? rdbYear : rdbMonth; + *val = yearOrMonth_ == 1 ? rdbYear : rdbMonth; *len = 1; return GRIB_SUCCESS; } -int grib_accessor_class_rdbtime_guess_date_t::pack_long(grib_accessor* a, const long* v, size_t* len) +int grib_accessor_rdbtime_guess_date_t::pack_long(const long* v, size_t* len) { /* do nothing*/ return GRIB_SUCCESS; diff --git a/src/accessor/grib_accessor_class_rdbtime_guess_date.h b/src/accessor/grib_accessor_class_rdbtime_guess_date.h index 739c95e8d..3a3f7f7fb 100644 --- a/src/accessor/grib_accessor_class_rdbtime_guess_date.h +++ b/src/accessor/grib_accessor_class_rdbtime_guess_date.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,20 +15,17 @@ class grib_accessor_rdbtime_guess_date_t : public grib_accessor_long_t { public: - /* Members defined in rdbtime_guess_date */ - const char* typicalYear; - const char* typicalMonth; - const char* typicalDay; - const char* rdbDay; - long yearOrMonth; -}; - -class grib_accessor_class_rdbtime_guess_date_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_rdbtime_guess_date_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_rdbtime_guess_date_t() : + grib_accessor_long_t() { class_name_ = "rdbtime_guess_date"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_rdbtime_guess_date_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* typicalYear_ = nullptr; + const char* typicalMonth_ = nullptr; + const char* typicalDay_ = nullptr; + const char* rdbDay_ = nullptr; + long yearOrMonth_ = 0; }; diff --git a/src/accessor/grib_accessor_class_reference_value_error.cc b/src/accessor/grib_accessor_class_reference_value_error.cc index fbf1a1c1b..923b9e95b 100644 --- a/src/accessor/grib_accessor_class_reference_value_error.cc +++ b/src/accessor/grib_accessor_class_reference_value_error.cc @@ -11,36 +11,33 @@ #include "grib_accessor_class_reference_value_error.h" -grib_accessor_class_reference_value_error_t _grib_accessor_class_reference_value_error{ "reference_value_error" }; -grib_accessor_class* grib_accessor_class_reference_value_error = &_grib_accessor_class_reference_value_error; +grib_accessor_reference_value_error_t _grib_accessor_reference_value_error{}; +grib_accessor* grib_accessor_reference_value_error = &_grib_accessor_reference_value_error; - -void grib_accessor_class_reference_value_error_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_reference_value_error_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_reference_value_error_t* self = (grib_accessor_reference_value_error_t*)a; + grib_accessor_double_t::init(l, c); int n = 0; - self->referenceValue = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->floatType = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + referenceValue_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + floatType_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + length_ = 0; } -int grib_accessor_class_reference_value_error_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_reference_value_error_t::unpack_double(double* val, size_t* len) { - grib_accessor_reference_value_error_t* self = (grib_accessor_reference_value_error_t*)a; - int ret = GRIB_SUCCESS; + int ret = GRIB_SUCCESS; double referenceValue = 0; - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), - self->referenceValue, &referenceValue)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(grib_handle_of_accessor(this), + referenceValue_, &referenceValue)) != GRIB_SUCCESS) return ret; - if (!strcmp(self->floatType, "ibm")) + if (!strcmp(floatType_, "ibm")) *val = grib_ibmfloat_error(referenceValue); - else if (!strcmp(self->floatType, "ieee")) + else if (!strcmp(floatType_, "ieee")) *val = grib_ieeefloat_error(referenceValue); else Assert(1 == 0); diff --git a/src/accessor/grib_accessor_class_reference_value_error.h b/src/accessor/grib_accessor_class_reference_value_error.h index 2a470562e..946d00e8f 100644 --- a/src/accessor/grib_accessor_class_reference_value_error.h +++ b/src/accessor/grib_accessor_class_reference_value_error.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_reference_value_error_t : public grib_accessor_double_t { public: - /* Members defined in reference_value_error */ - const char* referenceValue; - const char* floatType; -}; - -class grib_accessor_class_reference_value_error_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_reference_value_error_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_reference_value_error_t() : + grib_accessor_double_t() { class_name_ = "reference_value_error"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_reference_value_error_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* referenceValue_ = nullptr; + const char* floatType_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_round.cc b/src/accessor/grib_accessor_class_round.cc index e1d6aaeda..80b0f601d 100644 --- a/src/accessor/grib_accessor_class_round.cc +++ b/src/accessor/grib_accessor_class_round.cc @@ -11,14 +11,26 @@ #include "grib_accessor_class_round.h" -grib_accessor_class_round_t _grib_accessor_class_round{ "round" }; -grib_accessor_class* grib_accessor_class_round = &_grib_accessor_class_round; +grib_accessor_round_t _grib_accessor_round{}; +grib_accessor* grib_accessor_round = &_grib_accessor_round; - -int grib_accessor_class_round_t::unpack_double(grib_accessor* a, double* val, size_t* len) +void grib_accessor_round_t::init(const long l, grib_arguments* arg) { - grib_accessor_round_t* self = (grib_accessor_round_t*)a; + grib_accessor_evaluate_t::init(l, arg); +} +void grib_accessor_round_t::destroy(grib_context* c) +{ + grib_accessor_evaluate_t::destroy(c); +} + +void grib_accessor_round_t::dump(grib_dumper* dumper) +{ + grib_accessor_evaluate_t::dump(dumper); +} + +int grib_accessor_round_t::unpack_double(double* val, size_t* len) +{ int ret = GRIB_SUCCESS; size_t replen = 0; @@ -27,12 +39,12 @@ int grib_accessor_class_round_t::unpack_double(grib_accessor* a, double* val, si double toround = 0; const char* oval = NULL; - oval = grib_arguments_get_name(grib_handle_of_accessor(a), self->arg, 0); + oval = grib_arguments_get_name(grib_handle_of_accessor(this), arg_, 0); - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), oval, &toround)) != 0) + if ((ret = grib_get_double_internal(grib_handle_of_accessor(this), oval, &toround)) != 0) return ret; - rounding_precision = grib_arguments_get_long(grib_handle_of_accessor(a), self->arg, 1); + rounding_precision = grib_arguments_get_long(grib_handle_of_accessor(this), arg_, 1); rounded = floor(rounding_precision * toround + 0.5) / rounding_precision; @@ -43,7 +55,7 @@ int grib_accessor_class_round_t::unpack_double(grib_accessor* a, double* val, si return ret; } -int grib_accessor_class_round_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_round_t::unpack_string(char* val, size_t* len) { char result[1024]; int ret = GRIB_SUCCESS; @@ -51,7 +63,7 @@ int grib_accessor_class_round_t::unpack_string(grib_accessor* a, char* val, size double value = 0; - ret = unpack_double(a, &value, &replen); + ret = unpack_double(&value, &replen); snprintf(result, sizeof(result), "%.3f", value); diff --git a/src/accessor/grib_accessor_class_round.h b/src/accessor/grib_accessor_class_round.h index 364e24b34..096b0596c 100644 --- a/src/accessor/grib_accessor_class_round.h +++ b/src/accessor/grib_accessor_class_round.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,14 +15,12 @@ class grib_accessor_round_t : public grib_accessor_evaluate_t { public: - /* Members defined in round */ -}; - -class grib_accessor_class_round_t : public grib_accessor_class_evaluate_t -{ -public: - grib_accessor_class_round_t(const char* name) : grib_accessor_class_evaluate_t(name) {} + grib_accessor_round_t() : + grib_accessor_evaluate_t() { class_name_ = "round"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_round_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + void init(const long, grib_arguments*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; }; diff --git a/src/accessor/grib_accessor_class_scale.cc b/src/accessor/grib_accessor_class_scale.cc index 59ab7bfb4..284a9ed51 100644 --- a/src/accessor/grib_accessor_class_scale.cc +++ b/src/accessor/grib_accessor_class_scale.cc @@ -11,45 +11,42 @@ #include "grib_accessor_class_scale.h" -grib_accessor_class_scale_t _grib_accessor_class_scale{ "scale" }; -grib_accessor_class* grib_accessor_class_scale = &_grib_accessor_class_scale; +grib_accessor_scale_t _grib_accessor_scale{}; +grib_accessor* grib_accessor_scale = &_grib_accessor_scale; - -void grib_accessor_class_scale_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_scale_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_scale_t* self = (grib_accessor_scale_t*)a; + grib_accessor_double_t::init(l, c); int n = 0; - self->value = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->multiplier = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->divisor = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->truncating = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + value_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + multiplier_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + divisor_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + truncating_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); } -int grib_accessor_class_scale_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_scale_t::unpack_double(double* val, size_t* len) { - grib_accessor_scale_t* self = (grib_accessor_scale_t*)a; - int ret = 0; - long value = 0; - long multiplier = 0; - long divisor = 0; + int ret = 0; + long value = 0; + long multiplier = 0; + long divisor = 0; if (*len < 1) { ret = GRIB_ARRAY_TOO_SMALL; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "Accessor %s cannot gather value for %s and/or %s", - a->name, self->multiplier, self->divisor); + name_, multiplier, divisor_); return ret; } - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->divisor, &divisor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), divisor_, &divisor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->multiplier, &multiplier)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), multiplier_, &multiplier)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->value, &value)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), value_, &value)) != GRIB_SUCCESS) return ret; if (value == GRIB_MISSING_LONG) @@ -63,15 +60,14 @@ int grib_accessor_class_scale_t::unpack_double(grib_accessor* a, double* val, si return ret; } -int grib_accessor_class_scale_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_scale_t::pack_long(const long* val, size_t* len) { const double dval = (double)*val; - return pack_double(a, &dval, len); + return pack_double(&dval, len); } -int grib_accessor_class_scale_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_scale_t::pack_double(const double* val, size_t* len) { - grib_accessor_scale_t* self = (grib_accessor_scale_t*)a; int ret = 0; long value = 0; @@ -80,20 +76,20 @@ int grib_accessor_class_scale_t::pack_double(grib_accessor* a, const double* val long truncating = 0; double x; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->divisor, &divisor); + ret = grib_get_long_internal(grib_handle_of_accessor(this), divisor_, &divisor); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->multiplier, &multiplier); + ret = grib_get_long_internal(grib_handle_of_accessor(this), multiplier_, &multiplier); if (ret != GRIB_SUCCESS) return ret; - if (self->truncating) { - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->truncating, &truncating); + if (truncating_) { + ret = grib_get_long_internal(grib_handle_of_accessor(this), truncating_, &truncating); if (ret != GRIB_SUCCESS) return ret; } if (multiplier == 0) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s: cannot divide by a zero multiplier %s", - a->name, self->multiplier); + grib_context_log(context_, GRIB_LOG_ERROR, "Accessor %s: cannot divide by a zero multiplier %s", + name_, multiplier_); return GRIB_ENCODING_ERROR; } @@ -107,11 +103,11 @@ int grib_accessor_class_scale_t::pack_double(grib_accessor* a, const double* val value = x > 0 ? (long)(x + 0.5) : (long)(x - 0.5); } - ret = grib_set_long_internal(grib_handle_of_accessor(a), self->value, value); + ret = grib_set_long_internal(grib_handle_of_accessor(this), value_, value); if (ret) - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "Accessor %s: cannot pack value for %s (%s)\n", - a->name, self->value, grib_get_error_message(ret)); + name_, value_, grib_get_error_message(ret)); if (ret == GRIB_SUCCESS) *len = 1; @@ -119,20 +115,19 @@ int grib_accessor_class_scale_t::pack_double(grib_accessor* a, const double* val return ret; } -int grib_accessor_class_scale_t::is_missing(grib_accessor* a) +int grib_accessor_scale_t::is_missing() { - grib_accessor_scale_t* self = (grib_accessor_scale_t*)a; - grib_accessor* av = grib_find_accessor(grib_handle_of_accessor(a), self->value); + grib_accessor* av = grib_find_accessor(grib_handle_of_accessor(this), value_); if (!av) return GRIB_NOT_FOUND; return av->is_missing_internal(); // int ret=0; // long value=0; - // if((ret = grib_get_long_internal(grib_handle_of_accessor(a),self->value, &value))!= GRIB_SUCCESS){ - // grib_context_log(a->context, GRIB_LOG_ERROR, - // "Accessor %s cannot gather value for %s error %d \n", a->name, - // self->value, ret); + // if((ret = grib_get_long_internal(grib_handle_of_accessor(this),value_ , &value))!= GRIB_SUCCESS){ + // grib_context_log(context_ , GRIB_LOG_ERROR, + // "Accessor %s cannot gather value for %s error %d \n", name_ , + // value_ , ret); // return 0; // } // return (value == GRIB_MISSING_LONG); diff --git a/src/accessor/grib_accessor_class_scale.h b/src/accessor/grib_accessor_class_scale.h index 29b65f34b..932e6b30c 100644 --- a/src/accessor/grib_accessor_class_scale.h +++ b/src/accessor/grib_accessor_class_scale.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,21 +15,18 @@ class grib_accessor_scale_t : public grib_accessor_double_t { public: - /* Members defined in scale */ - const char* value; - const char* multiplier; - const char* divisor; - const char* truncating; -}; - -class grib_accessor_class_scale_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_scale_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_scale_t() : + grib_accessor_double_t() { class_name_ = "scale"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_scale_t{}; } - int is_missing(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int is_missing() override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* value_ = nullptr; + const char* multiplier_ = nullptr; + const char* divisor_ = nullptr; + const char* truncating_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_scale_values.cc b/src/accessor/grib_accessor_class_scale_values.cc index 03072311d..651603254 100644 --- a/src/accessor/grib_accessor_class_scale_values.cc +++ b/src/accessor/grib_accessor_class_scale_values.cc @@ -11,22 +11,20 @@ #include "grib_accessor_class_scale_values.h" -grib_accessor_class_scale_values_t _grib_accessor_class_scale_values{ "scale_values" }; -grib_accessor_class* grib_accessor_class_scale_values = &_grib_accessor_class_scale_values; +grib_accessor_scale_values_t _grib_accessor_scale_values{}; +grib_accessor* grib_accessor_scale_values = &_grib_accessor_scale_values; - -void grib_accessor_class_scale_values_t::init(grib_accessor* a, const long l, grib_arguments* args) +void grib_accessor_scale_values_t::init(const long l, grib_arguments* args) { - grib_accessor_class_double_t::init(a, l, args); - int n = 0; - grib_accessor_scale_values_t* self = (grib_accessor_scale_values_t*)a; - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->missingValue = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + grib_accessor_double_t::init(l, args); + int n = 0; + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + missingValue_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -int grib_accessor_class_scale_values_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_scale_values_t::unpack_double(double* val, size_t* len) { int ret = GRIB_SUCCESS; *val = 1; @@ -34,35 +32,34 @@ int grib_accessor_class_scale_values_t::unpack_double(grib_accessor* a, double* return ret; } -int grib_accessor_class_scale_values_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_scale_values_t::pack_double(const double* val, size_t* len) { double* values = NULL; double missingValue = 0; long missingValuesPresent = 0; size_t size = 0; int ret = 0, i = 0; - grib_accessor_scale_values_t* self = (grib_accessor_scale_values_t*)a; - const grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + const grib_context* c = context_; + grib_handle* h = grib_handle_of_accessor(this); if (*val == 1) return GRIB_SUCCESS; - if ((ret = grib_get_double_internal(h, self->missingValue, &missingValue)) != GRIB_SUCCESS) { + if ((ret = grib_get_double_internal(h, missingValue_, &missingValue)) != GRIB_SUCCESS) { return ret; } if ((ret = grib_get_long_internal(h, "missingValuesPresent", &missingValuesPresent)) != GRIB_SUCCESS) { return ret; } - if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) return ret; values = (double*)grib_context_malloc(c, size * sizeof(double)); if (!values) return GRIB_OUT_OF_MEMORY; - if ((ret = grib_get_double_array_internal(h, self->values, values, &size)) != GRIB_SUCCESS) { + if ((ret = grib_get_double_array_internal(h, values_, values, &size)) != GRIB_SUCCESS) { grib_context_free(c, values); return ret; } @@ -77,7 +74,7 @@ int grib_accessor_class_scale_values_t::pack_double(grib_accessor* a, const doub } } - if ((ret = grib_set_double_array_internal(h, self->values, values, size)) != GRIB_SUCCESS) { + if ((ret = grib_set_double_array_internal(h, values_, values, size)) != GRIB_SUCCESS) { grib_context_free(c, values); return ret; } diff --git a/src/accessor/grib_accessor_class_scale_values.h b/src/accessor/grib_accessor_class_scale_values.h index f004db30e..ed10c74b7 100644 --- a/src/accessor/grib_accessor_class_scale_values.h +++ b/src/accessor/grib_accessor_class_scale_values.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,14 @@ class grib_accessor_scale_values_t : public grib_accessor_double_t { public: - /* Members defined in scale_values */ - const char* values; - const char* missingValue; -}; - -class grib_accessor_class_scale_values_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_scale_values_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_scale_values_t() : + grib_accessor_double_t() { class_name_ = "scale_values"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_scale_values_t{}; } - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; + const char* missingValue_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_second_order_bits_per_value.cc b/src/accessor/grib_accessor_class_second_order_bits_per_value.cc index 8d5f4b99f..1cdad1545 100644 --- a/src/accessor/grib_accessor_class_second_order_bits_per_value.cc +++ b/src/accessor/grib_accessor_class_second_order_bits_per_value.cc @@ -11,9 +11,8 @@ #include "grib_accessor_class_second_order_bits_per_value.h" #include "grib_scaling.h" -grib_accessor_class_second_order_bits_per_value_t _grib_accessor_class_second_order_bits_per_value{ "second_order_bits_per_value" }; -grib_accessor_class* grib_accessor_class_second_order_bits_per_value = &_grib_accessor_class_second_order_bits_per_value; - +grib_accessor_second_order_bits_per_value_t _grib_accessor_second_order_bits_per_value{}; +grib_accessor* grib_accessor_second_order_bits_per_value = &_grib_accessor_second_order_bits_per_value; static const size_t nbits[64] = { 0x1, 0x2, 0x4, 0x8, @@ -38,7 +37,7 @@ static int number_of_bits(size_t x, long* result) { const size_t* n = nbits; const int count = sizeof(nbits) / sizeof(nbits[0]); - *result = 0; + *result = 0; while (x >= *n) { n++; (*result)++; @@ -49,29 +48,27 @@ static int number_of_bits(size_t x, long* result) return GRIB_SUCCESS; } -void grib_accessor_class_second_order_bits_per_value_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_second_order_bits_per_value_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - int n = 0; - grib_accessor_second_order_bits_per_value_t* self = (grib_accessor_second_order_bits_per_value_t*)a; - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->binaryScaleFactor = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->decimalScaleFactor = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->bitsPerValue = 0; + grib_accessor_long_t::init(l, c); + int n = 0; + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + binaryScaleFactor_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + decimalScaleFactor_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + bitsPerValue_ = 0; - a->length = 0; + length_ = 0; } -int grib_accessor_class_second_order_bits_per_value_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_second_order_bits_per_value_t::pack_long(const long* val, size_t* len) { - grib_accessor_second_order_bits_per_value_t* self = (grib_accessor_second_order_bits_per_value_t*)a; - self->bitsPerValue = (long)*val; - *len = 1; + bitsPerValue_ = (long)*val; + *len = 1; return GRIB_SUCCESS; } -int grib_accessor_class_second_order_bits_per_value_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_second_order_bits_per_value_t::unpack_long(long* val, size_t* len) { int ret = GRIB_SUCCESS; size_t size = 0; @@ -80,29 +77,28 @@ int grib_accessor_class_second_order_bits_per_value_t::unpack_long(grib_accessor double* values = 0; long binaryScaleFactor, decimalScaleFactor; - grib_accessor_second_order_bits_per_value_t* self = (grib_accessor_second_order_bits_per_value_t*)a; - if (self->bitsPerValue) { - *val = self->bitsPerValue; + if (bitsPerValue_) { + *val = bitsPerValue_; return GRIB_SUCCESS; } - if ((ret = grib_get_size(grib_handle_of_accessor(a), self->values, &size)) != GRIB_SUCCESS) { - *val = self->bitsPerValue; + if ((ret = grib_get_size(grib_handle_of_accessor(this), values_, &size)) != GRIB_SUCCESS) { + *val = bitsPerValue_; return GRIB_SUCCESS; } - if ((ret = grib_get_long(grib_handle_of_accessor(a), self->binaryScaleFactor, &binaryScaleFactor)) != GRIB_SUCCESS) + if ((ret = grib_get_long(grib_handle_of_accessor(this), binaryScaleFactor_, &binaryScaleFactor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->decimalScaleFactor, &decimalScaleFactor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), decimalScaleFactor_, &decimalScaleFactor)) != GRIB_SUCCESS) return ret; - values = (double*)grib_context_malloc_clear(a->context, sizeof(double) * size); + values = (double*)grib_context_malloc_clear(context_, sizeof(double) * size); if (!values) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Memory allocation error: %zu bytes", a->name, size); + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Memory allocation error: %zu bytes", name_, size); return GRIB_OUT_OF_MEMORY; } - if ((ret = grib_get_double_array_internal(grib_handle_of_accessor(a), self->values, values, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_double_array_internal(grib_handle_of_accessor(this), values_, values, &size)) != GRIB_SUCCESS) return ret; max = values[0]; @@ -117,14 +113,14 @@ int grib_accessor_class_second_order_bits_per_value_t::unpack_long(grib_accessor d = codes_power(decimalScaleFactor, 10); b = codes_power(-binaryScaleFactor, 2); - /* self->bitsPerValue=(long)ceil(log((double)((max-min)*d+1))/log(2.0))-binaryScaleFactor; */ + /* bitsPerValue_ =(long)ceil(log((double)((max-min)*d+1))/log(2.0))-binaryScaleFactor; */ /* See GRIB-540 for why we use ceil */ - ret = number_of_bits((size_t)ceil((fabs(max - min) * b * d)), &(self->bitsPerValue)); + ret = number_of_bits((size_t)ceil((fabs(max - min) * b * d)), &(bitsPerValue_)); if (ret != GRIB_SUCCESS) return ret; - *val = self->bitsPerValue; + *val = bitsPerValue_; - grib_context_free(a->context, values); + grib_context_free(context_, values); return ret; } diff --git a/src/accessor/grib_accessor_class_second_order_bits_per_value.h b/src/accessor/grib_accessor_class_second_order_bits_per_value.h index c3459db41..08351480f 100644 --- a/src/accessor/grib_accessor_class_second_order_bits_per_value.h +++ b/src/accessor/grib_accessor_class_second_order_bits_per_value.h @@ -16,19 +16,16 @@ class grib_accessor_second_order_bits_per_value_t : public grib_accessor_long_t { public: - /* Members defined in second_order_bits_per_value */ - const char* values; - const char* binaryScaleFactor; - const char* decimalScaleFactor; - long bitsPerValue; -}; - -class grib_accessor_class_second_order_bits_per_value_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_second_order_bits_per_value_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_second_order_bits_per_value_t() : + grib_accessor_long_t() { class_name_ = "second_order_bits_per_value"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_second_order_bits_per_value_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; + const char* binaryScaleFactor_ = nullptr; + const char* decimalScaleFactor_ = nullptr; + long bitsPerValue_ = 0; }; diff --git a/src/accessor/grib_accessor_class_section.cc b/src/accessor/grib_accessor_class_section.cc index 8abb7aa01..27544d0a2 100644 --- a/src/accessor/grib_accessor_class_section.cc +++ b/src/accessor/grib_accessor_class_section.cc @@ -10,84 +10,84 @@ #include "grib_accessor_class_section.h" -grib_accessor_class_section_t _grib_accessor_class_section{ "section" }; -grib_accessor_class* grib_accessor_class_section = &_grib_accessor_class_section; +grib_accessor_section_t _grib_accessor_section{}; +grib_accessor* grib_accessor_section = &_grib_accessor_section; - -void grib_accessor_class_section_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_section_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - a->sub_section = grib_section_create(grib_handle_of_accessor(a), a); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_gen_t::init(len, arg); + sub_section_ = grib_section_create(grib_handle_of_accessor(this), this); + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -void grib_accessor_class_section_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_section_t::dump(grib_dumper* dumper) { - grib_dump_section(dumper, a, a->sub_section->block); + grib_dump_section(dumper, this, sub_section_->block); } -long grib_accessor_class_section_t::byte_count(grib_accessor* a) +long grib_accessor_section_t::byte_count() { - if (!a->length || grib_handle_of_accessor(a)->loader) { - if (a->name[1] == '_') + if (!length_ || grib_handle_of_accessor(this)->loader) { + if (name_[1] == '_') return 0; - //printf("adjusting sizes SECTION %s is %ld %ld\n",a->name,(long)a->offset,(long)a->length); - grib_section_adjust_sizes(a->sub_section, grib_handle_of_accessor(a)->loader != NULL, 0); - //printf(" SECTION %s is %ld %ld\n",a->name,(long)a->offset,(long)a->length); + /* printf("adjusting sizes SECTION %s is %ld %ld\n",a->name,(long)a->offset,(long)length_ ); */ + grib_section_adjust_sizes(sub_section_, grib_handle_of_accessor(this)->loader != NULL, 0); + /* printf(" SECTION %s is %ld %ld\n",a->name,(long)a->offset,(long)length_ ); */ } - // printf("SECTION %s is %ld %d\n",a->name,a->length,a->sub_section->aclength != NULL); - return a->length; + /* printf("SECTION %s is %ld %d\n",a->name,a->length,sub_section_ ->aclength != NULL); */ + return length_; } -long grib_accessor_class_section_t::next_offset(grib_accessor* a) +long grib_accessor_section_t::next_offset() { - return a->offset + a->byte_count(); + return offset_ + byte_count(); } -void grib_accessor_class_section_t::destroy(grib_context* ct, grib_accessor* a) +void grib_accessor_section_t::destroy(grib_context* ct) { - grib_section_delete(ct, a->sub_section); - grib_accessor_class_gen_t::destroy(ct, a); + grib_section_delete(ct, sub_section_); + grib_accessor_gen_t::destroy(ct); } -int grib_accessor_class_section_t::get_native_type(grib_accessor* a) +long grib_accessor_section_t::get_native_type() { return GRIB_TYPE_SECTION; } -grib_section* grib_accessor_class_section_t::sub_section(grib_accessor* a) +grib_section* grib_accessor_section_t::sub_section() { - return a->sub_section; + return sub_section_; } -void grib_accessor_class_section_t::update_size(grib_accessor* a, size_t length) +void grib_accessor_section_t::update_size(size_t length) { size_t size = 1; long len = length; Assert(length <= 0x7fffffff); - if (a->sub_section->aclength) { - int e = a->sub_section->aclength->pack_long(&len, &size); + if (sub_section_->aclength) { + int e = sub_section_->aclength->pack_long(&len, &size); Assert(e == GRIB_SUCCESS); - // printf("update_length %s %ld %ld\n", a->sub_section->aclength->name, - // (long)a->sub_section->aclength->offset, - // (long)a->sub_section->aclength->length); + // printf("update_length %s %ld %ld\n", sub_section_ ->aclength->name, + // (long)sub_section_ ->aclength->offset, + // (long)sub_section_ ->aclength->length); } - a->sub_section->length = a->length = length; - a->sub_section->padding = 0; + sub_section_->length = length_ = length; + sub_section_->padding = 0; - // printf("update_size %s %ld\n", a->name, a->length); - Assert(a->length >= 0); + // printf("update_size %s %ld\n", a->name, length_ ); + + Assert(length_ >= 0); } -grib_accessor* grib_accessor_class_section_t::next(grib_accessor* a, int explore) +grib_accessor* grib_accessor_section_t::next(grib_accessor* a, int explore) { grib_accessor* next = NULL; if (explore) { - next = a->sub_section->block->first; + next = a->sub_section_->block->first; if (!next) next = a->next_; } @@ -95,8 +95,8 @@ grib_accessor* grib_accessor_class_section_t::next(grib_accessor* a, int explore next = a->next_; } if (!next) { - if (a->parent->owner) - next = a->parent->owner->cclass->next(a->parent->owner, 0); + if (a->parent_->owner) + next = a->parent_->owner->next(a->parent_->owner, 0); } return next; } diff --git a/src/accessor/grib_accessor_class_section.h b/src/accessor/grib_accessor_class_section.h index 8dbd831cc..a5bb4308e 100644 --- a/src/accessor/grib_accessor_class_section.h +++ b/src/accessor/grib_accessor_class_section.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -13,20 +12,19 @@ #include "grib_accessor_class_gen.h" -class grib_accessor_section_t : public grib_accessor_gen_t {}; - -class grib_accessor_class_section_t : public grib_accessor_class_gen_t +class grib_accessor_section_t : public grib_accessor_gen_t { public: - grib_accessor_class_section_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_section_t() : + grib_accessor_gen_t() { class_name_ = "section"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_section_t{}; } - int get_native_type(grib_accessor*) override; - long byte_count(grib_accessor*) override; - long next_offset(grib_accessor*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; - grib_section* sub_section(grib_accessor*) override; + long get_native_type() override; + long byte_count() override; + long next_offset() override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + grib_section* sub_section() override; grib_accessor* next(grib_accessor*, int) override; }; diff --git a/src/accessor/grib_accessor_class_section_length.cc b/src/accessor/grib_accessor_class_section_length.cc index 8be4cad56..209a0e872 100644 --- a/src/accessor/grib_accessor_class_section_length.cc +++ b/src/accessor/grib_accessor_class_section_length.cc @@ -10,26 +10,25 @@ #include "grib_accessor_class_section_length.h" -grib_accessor_class_section_length_t _grib_accessor_class_section_length{ "section_length" }; -grib_accessor_class* grib_accessor_class_section_length = &_grib_accessor_class_section_length; +grib_accessor_section_length_t _grib_accessor_section_length{}; +grib_accessor* grib_accessor_section_length = &_grib_accessor_section_length; - -void grib_accessor_class_section_length_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_section_length_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_unsigned_t::init(a, len, arg); - a->parent->aclength = a; - a->length = len; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; - Assert(a->length >= 0); + grib_accessor_unsigned_t::init(len, arg); + parent_->aclength = this; + length_ = len; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + Assert(length_ >= 0); } -void grib_accessor_class_section_length_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_section_length_t::dump(grib_dumper* dumper) { - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); } -int grib_accessor_class_section_length_t::value_count(grib_accessor* a, long* c) +int grib_accessor_section_length_t::value_count(long* c) { *c = 1; return 0; diff --git a/src/accessor/grib_accessor_class_section_length.h b/src/accessor/grib_accessor_class_section_length.h index e7965b9b1..c60d90ec9 100644 --- a/src/accessor/grib_accessor_class_section_length.h +++ b/src/accessor/grib_accessor_class_section_length.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,15 +15,10 @@ class grib_accessor_section_length_t : public grib_accessor_unsigned_t { public: - /* Members defined in section_length */ -}; - -class grib_accessor_class_section_length_t : public grib_accessor_class_unsigned_t -{ -public: - grib_accessor_class_section_length_t(const char* name) : grib_accessor_class_unsigned_t(name) {} + grib_accessor_section_length_t() : + grib_accessor_unsigned_t() { class_name_ = "section_length"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_section_length_t{}; } - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_section_padding.cc b/src/accessor/grib_accessor_class_section_padding.cc index f811313d6..a1972fe55 100644 --- a/src/accessor/grib_accessor_class_section_padding.cc +++ b/src/accessor/grib_accessor_class_section_padding.cc @@ -10,31 +10,28 @@ #include "grib_accessor_class_section_padding.h" -grib_accessor_class_section_padding_t _grib_accessor_class_section_padding{ "section_padding" }; -grib_accessor_class* grib_accessor_class_section_padding = &_grib_accessor_class_section_padding; +grib_accessor_section_padding_t _grib_accessor_section_padding{}; +grib_accessor* grib_accessor_section_padding = &_grib_accessor_section_padding; - -size_t grib_accessor_class_section_padding_t::preferred_size(grib_accessor* a, int from_handle) +size_t grib_accessor_section_padding_t::preferred_size(int from_handle) { - grib_accessor_section_padding_t* self = (grib_accessor_section_padding_t*)a; - - grib_accessor* b = a; + grib_accessor* b = this; grib_accessor* section_length = 0; long length = 0; size_t size = 1; long alength = 0; if (!from_handle) { - if (self->preserve) - return a->length; + if (preserve_) + return length_; else return 0; } /* The section length should be a parameter */ while (section_length == NULL && b != NULL) { - section_length = b->parent->aclength; - b = b->parent->owner; + section_length = b->parent_->aclength; + b = b->parent_->owner; } if (!section_length) { @@ -44,16 +41,16 @@ size_t grib_accessor_class_section_padding_t::preferred_size(grib_accessor* a, i if (section_length->unpack_long(&length, &size) == GRIB_SUCCESS) { if (length) - alength = length - a->offset + section_length->parent->owner->offset; + alength = length - offset_ + section_length->parent_->owner->offset_; else alength = 0; - /*Assert(a->length>=0);*/ + /*Assert(length_ >=0);*/ if (alength < 0) alength = 0; - /* printf("PADDING is %ld\n",a->length); */ + /* printf("PADDING is %ld\n",length_ ); */ } else { /* printf("PADDING unpack fails\n"); */ @@ -62,10 +59,9 @@ size_t grib_accessor_class_section_padding_t::preferred_size(grib_accessor* a, i return alength; } -void grib_accessor_class_section_padding_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_section_padding_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_padding_t::init(a, len, arg); - grib_accessor_section_padding_t* self = (grib_accessor_section_padding_t*)a; - self->preserve = 1; /* This should be a parameter */ - a->length = preferred_size(a, 1); + grib_accessor_padding_t::init(len, arg); + preserve_ = 1; /* This should be a parameter */ + length_ = preferred_size(1); } diff --git a/src/accessor/grib_accessor_class_section_padding.h b/src/accessor/grib_accessor_class_section_padding.h index f35da4977..561018acb 100644 --- a/src/accessor/grib_accessor_class_section_padding.h +++ b/src/accessor/grib_accessor_class_section_padding.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,15 +15,12 @@ class grib_accessor_section_padding_t : public grib_accessor_padding_t { public: - /* Members defined in section_padding */ - int preserve; -}; - -class grib_accessor_class_section_padding_t : public grib_accessor_class_padding_t -{ -public: - grib_accessor_class_section_padding_t(const char* name) : grib_accessor_class_padding_t(name) {} + grib_accessor_section_padding_t() : + grib_accessor_padding_t() { class_name_ = "section_padding"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_section_padding_t{}; } - void init(grib_accessor*, const long, grib_arguments*) override; - size_t preferred_size(grib_accessor*, int) override; + void init(const long, grib_arguments*) override; + size_t preferred_size(int) override; + +private: + int preserve_ = 0; }; diff --git a/src/accessor/grib_accessor_class_section_pointer.cc b/src/accessor/grib_accessor_class_section_pointer.cc index c7735d504..c584bf7c3 100644 --- a/src/accessor/grib_accessor_class_section_pointer.cc +++ b/src/accessor/grib_accessor_class_section_pointer.cc @@ -10,88 +10,84 @@ #include "grib_accessor_class_section_pointer.h" -grib_accessor_class_section_pointer_t _grib_accessor_class_section_pointer{ "section_pointer" }; -grib_accessor_class* grib_accessor_class_section_pointer = &_grib_accessor_class_section_pointer; +grib_accessor_section_pointer_t _grib_accessor_section_pointer{}; +grib_accessor* grib_accessor_section_pointer = &_grib_accessor_section_pointer; - -void grib_accessor_class_section_pointer_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_section_pointer_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_accessor_section_pointer_t* self = (grib_accessor_section_pointer_t*)a; + grib_accessor_gen_t::init(len, arg); - int n = 0; - self->sectionOffset = grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++); - self->sectionLength = grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++); - self->sectionNumber = grib_arguments_get_long(grib_handle_of_accessor(a), arg, n++); + int n = 0; + sectionOffset_ = grib_arguments_get_name(grib_handle_of_accessor(this), arg, n++); + sectionLength_ = grib_arguments_get_name(grib_handle_of_accessor(this), arg, n++); + sectionNumber_ = grib_arguments_get_long(grib_handle_of_accessor(this), arg, n++); - Assert(self->sectionNumber < MAX_NUM_SECTIONS); + Assert(sectionNumber_ < MAX_NUM_SECTIONS); - grib_handle_of_accessor(a)->section_offset[self->sectionNumber] = (char*)self->sectionOffset; - grib_handle_of_accessor(a)->section_length[self->sectionNumber] = (char*)self->sectionLength; + grib_handle_of_accessor(this)->section_offset[sectionNumber_] = (char*)sectionOffset_; + grib_handle_of_accessor(this)->section_length[sectionNumber_] = (char*)sectionLength_; - // printf("++++++++++++++ creating section_pointer%d %s %s\n", - // self->sectionNumber,self->sectionLength,self->sectionLength); + /* printf("++++++++++++++ GRIB_API: creating section_pointer%d %s %s\n", */ + /* sectionNumber,sectionLength,sectionLength_ ); */ - if (grib_handle_of_accessor(a)->sections_count < self->sectionNumber) - grib_handle_of_accessor(a)->sections_count = self->sectionNumber; + if (grib_handle_of_accessor(this)->sections_count < sectionNumber_) + grib_handle_of_accessor(this)->sections_count = sectionNumber_; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; - a->length = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_HIDDEN; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + flags_ |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + length_ = 0; } -int grib_accessor_class_section_pointer_t::get_native_type(grib_accessor* a) +long grib_accessor_section_pointer_t::get_native_type() { return GRIB_TYPE_BYTES; } -int grib_accessor_class_section_pointer_t::unpack_string(grib_accessor* a, char* v, size_t* len) +int grib_accessor_section_pointer_t::unpack_string(char* v, size_t* len) { // unsigned char* p=NULL; // char* s=v; // int i; - // long length=a->byte_count(); + // long length=byte_count(); // if (*len < length) return GRIB_ARRAY_TOO_SMALL; - - // p = grib_handle_of_accessor(a)->buffer->data + a->byte_offset(); + // + // p = grib_handle_of_accessor(this)->buffer->data + byte_offset(); // for (i = 0; i < length; i++) { // snprintf (s,64,"%02x", *(p++)); // s+=2; // } // *len=length; - snprintf(v, 64, "%ld_%ld", a->byte_offset(), a->byte_count()); + snprintf(v, 64, "%ld_%ld", byte_offset(), byte_count()); return GRIB_SUCCESS; } -long grib_accessor_class_section_pointer_t::byte_count(grib_accessor* a) +long grib_accessor_section_pointer_t::byte_count() { - grib_accessor_section_pointer_t* self = (grib_accessor_section_pointer_t*)a; long sectionLength = 0; - int err = grib_get_long(grib_handle_of_accessor(a), self->sectionLength, §ionLength); - if (err) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "grib_accessor_class_section_pointer_t::byte_count: Unable to get %s %s", - self->sectionLength, grib_get_error_message(err)); + int ret = grib_get_long(grib_handle_of_accessor(this), sectionLength_, §ionLength); + if (ret) { + grib_context_log(context_, GRIB_LOG_ERROR, + "Unable to get %s %s", + sectionLength_, grib_get_error_message(ret)); return -1; } return sectionLength; } -long grib_accessor_class_section_pointer_t::byte_offset(grib_accessor* a) +long grib_accessor_section_pointer_t::byte_offset() { - grib_accessor_section_pointer_t* self = (grib_accessor_section_pointer_t*)a; long sectionOffset = 0; - int err = grib_get_long(grib_handle_of_accessor(a), self->sectionOffset, §ionOffset); - if (err) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "grib_accessor_class_section_pointer_t::byte_offset: Unable to get %s (%s)", - self->sectionOffset, grib_get_error_message(err)); + int ret = grib_get_long(grib_handle_of_accessor(this), sectionOffset_, §ionOffset); + if (ret) { + grib_context_log(context_, GRIB_LOG_ERROR, + "Unable to get %s %s", + sectionOffset_, grib_get_error_message(ret)); return -1; } diff --git a/src/accessor/grib_accessor_class_section_pointer.h b/src/accessor/grib_accessor_class_section_pointer.h index 569e20201..469ac8c37 100644 --- a/src/accessor/grib_accessor_class_section_pointer.h +++ b/src/accessor/grib_accessor_class_section_pointer.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,20 +15,17 @@ class grib_accessor_section_pointer_t : public grib_accessor_gen_t { public: - /* Members defined in section_pointer */ - const char* sectionOffset; - const char* sectionLength; - long sectionNumber; -}; - -class grib_accessor_class_section_pointer_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_section_pointer_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_section_pointer_t() : + grib_accessor_gen_t() { class_name_ = "section_pointer"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_section_pointer_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - long byte_count(grib_accessor*) override; - long byte_offset(grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_string(char*, size_t* len) override; + long byte_count() override; + long byte_offset() override; + void init(const long, grib_arguments*) override; + +private: + const char* sectionOffset_ = nullptr; + const char* sectionLength_ = nullptr; + long sectionNumber_ = 0; }; diff --git a/src/accessor/grib_accessor_class_select_step_template.cc b/src/accessor/grib_accessor_class_select_step_template.cc index d2c5eeb6a..e37f62fa3 100644 --- a/src/accessor/grib_accessor_class_select_step_template.cc +++ b/src/accessor/grib_accessor_class_select_step_template.cc @@ -10,39 +10,36 @@ #include "grib_accessor_class_select_step_template.h" -grib_accessor_class_select_step_template_t _grib_accessor_class_select_step_template{ "select_step_template" }; -grib_accessor_class* grib_accessor_class_select_step_template = &_grib_accessor_class_select_step_template; +grib_accessor_select_step_template_t _grib_accessor_select_step_template{}; +grib_accessor* grib_accessor_select_step_template = &_grib_accessor_select_step_template; - -void grib_accessor_class_select_step_template_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_select_step_template_t::init(const long l, grib_arguments* c) { - grib_accessor_class_unsigned_t::init(a, l, c); - grib_accessor_select_step_template_t* self = (grib_accessor_select_step_template_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_unsigned_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - self->productDefinitionTemplateNumber = grib_arguments_get_name(hand, c, n++); - self->instant = grib_arguments_get_long(hand, c, n++); + productDefinitionTemplateNumber_ = grib_arguments_get_name(hand, c, n++); + instant_ = grib_arguments_get_long(hand, c, n++); } -int grib_accessor_class_select_step_template_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_select_step_template_t::unpack_long(long* val, size_t* len) { *val = 1; return GRIB_SUCCESS; } -int grib_accessor_class_select_step_template_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_select_step_template_t::pack_long(const long* val, size_t* len) { - grib_accessor_select_step_template_t* self = (grib_accessor_select_step_template_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - long productDefinitionTemplateNumber = 0; - long productDefinitionTemplateNumberNew = 0; + grib_handle* hand = grib_handle_of_accessor(this); + long productDefinitionTemplateNumber = 0; + long productDefinitionTemplateNumberNew = 0; - grib_get_long(hand, self->productDefinitionTemplateNumber, &productDefinitionTemplateNumber); + grib_get_long(hand, productDefinitionTemplateNumber_, &productDefinitionTemplateNumber); // DET = deterministic i.e., not ensemble // ENS = ensemble system - if (self->instant) { + if (instant_) { // Going from continuous or non-continuous interval to a point-in-time (instantaneous) switch (productDefinitionTemplateNumber) { case 8: @@ -78,12 +75,21 @@ int grib_accessor_class_select_step_template_t::pack_long(grib_accessor* a, cons case 47: // ENS aerosol productDefinitionTemplateNumberNew = 45; break; + case 67: // DET chemical distrib func productDefinitionTemplateNumberNew = 57; break; case 68: // ENS chemical distrib func productDefinitionTemplateNumberNew = 58; break; + + case 78: // DET chemical source/sink + productDefinitionTemplateNumberNew = 76; + break; + case 79: // ENS chemical source/sink + productDefinitionTemplateNumberNew = 77; + break; + case 72: // DET post-processing productDefinitionTemplateNumberNew = 70; break; @@ -139,12 +145,21 @@ int grib_accessor_class_select_step_template_t::pack_long(grib_accessor* a, cons case 45: // ENS aerosol productDefinitionTemplateNumberNew = 85; // 47 is deprecated break; + case 57: // DET chemical distrib func productDefinitionTemplateNumberNew = 67; break; case 58: // ENS chemical distrib func productDefinitionTemplateNumberNew = 68; break; + + case 76: // DET chemical source/sink + productDefinitionTemplateNumberNew = 78; + break; + case 77: // ENS chemical source/sink + productDefinitionTemplateNumberNew = 79; + break; + case 70: // DET post-processing productDefinitionTemplateNumberNew = 72; break; @@ -168,13 +183,13 @@ int grib_accessor_class_select_step_template_t::pack_long(grib_accessor* a, cons } if (productDefinitionTemplateNumber != productDefinitionTemplateNumberNew) { - grib_set_long(hand, self->productDefinitionTemplateNumber, productDefinitionTemplateNumberNew); + grib_set_long(hand, productDefinitionTemplateNumber_, productDefinitionTemplateNumberNew); } return GRIB_SUCCESS; } -int grib_accessor_class_select_step_template_t::value_count(grib_accessor* a, long* c) +int grib_accessor_select_step_template_t::value_count(long* c) { *c = 1; return 0; diff --git a/src/accessor/grib_accessor_class_select_step_template.h b/src/accessor/grib_accessor_class_select_step_template.h index e327a99da..b39b0693e 100644 --- a/src/accessor/grib_accessor_class_select_step_template.h +++ b/src/accessor/grib_accessor_class_select_step_template.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,18 +15,15 @@ class grib_accessor_select_step_template_t : public grib_accessor_unsigned_t { public: - /* Members defined in select_step_template */ - const char* productDefinitionTemplateNumber; - int instant; -}; - -class grib_accessor_class_select_step_template_t : public grib_accessor_class_unsigned_t -{ -public: - grib_accessor_class_select_step_template_t(const char* name) : grib_accessor_class_unsigned_t(name) {} + grib_accessor_select_step_template_t() : + grib_accessor_unsigned_t() { class_name_ = "select_step_template"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_select_step_template_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* productDefinitionTemplateNumber_ = nullptr; + int instant_ = 0; }; diff --git a/src/accessor/grib_accessor_class_sexagesimal2decimal.cc b/src/accessor/grib_accessor_class_sexagesimal2decimal.cc index c43c7269c..a95cd4fe9 100644 --- a/src/accessor/grib_accessor_class_sexagesimal2decimal.cc +++ b/src/accessor/grib_accessor_class_sexagesimal2decimal.cc @@ -10,44 +10,43 @@ #include "grib_accessor_class_sexagesimal2decimal.h" -grib_accessor_class_sexagesimal2decimal_t _grib_accessor_class_sexagesimal2decimal{ "sexagesimal2decimal" }; -grib_accessor_class* grib_accessor_class_sexagesimal2decimal = &_grib_accessor_class_sexagesimal2decimal; +grib_accessor_sexagesimal2decimal_t _grib_accessor_sexagesimal2decimal{}; +grib_accessor* grib_accessor_sexagesimal2decimal = &_grib_accessor_sexagesimal2decimal; - -void grib_accessor_class_sexagesimal2decimal_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_sexagesimal2decimal_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_to_double_t::init(a, len, arg); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_to_double_t::init(len, arg); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -void grib_accessor_class_sexagesimal2decimal_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_sexagesimal2decimal_t::dump(grib_dumper* dumper) { - grib_dump_double(dumper, a, NULL); + grib_dump_double(dumper, this, NULL); } -int grib_accessor_class_sexagesimal2decimal_t::get_native_type(grib_accessor* a) +long grib_accessor_sexagesimal2decimal_t::get_native_type() { return GRIB_TYPE_DOUBLE; } -int grib_accessor_class_sexagesimal2decimal_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_sexagesimal2decimal_t::unpack_string(char* val, size_t* len) { - grib_accessor_sexagesimal2decimal_t* self = (grib_accessor_sexagesimal2decimal_t*)a; - int err = 0; - char buff[512] = {0,}; + char buff[512] = { + 0, + }; size_t length = 0; size_t size = sizeof(buff); - char* p = 0; - char* q = 0; + char* p = 0; + char* q = 0; double dd, mm = 0, ss = 0; int dd_sign = 1; - err = grib_get_string(grib_handle_of_accessor(a), self->key, buff, &size); + err = grib_get_string(grib_handle_of_accessor(this), key_, buff, &size); if (err) return err; - q = buff + self->start; - if (self->length) + q = buff + start_; + if (length_) q[length] = 0; p = q; @@ -137,8 +136,8 @@ int grib_accessor_class_sexagesimal2decimal_t::unpack_string(grib_accessor* a, c length = strlen(buff); if (len[0] < length + 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%lu) for %s, it contains %ld values", - len[0], a->name, a->length + 1); + grib_context_log(context_, GRIB_LOG_ERROR, "unpack_string: Wrong size (%lu) for %s, it contains %ld values", + len[0], name_, length_ + 1); len[0] = 0; return GRIB_ARRAY_TOO_SMALL; } diff --git a/src/accessor/grib_accessor_class_sexagesimal2decimal.h b/src/accessor/grib_accessor_class_sexagesimal2decimal.h index d9051bca9..4f98951bb 100644 --- a/src/accessor/grib_accessor_class_sexagesimal2decimal.h +++ b/src/accessor/grib_accessor_class_sexagesimal2decimal.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,11 @@ class grib_accessor_sexagesimal2decimal_t : public grib_accessor_to_double_t { public: - /* Members defined in sexagesimal2decimal */ -}; - -class grib_accessor_class_sexagesimal2decimal_t : public grib_accessor_class_to_double_t -{ -public: - grib_accessor_class_sexagesimal2decimal_t(const char* name) : grib_accessor_class_to_double_t(name) {} + grib_accessor_sexagesimal2decimal_t() : + grib_accessor_to_double_t() { class_name_ = "sexagesimal2decimal"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_sexagesimal2decimal_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_string(char*, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; }; diff --git a/src/accessor/grib_accessor_class_signed.cc b/src/accessor/grib_accessor_class_signed.cc index 36c20bd59..d3b34203e 100644 --- a/src/accessor/grib_accessor_class_signed.cc +++ b/src/accessor/grib_accessor_class_signed.cc @@ -10,32 +10,31 @@ */ #include "grib_accessor_class_signed.h" +#include "ecc_numeric_limits.h" -grib_accessor_class_signed_t _grib_accessor_class_signed{ "signed" }; -grib_accessor_class* grib_accessor_class_signed = &_grib_accessor_class_signed; +grib_accessor_signed_t _grib_accessor_signed{}; +grib_accessor* grib_accessor_signed = &_grib_accessor_signed; - -void grib_accessor_class_signed_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_signed_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_long_t::init(a, len, arg); - grib_accessor_signed_t* self = (grib_accessor_signed_t*)a; - long count = 0; + grib_accessor_long_t::init(len, arg); + long count = 0; - self->arg = arg; - a->value_count(&count); - a->length = len * count; - self->nbytes = len; - Assert(a->length >= 0); + arg_ = arg; + value_count(&count); + length_ = len * count; + nbytes_ = len; + Assert(length_ >= 0); } -void grib_accessor_class_signed_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_signed_t::dump(grib_dumper* dumper) { long rlen = 0; - a->value_count(&rlen); + value_count(&rlen); if (rlen == 1) - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); else - grib_dump_values(dumper, a); + grib_dump_values(dumper, this); } static const long ones[] = { @@ -46,49 +45,46 @@ static const long ones[] = { -0x7fffffff, }; -int grib_accessor_class_signed_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_signed_t::unpack_long(long* val, size_t* len) { - grib_accessor_signed_t* self = (grib_accessor_signed_t*)a; - unsigned long rlen = 0; - int err = 0; - long count = 0; - unsigned long i = 0; - grib_handle* hand = grib_handle_of_accessor(a); - long pos = a->offset; - long missing = 0; + unsigned long rlen = 0; + int err = 0; + long count = 0; + unsigned long i = 0; + grib_handle* hand = grib_handle_of_accessor(this); + long pos = offset_; + long missing = 0; - err = a->value_count(&count); + err = value_count(&count); if (err) return err; rlen = count; if (*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %lu values", a->name, rlen); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s, it contains %lu values", name_, rlen); *len = 0; return GRIB_ARRAY_TOO_SMALL; } - if (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { - Assert(self->nbytes <= 4); - missing = ones[self->nbytes]; + if (flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { + Assert(nbytes_ <= 4); + missing = ones[nbytes_]; } for (i = 0; i < rlen; i++) { - val[i] = (long)grib_decode_signed_long(hand->buffer->data, pos, self->nbytes); + val[i] = (long)grib_decode_signed_long(hand->buffer->data, pos, nbytes_); if (missing) if (val[i] == missing) val[i] = GRIB_MISSING_LONG; - pos += self->nbytes; + pos += nbytes_; } *len = rlen; return GRIB_SUCCESS; } -int grib_accessor_class_signed_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_signed_t::pack_long(const long* val, size_t* len) { - grib_accessor_signed_t* self = (grib_accessor_signed_t*)a; - int ret = 0; long off = 0; unsigned long rlen = 0; @@ -98,20 +94,20 @@ int grib_accessor_class_signed_t::pack_long(grib_accessor* a, const long* val, s unsigned long i = 0; long missing = 0; - int err = a->value_count(&count); + int err = value_count(&count); if (err) return err; rlen = count; if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", a->name, 1); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", name_, 1); len[0] = 0; return GRIB_ARRAY_TOO_SMALL; } - if (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { - Assert(self->nbytes <= 4); - missing = ones[self->nbytes]; + if (flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { + Assert(nbytes_ <= 4); + missing = ones[nbytes_]; } if (rlen == 1) { @@ -122,94 +118,92 @@ int grib_accessor_class_signed_t::pack_long(grib_accessor* a, const long* val, s } else { // ECC-1605: Check overflow/underflow - const int nbits = self->nbytes * 8; - const long minval = -(1L << (nbits - 1)) + 1; - const long maxval = (1L << (nbits - 1)) - 1; - // printf(" key=%s: v=%ld (minval=%ld maxval=%ld)\n", a->name, v, minval, maxval); + const int nbits = nbytes_ * 8; + const long minval = NumericLimits::min(nbits); + const long maxval = NumericLimits::max(nbits); + // printf(" key=%s: v=%ld (minval=%ld maxval=%ld)\n", name_ , v, minval, maxval); if (v > maxval || v < minval) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "Key \"%s\": Trying to encode value of %ld but the allowable range is %ld to %ld (number of bits=%d)", - a->name, v, minval, maxval, nbits); + name_, v, minval, maxval, nbits); return GRIB_ENCODING_ERROR; } } - off = a->offset; - ret = grib_encode_signed_long(grib_handle_of_accessor(a)->buffer->data, v, off, a->length); + off = offset_; + ret = grib_encode_signed_long(grib_handle_of_accessor(this)->buffer->data, v, off, length_); if (ret == GRIB_SUCCESS) len[0] = 1; if (*len > 1) - grib_context_log(a->context, GRIB_LOG_WARNING, "grib_accessor_signed_t : Trying to pack %d values in a scalar %s, packing first value", *len, a->name); + grib_context_log(context_, GRIB_LOG_WARNING, "grib_accessor_signed_t : Trying to pack %d values in a scalar %s, packing first value", *len, name_); len[0] = 1; return ret; } /* TODO: We assume that there are no missing values if there are more that 1 value */ - buflen = *len * a->length; + buflen = *len * length_; - buf = (unsigned char*)grib_context_malloc(a->context, buflen); + buf = (unsigned char*)grib_context_malloc(context_, buflen); for (i = 0; i < *len; i++) { - grib_encode_signed_long(buf, val[i], off, a->length); - off += a->length; + grib_encode_signed_long(buf, val[i], off, length_); + off += length_; } - ret = grib_set_long_internal(grib_handle_of_accessor(a), grib_arguments_get_name(a->parent->h, self->arg, 0), *len); + ret = grib_set_long_internal(grib_handle_of_accessor(this), grib_arguments_get_name(parent_->h, arg_, 0), *len); if (ret == GRIB_SUCCESS) - grib_buffer_replace(a, buf, buflen, 1, 1); + grib_buffer_replace(this, buf, buflen, 1, 1); else *len = 0; - grib_context_free(a->context, buf); + grib_context_free(context_, buf); return ret; } -long grib_accessor_class_signed_t::byte_count(grib_accessor* a) +long grib_accessor_signed_t::byte_count() { - return a->length; + return length_; } -int grib_accessor_class_signed_t::value_count(grib_accessor* a, long* len) +int grib_accessor_signed_t::value_count(long* len) { - grib_accessor_signed_t* self = (grib_accessor_signed_t*)a; *len = 0; - if (!self->arg) { + if (!arg_) { *len = 1; return 0; } - return grib_get_long_internal(grib_handle_of_accessor(a), grib_arguments_get_name(a->parent->h, self->arg, 0), len); + return grib_get_long_internal(grib_handle_of_accessor(this), grib_arguments_get_name(parent_->h, arg_, 0), len); } -long grib_accessor_class_signed_t::byte_offset(grib_accessor* a) +long grib_accessor_signed_t::byte_offset() { - return a->offset; + return offset_; } -void grib_accessor_class_signed_t::update_size(grib_accessor* a, size_t s) +void grib_accessor_signed_t::update_size(size_t s) { - a->length = s; - Assert(a->length >= 0); + length_ = s; + Assert(length_ >= 0); } -long grib_accessor_class_signed_t::next_offset(grib_accessor* a) +long grib_accessor_signed_t::next_offset() { - return a->byte_offset() + a->byte_count(); + return byte_offset() + byte_count(); } -int grib_accessor_class_signed_t::is_missing(grib_accessor* a) +int grib_accessor_signed_t::is_missing() { - int i = 0; unsigned char ff = 0xff; - unsigned long offset = a->offset; - grib_handle* hand = grib_handle_of_accessor(a); + unsigned long offset = offset_; + const grib_handle* hand = grib_handle_of_accessor(this); - if (a->length == 0) { - Assert(a->vvalue != NULL); - return a->vvalue->missing; + if (length_ == 0) { + Assert(vvalue_ != NULL); + return vvalue_->missing; } - for (i = 0; i < a->length; i++) { + for (long i = 0; i < length_; i++) { if (hand->buffer->data[offset] != ff) return 0; offset++; diff --git a/src/accessor/grib_accessor_class_signed.h b/src/accessor/grib_accessor_class_signed.h index 9fbb6f8d2..81806d8a4 100644 --- a/src/accessor/grib_accessor_class_signed.h +++ b/src/accessor/grib_accessor_class_signed.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,24 +15,21 @@ class grib_accessor_signed_t : public grib_accessor_long_t { public: - /* Members defined in signed */ - grib_arguments* arg; - int nbytes; -}; - -class grib_accessor_class_signed_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_signed_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_signed_t() : + grib_accessor_long_t() { class_name_ = "signed"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_signed_t{}; } - int is_missing(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - long byte_count(grib_accessor*) override; - long byte_offset(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; + int is_missing() override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + long byte_count() override; + long byte_offset() override; + long next_offset() override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + +private: + grib_arguments* arg_ = nullptr; + int nbytes_ = 0; }; diff --git a/src/accessor/grib_accessor_class_signed_bits.cc b/src/accessor/grib_accessor_class_signed_bits.cc index b205cc9f7..af75c55cf 100644 --- a/src/accessor/grib_accessor_class_signed_bits.cc +++ b/src/accessor/grib_accessor_class_signed_bits.cc @@ -10,57 +10,53 @@ #include "grib_accessor_class_signed_bits.h" -grib_accessor_class_signed_bits_t _grib_accessor_class_signed_bits{ "signed_bits" }; -grib_accessor_class* grib_accessor_class_signed_bits = &_grib_accessor_class_signed_bits; +grib_accessor_signed_bits_t _grib_accessor_signed_bits{}; +grib_accessor* grib_accessor_signed_bits = &_grib_accessor_signed_bits; - -long grib_accessor_class_signed_bits_t::byte_count(grib_accessor* a) +long grib_accessor_signed_bits_t::byte_count() { - return a->length; + return length_; } -static long compute_byte_count(grib_accessor* a) +long grib_accessor_signed_bits_t::compute_byte_count() { - grib_accessor_signed_bits_t* self = (grib_accessor_signed_bits_t*)a; long numberOfBits; long numberOfElements; int ret = 0; - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfBits, &numberOfBits); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfBits_, &numberOfBits); if (ret) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s unable to get %s to compute size", a->name, self->numberOfBits); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s unable to get %s to compute size", name_, numberOfBits_); return 0; } - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfElements, &numberOfElements); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfElements_, &numberOfElements); if (ret) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s unable to get %s to compute size", a->name, self->numberOfElements); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s unable to get %s to compute size", name_, numberOfElements_); return 0; } return (numberOfBits * numberOfElements + 7) / 8; } -void grib_accessor_class_signed_bits_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_signed_bits_t::init(const long len, grib_arguments* args) { - grib_accessor_class_long_t::init(a, len, args); - grib_accessor_signed_bits_t* self = (grib_accessor_signed_bits_t*)a; - int n = 0; - self->numberOfBits = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->numberOfElements = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - a->length = compute_byte_count(a); + grib_accessor_long_t::init(len, args); + int n = 0; + numberOfBits_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + numberOfElements_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + length_ = compute_byte_count(); } -int grib_accessor_class_signed_bits_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_signed_bits_t::unpack_long(long* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; #if 0 - grib_accessor_signed_bits_t* self = (grib_accessor_signed_bits_t*)a; int i; int ret = 0; - long pos = a->offset * 8; + long pos = offset_ * 8; long rlen = 0; long numberOfBits = 0; @@ -69,13 +65,13 @@ int grib_accessor_class_signed_bits_t::unpack_long(grib_accessor* a, long* val, return ret; if (*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Wrong size (%ld) for %s it contains %ld values", *len, a->name, rlen); + grib_context_log(context_ , GRIB_LOG_ERROR, + "Wrong size (%ld) for %s it contains %ld values", *len, name_ , rlen); *len = 0; return GRIB_ARRAY_TOO_SMALL; } - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfBits, &numberOfBits); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfBits_ , &numberOfBits); if (ret) return ret; @@ -86,7 +82,7 @@ int grib_accessor_class_signed_bits_t::unpack_long(grib_accessor* a, long* val, } for (i = 0; i < rlen; i++) - val[i] = grib_decode_signed_longb(grib_handle_of_accessor(a)->buffer->data, &pos, numberOfBits); + val[i] = grib_decode_signed_longb(grib_handle_of_accessor(this)->buffer->data, &pos, numberOfBits); *len = rlen; @@ -94,11 +90,10 @@ int grib_accessor_class_signed_bits_t::unpack_long(grib_accessor* a, long* val, #endif } -int grib_accessor_class_signed_bits_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_signed_bits_t::pack_long(const long* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; #if 0 - grib_accessor_signed_bits_t* self = (grib_accessor_signed_bits_t*)a; int ret = 0; long off = 0; long numberOfBits = 0; @@ -113,48 +108,47 @@ int grib_accessor_class_signed_bits_t::pack_long(grib_accessor* a, const long* v return ret; rlen = count; if (*len != rlen) { - ret = grib_set_long(grib_handle_of_accessor(a), self->numberOfElements, rlen); + ret = grib_set_long(grib_handle_of_accessor(this), numberOfElements_ , rlen); if (ret) return ret; } - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfBits, &numberOfBits); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfBits_ , &numberOfBits); if (ret) return ret; buflen = compute_byte_count(a); - buf = (unsigned char*)grib_context_malloc_clear(a->context, buflen + sizeof(long)); + buf = (unsigned char*)grib_context_malloc_clear(context_ , buflen + sizeof(long)); for (i = 0; i < rlen; i++) grib_encode_signed_longb(buf, val[i], &off, numberOfBits); grib_buffer_replace(a, buf, buflen, 1, 1); - grib_context_free(a->context, buf); + grib_context_free(context_ , buf); return ret; #endif } -int grib_accessor_class_signed_bits_t::value_count(grib_accessor* a, long* numberOfElements) +int grib_accessor_signed_bits_t::value_count(long* numberOfElements) { - grib_accessor_signed_bits_t* self = (grib_accessor_signed_bits_t*)a; - *numberOfElements = 0; + *numberOfElements = 0; - return grib_get_long(grib_handle_of_accessor(a), self->numberOfElements, numberOfElements); + return grib_get_long(grib_handle_of_accessor(this), numberOfElements_, numberOfElements); } -long grib_accessor_class_signed_bits_t::byte_offset(grib_accessor* a) +long grib_accessor_signed_bits_t::byte_offset() { - return a->offset; + return offset_; } -void grib_accessor_class_signed_bits_t::update_size(grib_accessor* a, size_t s) +void grib_accessor_signed_bits_t::update_size(size_t s) { - a->length = s; + length_ = s; } -long grib_accessor_class_signed_bits_t::next_offset(grib_accessor* a) +long grib_accessor_signed_bits_t::next_offset() { - return a->byte_offset() + a->byte_count(); + return byte_offset() + byte_count(); } diff --git a/src/accessor/grib_accessor_class_signed_bits.h b/src/accessor/grib_accessor_class_signed_bits.h index dd49c5c75..a4a934ba8 100644 --- a/src/accessor/grib_accessor_class_signed_bits.h +++ b/src/accessor/grib_accessor_class_signed_bits.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,22 +15,21 @@ class grib_accessor_signed_bits_t : public grib_accessor_long_t { public: - /* Members defined in signed_bits */ - const char* numberOfBits; - const char* numberOfElements; -}; - -class grib_accessor_class_signed_bits_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_signed_bits_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_signed_bits_t() : + grib_accessor_long_t() { class_name_ = "signed_bits"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_signed_bits_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - long byte_count(grib_accessor*) override; - long byte_offset(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + long byte_count() override; + long byte_offset() override; + long next_offset() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + +private: + const char* numberOfBits_ = nullptr; + const char* numberOfElements_ = nullptr; + + long compute_byte_count(); }; diff --git a/src/accessor/grib_accessor_class_simple_packing_error.cc b/src/accessor/grib_accessor_class_simple_packing_error.cc index 5bdd21553..063d4bd84 100644 --- a/src/accessor/grib_accessor_class_simple_packing_error.cc +++ b/src/accessor/grib_accessor_class_simple_packing_error.cc @@ -11,52 +11,48 @@ #include "grib_accessor_class_simple_packing_error.h" #include "grib_scaling.h" -grib_accessor_class_simple_packing_error_t _grib_accessor_class_simple_packing_error{ "simple_packing_error" }; -grib_accessor_class* grib_accessor_class_simple_packing_error = &_grib_accessor_class_simple_packing_error; +grib_accessor_simple_packing_error_t _grib_accessor_simple_packing_error{}; +grib_accessor* grib_accessor_simple_packing_error = &_grib_accessor_simple_packing_error; - -void grib_accessor_class_simple_packing_error_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_simple_packing_error_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_simple_packing_error_t* self = (grib_accessor_simple_packing_error_t*)a; - int n = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_accessor_double_t::init(l, c); + int n = 0; + grib_handle* h = grib_handle_of_accessor(this); - self->bitsPerValue = grib_arguments_get_name(h, c, n++); - self->binaryScaleFactor = grib_arguments_get_name(h, c, n++); - self->decimalScaleFactor = grib_arguments_get_name(h, c, n++); - self->referenceValue = grib_arguments_get_name(h, c, n++); - self->floatType = grib_arguments_get_name(h, c, n++); + bitsPerValue_ = grib_arguments_get_name(h, c, n++); + binaryScaleFactor_ = grib_arguments_get_name(h, c, n++); + decimalScaleFactor_ = grib_arguments_get_name(h, c, n++); + referenceValue_ = grib_arguments_get_name(h, c, n++); + floatType_ = grib_arguments_get_name(h, c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + length_ = 0; } -int grib_accessor_class_simple_packing_error_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_simple_packing_error_t::unpack_double(double* val, size_t* len) { - grib_accessor_simple_packing_error_t* self = (grib_accessor_simple_packing_error_t*)a; - int ret = 0; long binaryScaleFactor = 0; long bitsPerValue = 0; long decimalScaleFactor = 0; double referenceValue = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); - if ((ret = grib_get_long_internal(h, self->binaryScaleFactor, &binaryScaleFactor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, binaryScaleFactor_, &binaryScaleFactor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, self->bitsPerValue, &bitsPerValue)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, bitsPerValue_, &bitsPerValue)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, self->decimalScaleFactor, &decimalScaleFactor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(h, decimalScaleFactor_, &decimalScaleFactor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(h, self->referenceValue, &referenceValue)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(h, referenceValue_, &referenceValue)) != GRIB_SUCCESS) return ret; - if (!strcmp(self->floatType, "ibm")) + if (!strcmp(floatType_, "ibm")) *val = grib_ibmfloat_error(referenceValue); - else if (!strcmp(self->floatType, "ieee")) + else if (!strcmp(floatType_, "ieee")) *val = grib_ieeefloat_error(referenceValue); else Assert(1 == 0); diff --git a/src/accessor/grib_accessor_class_simple_packing_error.h b/src/accessor/grib_accessor_class_simple_packing_error.h index f0c005e03..7dce1c8d2 100644 --- a/src/accessor/grib_accessor_class_simple_packing_error.h +++ b/src/accessor/grib_accessor_class_simple_packing_error.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_simple_packing_error_t : public grib_accessor_double_t { public: - /* Members defined in simple_packing_error */ - const char* binaryScaleFactor; - const char* bitsPerValue; - const char* decimalScaleFactor; - const char* referenceValue; - const char* floatType; -}; - -class grib_accessor_class_simple_packing_error_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_simple_packing_error_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_simple_packing_error_t() : + grib_accessor_double_t() { class_name_ = "simple_packing_error"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_simple_packing_error_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* binaryScaleFactor_ = nullptr; + const char* bitsPerValue_ = nullptr; + const char* decimalScaleFactor_ = nullptr; + const char* referenceValue_ = nullptr; + const char* floatType_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_size.cc b/src/accessor/grib_accessor_class_size.cc index 71c0dd947..41a2e1078 100644 --- a/src/accessor/grib_accessor_class_size.cc +++ b/src/accessor/grib_accessor_class_size.cc @@ -11,27 +11,23 @@ #include "grib_accessor_class_size.h" -grib_accessor_class_size_t _grib_accessor_class_size{ "size" }; -grib_accessor_class* grib_accessor_class_size = &_grib_accessor_class_size; +grib_accessor_size_t _grib_accessor_size{}; +grib_accessor* grib_accessor_size = &_grib_accessor_size; - -void grib_accessor_class_size_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_size_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_size_t* self = (grib_accessor_size_t*)a; - self->accessor = grib_arguments_get_name(grib_handle_of_accessor(a), c, 0); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + grib_accessor_long_t::init(l, c); + accessor_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, 0); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -int grib_accessor_class_size_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_size_t::unpack_long(long* val, size_t* len) { - grib_accessor_size_t* self = (grib_accessor_size_t*)a; - size_t size = 0; - int ret = grib_get_size(grib_handle_of_accessor(a), self->accessor, &size); - *val = (long)size; - *len = 1; + int ret = grib_get_size(grib_handle_of_accessor(this), accessor_, &size); + *val = (long)size; + *len = 1; return ret; } diff --git a/src/accessor/grib_accessor_class_size.h b/src/accessor/grib_accessor_class_size.h index 9901c479e..6c11a9d4e 100644 --- a/src/accessor/grib_accessor_class_size.h +++ b/src/accessor/grib_accessor_class_size.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,15 +15,12 @@ class grib_accessor_size_t : public grib_accessor_long_t { public: - /* Members defined in size */ - const char* accessor; -}; - -class grib_accessor_class_size_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_size_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_size_t() : + grib_accessor_long_t() { class_name_ = "size"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_size_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* accessor_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_smart_table.cc b/src/accessor/grib_accessor_class_smart_table.cc index 8be64d9d5..1499c3f3d 100644 --- a/src/accessor/grib_accessor_class_smart_table.cc +++ b/src/accessor/grib_accessor_class_smart_table.cc @@ -11,8 +11,8 @@ #include "grib_accessor_class_smart_table.h" #include -grib_accessor_class_smart_table_t _grib_accessor_class_smart_table{"smart_table"}; -grib_accessor_class* grib_accessor_class_smart_table = &_grib_accessor_class_smart_table; +grib_accessor_smart_table_t _grib_accessor_smart_table{}; +grib_accessor* grib_accessor_smart_table = &_grib_accessor_smart_table; #if GRIB_PTHREADS static pthread_once_t once = PTHREAD_ONCE_INIT; @@ -32,7 +32,7 @@ static omp_nest_lock_t mutex; static void init_mutex() { - GRIB_OMP_CRITICAL(lock_grib_accessor_class_smart_table_c) + GRIB_OMP_CRITICAL(lock_grib_accessor_smart_table_c) { if (once == 0) { omp_init_nest_lock(&mutex); @@ -44,83 +44,80 @@ static void init_mutex() static int grib_load_smart_table(grib_context* c, const char* filename, const char* recomposed_name, size_t size, grib_smart_table* t); -void grib_accessor_class_smart_table_t::init(grib_accessor* a, const long len, grib_arguments* params) +void grib_accessor_smart_table_t::init(const long len, grib_arguments* params) { - grib_accessor_class_unsigned_t::init(a, len, params); + int n = 0; + grib_handle* hand = grib_handle_of_accessor(this); - int n = 0; - grib_accessor_smart_table_t* self = (grib_accessor_smart_table_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + values_ = grib_arguments_get_name(hand, params, n++); + tablename_ = grib_arguments_get_string(hand, params, n++); + masterDir_ = grib_arguments_get_name(hand, params, n++); + localDir_ = grib_arguments_get_name(hand, params, n++); + widthOfCode_ = grib_arguments_get_long(hand, params, n++); + extraDir_ = grib_arguments_get_name(hand, params, n++); + extraTable_ = grib_arguments_get_string(hand, params, n++); - self->values = grib_arguments_get_name(hand, params, n++); - self->tablename = grib_arguments_get_string(hand, params, n++); - self->masterDir = grib_arguments_get_name(hand, params, n++); - self->localDir = grib_arguments_get_name(hand, params, n++); - self->widthOfCode = grib_arguments_get_long(hand, params, n++); - self->extraDir = grib_arguments_get_name(hand, params, n++); - self->extraTable = grib_arguments_get_string(hand, params, n++); - - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - self->dirty = 1; - self->tableCodesSize = 0; - self->tableCodes = 0; + grib_accessor_unsigned_t::length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + dirty_ = 1; + tableCodesSize_ = 0; + tableCodes_ = 0; + table_ = NULL; } -grib_smart_table* load_table(grib_accessor* a) +grib_smart_table* grib_accessor_smart_table_t::load_table() { - grib_accessor_smart_table_t* self = (grib_accessor_smart_table_t*)a; - size_t size = 0; - grib_handle* h = ((grib_accessor*)self)->parent->h; - grib_context* c = h->context; - grib_smart_table* t = NULL; - grib_smart_table* next = NULL; - char* filename = 0; - char recomposed[1024] = {0,}; + size_t size = 0; + grib_handle* h = this->parent_->h; + grib_context* c = h->context; + grib_smart_table* t = NULL; + grib_smart_table* next = NULL; + char* filename = 0; + char recomposed[1024] = {0,}; char localRecomposed[1024] = {0,}; - char* localFilename = 0; + char* localFilename = 0; char extraRecomposed[1024] = {0,}; - char* extraFilename = 0; + char* extraFilename = 0; char masterDir[1024] = {0,}; char localDir[1024] = {0,}; char extraDir[1024] = {0,}; size_t len = 1024; - if (self->masterDir != NULL) { - grib_get_string(h, self->masterDir, masterDir, &len); + if (masterDir_ != NULL) { + grib_get_string(h, masterDir_, masterDir, &len); } len = 1024; - if (self->localDir != NULL) { - grib_get_string(h, self->localDir, localDir, &len); + if (localDir_ != NULL) { + grib_get_string(h, localDir_, localDir, &len); } len = 1024; - if (self->extraDir != NULL && self->extraTable != NULL) { - grib_get_string(h, self->extraDir, extraDir, &len); + if (extraDir_ != NULL && extraTable_ != NULL) { + grib_get_string(h, extraDir_, extraDir, &len); } if (*masterDir != 0) { char name[2048] = {0,}; - snprintf(name, sizeof(name), "%s/%s", masterDir, self->tablename); + snprintf(name, sizeof(name), "%s/%s", masterDir, tablename_); grib_recompose_name(h, NULL, name, recomposed, 0); filename = grib_context_full_defs_path(c, recomposed); } else { - grib_recompose_name(h, NULL, self->tablename, recomposed, 0); + grib_recompose_name(h, NULL, tablename_, recomposed, 0); filename = grib_context_full_defs_path(c, recomposed); } if (*localDir != 0) { char localName[2048] = {0,}; - snprintf(localName, sizeof(localName), "%s/%s", localDir, self->tablename); + snprintf(localName, sizeof(localName), "%s/%s", localDir, tablename_); grib_recompose_name(h, NULL, localName, localRecomposed, 0); localFilename = grib_context_full_defs_path(c, localRecomposed); } if (*extraDir != 0) { char extraTable[2048] = {0,}; - snprintf(extraTable, sizeof(extraTable), "%s/%s", extraDir, self->extraTable); + snprintf(extraTable, sizeof(extraTable), "%s/%s", extraDir, extraTable_); grib_recompose_name(h, NULL, extraTable, extraRecomposed, 0); extraFilename = grib_context_full_defs_path(c, extraRecomposed); } @@ -136,13 +133,13 @@ grib_smart_table* load_table(grib_accessor* a) next = next->next; } - // Note: self->widthOfCode is chosen so that 2^width is bigger than the maximum descriptor code, + // Note: widthOfCode_ is chosen so that 2^width is bigger than the maximum descriptor code, // which for BUFR4 is the Table C operator 243255 // - size = (1ULL << self->widthOfCode); // = 2^self->widthOfCode (as a 64 bit number) + size = (1ULL << widthOfCode_); // = 2^widthOfCode_ (as a 64 bit number) - t = (grib_smart_table*)grib_context_malloc_clear_persistent(c, sizeof(grib_smart_table)); - t->entries = (grib_smart_table_entry*)grib_context_malloc_clear_persistent(c, size * sizeof(grib_smart_table_entry)); + t = (grib_smart_table*)grib_context_malloc_clear_persistent(c, sizeof(grib_smart_table)); + t->entries = (grib_smart_table_entry*)grib_context_malloc_clear_persistent(c, size * sizeof(grib_smart_table_entry)); t->numberOfEntries = size; if (filename != 0) @@ -179,21 +176,21 @@ static int grib_load_smart_table(grib_context* c, const char* filename, Assert(t != NULL); if (t->filename[0] == NULL) { - t->filename[0] = grib_context_strdup_persistent(c, filename); + t->filename[0] = grib_context_strdup_persistent(c, filename); t->recomposed_name[0] = grib_context_strdup_persistent(c, recomposed_name); - t->next = c->smart_table; - t->numberOfEntries = size; + t->next = c->smart_table; + t->numberOfEntries = size; GRIB_MUTEX_INIT_ONCE(&once, &init_mutex); GRIB_MUTEX_LOCK(&mutex); c->smart_table = t; GRIB_MUTEX_UNLOCK(&mutex); } else if (t->filename[1] == NULL) { - t->filename[1] = grib_context_strdup_persistent(c, filename); + t->filename[1] = grib_context_strdup_persistent(c, filename); t->recomposed_name[1] = grib_context_strdup_persistent(c, recomposed_name); } else { - t->filename[2] = grib_context_strdup_persistent(c, filename); + t->filename[2] = grib_context_strdup_persistent(c, filename); t->recomposed_name[2] = grib_context_strdup_persistent(c, recomposed_name); } @@ -231,7 +228,7 @@ static int grib_load_smart_table(grib_context* c, const char* filename, DEBUG_ASSERT(code < t->numberOfEntries); while (*s) { char* tcol = t->entries[code].column[numberOfColumns]; - if ( tcol ) grib_context_free_persistent(c, tcol); + if (tcol) grib_context_free_persistent(c, tcol); t->entries[code].column[numberOfColumns] = grib_context_strdup_persistent(c, s); numberOfColumns++; DEBUG_ASSERT(numberOfColumns < MAX_SMART_TABLE_COLUMNS); @@ -280,14 +277,13 @@ void grib_smart_table_delete(grib_context* c) } } -void grib_accessor_class_smart_table_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_smart_table_t::dump(grib_dumper* dumper) { - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); } -int grib_accessor_class_smart_table_t::unpack_string(grib_accessor* a, char* buffer, size_t* len) +int grib_accessor_smart_table_t::unpack_string(char* buffer, size_t* len) { - grib_accessor_smart_table_t* self = (grib_accessor_smart_table_t*)a; grib_smart_table* table = NULL; size_t size = 1; @@ -296,12 +292,12 @@ int grib_accessor_class_smart_table_t::unpack_string(grib_accessor* a, char* buf char tmp[1024]; size_t l = 0; - if ((err = a->unpack_long(&value, &size)) != GRIB_SUCCESS) + if ((err = unpack_long(&value, &size)) != GRIB_SUCCESS) return err; - if (!self->table) - self->table = load_table(a); - table = self->table; + if (!table_) + table_ = load_table(); + table = table_; if (table && (value >= 0) && (value < table->numberOfEntries) && table->entries[value].abbreviation) { strcpy(tmp, table->entries[value].abbreviation); @@ -318,125 +314,121 @@ int grib_accessor_class_smart_table_t::unpack_string(grib_accessor* a, char* buf } strcpy(buffer, tmp); - *len = l; - self->dirty = 0; + *len = l; + dirty_ = 0; return GRIB_SUCCESS; } -static int get_table_codes(grib_accessor* a) +int grib_accessor_smart_table_t::get_table_codes() { - grib_accessor_smart_table_t* self = (grib_accessor_smart_table_t*)a; - size_t size = 0; - long* v = 0; - int err = 0; + size_t size = 0; + long* v = 0; + int err = 0; int count, j; size_t i; int table_size; - if (!self->dirty) + if (!dirty_) return 0; - table_size = (1 << self->widthOfCode); // 2 ^ self->widthOfCode + table_size = (1 << widthOfCode_); // 2 ^ widthOfCode_ - if (!self->table) - self->table = load_table(a); + if (!table_) + table_ = load_table(); - err = grib_get_size(grib_handle_of_accessor(a), self->values, &size); + err = grib_get_size(grib_handle_of_accessor(this), values_, &size); if (err) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "unable to get size of %s", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, + "unable to get size of %s", name_); return err; } - v = (long*)grib_context_malloc_clear(a->context, size * sizeof(long)); + v = (long*)grib_context_malloc_clear(context_, size * sizeof(long)); - grib_get_long_array(grib_handle_of_accessor(a), self->values, v, &size); + grib_get_long_array(grib_handle_of_accessor(this), values_, v, &size); count = 0; for (i = 0; i < size; i++) { if (v[i] < table_size) count++; } - if (self->tableCodes) - grib_context_free(a->context, self->tableCodes); - self->tableCodes = (long*)grib_context_malloc_clear(a->context, count * sizeof(long)); - j = 0; + if (tableCodes_) + grib_context_free(context_, tableCodes_); + tableCodes_ = (long*)grib_context_malloc_clear(context_, count * sizeof(long)); + j = 0; for (i = 0; i < size; i++) { if (v[i] < table_size) - self->tableCodes[j++] = v[i]; + tableCodes_[j++] = v[i]; } - grib_context_free(a->context, v); + grib_context_free(context_, v); - self->tableCodesSize = count; - self->dirty = 0; + tableCodesSize_ = count; + dirty_ = 0; return 0; } -int grib_accessor_class_smart_table_t::value_count(grib_accessor* a, long* count) +int grib_accessor_smart_table_t::value_count(long* count) { int err = 0; - grib_accessor_smart_table_t* self = (grib_accessor_smart_table_t*)a; - *count = 0; + *count = 0; - if (!self->values) + if (!values_) return 0; - err = get_table_codes(a); + err = get_table_codes(); if (err) return err; - *count = self->tableCodesSize; + *count = tableCodesSize_; return GRIB_SUCCESS; } -void grib_accessor_class_smart_table_t::destroy(grib_context* context, grib_accessor* a) +void grib_accessor_smart_table_t::destroy(grib_context* context) { - grib_accessor_smart_table_t* self = (grib_accessor_smart_table_t*)a; - if (a->vvalue != NULL) { - grib_context_free(context, a->vvalue); - a->vvalue = NULL; + if (vvalue_ != NULL) { + grib_context_free(context, vvalue_); + vvalue_ = NULL; } - if (self->tableCodes) - grib_context_free(a->context, self->tableCodes); + if (tableCodes_) + grib_context_free(context_, tableCodes_); - grib_accessor_class_unsigned_t::destroy(context, a); + grib_accessor_unsigned_t::destroy(context); } -int grib_accessor_class_smart_table_t::get_native_type(grib_accessor* a) +long grib_accessor_smart_table_t::get_native_type() { int type = GRIB_TYPE_LONG; - //printf("---------- %s flags=%ld GRIB_ACCESSOR_FLAG_STRING_TYPE=%d\n", - // a->name,a->flags,GRIB_ACCESSOR_FLAG_STRING_TYPE); - if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) + // printf("---------- %s flags=%ld GRIB_ACCESSOR_FLAG_STRING_TYPE=%d\n", + // a->name,flags_ ,GRIB_ACCESSOR_FLAG_STRING_TYPE); + if (flags_ & GRIB_ACCESSOR_FLAG_STRING_TYPE) type = GRIB_TYPE_STRING; return type; } -int grib_accessor_class_smart_table_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_smart_table_t::unpack_long(long* val, size_t* len) { int err = 0; - grib_accessor_smart_table_t* self = (grib_accessor_smart_table_t*)a; size_t i; - if (!self->values) + if (!values_) return 0; - err = get_table_codes(a); + err = get_table_codes(); if (err) return 0; - if (*len < self->tableCodesSize) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Wrong size (%zu) for %s, it contains %zu values", *len, a->name, self->tableCodesSize); - *len = self->tableCodesSize; + if (*len < tableCodesSize_) { + grib_context_log(context_, GRIB_LOG_ERROR, + "Wrong size (%zu) for %s, it contains %zu values", *len, name_, tableCodesSize_); + *len = tableCodesSize_; return GRIB_ARRAY_TOO_SMALL; } - for (i = 0; i < self->tableCodesSize; i++) - val[i] = self->tableCodes[i]; + for (i = 0; i < tableCodesSize_; i++) + val[i] = tableCodes_[i]; return err; } diff --git a/src/accessor/grib_accessor_class_smart_table.h b/src/accessor/grib_accessor_class_smart_table.h index c7aaf0827..bba00b795 100644 --- a/src/accessor/grib_accessor_class_smart_table.h +++ b/src/accessor/grib_accessor_class_smart_table.h @@ -16,29 +16,31 @@ class grib_accessor_smart_table_t : public grib_accessor_unsigned_t { public: - const char* values; - const char* tablename; - const char* masterDir; - const char* localDir; - const char* extraDir; - const char* extraTable; - int widthOfCode; - long* tableCodes; - size_t tableCodesSize; - grib_smart_table* table; - int dirty; -}; - -class grib_accessor_class_smart_table_t : public grib_accessor_class_unsigned_t -{ -public: - grib_accessor_class_smart_table_t(const char* name) : grib_accessor_class_unsigned_t(name) {} + grib_accessor_smart_table_t() : + grib_accessor_unsigned_t() { class_name_ = "smart_table"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_smart_table_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + + grib_smart_table* smarttable() const { return table_; } + +private: + grib_smart_table* table_ = nullptr; + const char* values_ = nullptr; + const char* tablename_ = nullptr; + const char* masterDir_ = nullptr; + const char* localDir_ = nullptr; + const char* extraDir_ = nullptr; + const char* extraTable_ = nullptr; + int widthOfCode_ = 0; + long* tableCodes_ = nullptr; + size_t tableCodesSize_ = 0; + + grib_smart_table* load_table(); + int get_table_codes(); }; diff --git a/src/accessor/grib_accessor_class_smart_table_column.cc b/src/accessor/grib_accessor_class_smart_table_column.cc index d9d44bc49..2384d7234 100644 --- a/src/accessor/grib_accessor_class_smart_table_column.cc +++ b/src/accessor/grib_accessor_class_smart_table_column.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -12,97 +11,95 @@ #include "grib_accessor_class_smart_table_column.h" #include "grib_accessor_class_smart_table.h" -grib_accessor_class_smart_table_column_t _grib_accessor_class_smart_table_column{ "smart_table_column" }; -grib_accessor_class* grib_accessor_class_smart_table_column = &_grib_accessor_class_smart_table_column; +grib_accessor_smart_table_column_t _grib_accessor_smart_table_column{}; +grib_accessor* grib_accessor_smart_table_column = &_grib_accessor_smart_table_column; - -void grib_accessor_class_smart_table_column_t::init(grib_accessor* a, const long len, grib_arguments* params) +void grib_accessor_smart_table_column_t::init(const long len, grib_arguments* params) { - grib_accessor_class_gen_t::init(a, len, params); + grib_accessor_gen_t::init(len, params); int n = 0; - grib_accessor_smart_table_column_t* self = (grib_accessor_smart_table_column_t*)a; - self->smartTable = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - self->index = grib_arguments_get_long(grib_handle_of_accessor(a), params, n++); + smartTable_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, n++); + index_ = grib_arguments_get_long(grib_handle_of_accessor(this), params, n++); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -void grib_accessor_class_smart_table_column_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_smart_table_column_t::dump(grib_dumper* dumper) { - int type = get_native_type(a); + int type = get_native_type(); switch (type) { case GRIB_TYPE_LONG: - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); break; case GRIB_TYPE_STRING: - grib_dump_string_array(dumper, a, NULL); + grib_dump_string_array(dumper, this, NULL); break; } } -int grib_accessor_class_smart_table_column_t::unpack_string_array(grib_accessor* a, char** buffer, size_t* len) +int grib_accessor_smart_table_column_t::unpack_string_array(char** buffer, size_t* len) { - grib_accessor_smart_table_column_t* self = (grib_accessor_smart_table_column_t*)a; grib_accessor_smart_table_t* tableAccessor = NULL; - grib_smart_table* table = NULL; + grib_smart_table* table = NULL; size_t size = 1; long* code; - int err = GRIB_SUCCESS; - char tmp[1024] = {0,}; + int err = GRIB_SUCCESS; + char tmp[1024] = { + 0, + }; int i = 0; - tableAccessor = (grib_accessor_smart_table_t*)grib_find_accessor(grib_handle_of_accessor(a), self->smartTable); + tableAccessor = (grib_accessor_smart_table_t*)grib_find_accessor(grib_handle_of_accessor(this), smartTable_); if (!tableAccessor) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Unable to find accessor %s", self->smartTable); + grib_context_log(context_, GRIB_LOG_ERROR, + "Unable to find accessor %s", smartTable_); return GRIB_NOT_FOUND; } - err = grib_get_size_acc(grib_handle_of_accessor(a), (grib_accessor*)tableAccessor, &size); + err = grib_get_size_acc(grib_handle_of_accessor(this), (grib_accessor*)tableAccessor, &size); if (err) return err; if (*len < size) { return GRIB_BUFFER_TOO_SMALL; } - code = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + code = (long*)grib_context_malloc_clear(context_, sizeof(long) * size); if (!code) { - grib_context_log(a->context, GRIB_LOG_FATAL, "%s: Memory allocation error: %zu bytes", a->name, size); + grib_context_log(context_, GRIB_LOG_FATAL, "%s: Memory allocation error: %zu bytes", name_, size); return GRIB_OUT_OF_MEMORY; } if ((err = ((grib_accessor*)tableAccessor)->unpack_long(code, &size)) != GRIB_SUCCESS) return err; - table = tableAccessor->table; + table = tableAccessor->smarttable(); for (i = 0; i < size; i++) { if (table && (code[i] >= 0) && (code[i] < table->numberOfEntries) && - table->entries[code[i]].column[self->index]) { - strcpy(tmp, table->entries[code[i]].column[self->index]); + table->entries[code[i]].column[index_]) { + strcpy(tmp, table->entries[code[i]].column[index_]); } else { snprintf(tmp, sizeof(tmp), "%d", (int)code[i]); } - buffer[i] = grib_context_strdup(a->context, tmp); + buffer[i] = grib_context_strdup(context_, tmp); } *len = size; - grib_context_free(a->context, code); + grib_context_free(context_, code); return GRIB_SUCCESS; } -int grib_accessor_class_smart_table_column_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_smart_table_column_t::unpack_long(long* val, size_t* len) { - grib_accessor_smart_table_column_t* self = (grib_accessor_smart_table_column_t*)a; grib_accessor_smart_table_t* tableAccessor = NULL; - grib_smart_table* table = NULL; + grib_smart_table* table = NULL; size_t size = 1; long* code; @@ -112,74 +109,73 @@ int grib_accessor_class_smart_table_column_t::unpack_long(grib_accessor* a, long for (i = 0; i < *len; i++) val[i] = GRIB_MISSING_LONG; - tableAccessor = (grib_accessor_smart_table_t*)grib_find_accessor(grib_handle_of_accessor(a), self->smartTable); + tableAccessor = (grib_accessor_smart_table_t*)grib_find_accessor(grib_handle_of_accessor(this), smartTable_); if (!tableAccessor) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Unable to find accessor %s", self->smartTable); + grib_context_log(context_, GRIB_LOG_ERROR, + "Unable to find accessor %s", smartTable_); return GRIB_NOT_FOUND; } - err = grib_get_size_acc(grib_handle_of_accessor(a), (grib_accessor*)tableAccessor, &size); + err = grib_get_size_acc(grib_handle_of_accessor(this), (grib_accessor*)tableAccessor, &size); if (err) return err; if (*len < size) { return GRIB_BUFFER_TOO_SMALL; } - code = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + code = (long*)grib_context_malloc_clear(context_, sizeof(long) * size); if (!code) return GRIB_OUT_OF_MEMORY; if ((err = ((grib_accessor*)tableAccessor)->unpack_long(code, &size)) != GRIB_SUCCESS) { - grib_context_free(a->context, code); + grib_context_free(context_, code); return err; } - table = tableAccessor->table; + table = tableAccessor->smarttable(); for (i = 0; i < size; i++) { if (table && (code[i] >= 0) && (code[i] < table->numberOfEntries) && - table->entries[code[i]].column[self->index]) { - val[i] = atol(table->entries[code[i]].column[self->index]); + table->entries[code[i]].column[index_]) { + val[i] = atol(table->entries[code[i]].column[index_]); } } *len = size; - grib_context_free(a->context, code); + grib_context_free(context_, code); return GRIB_SUCCESS; } -int grib_accessor_class_smart_table_column_t::value_count(grib_accessor* a, long* count) +int grib_accessor_smart_table_column_t::value_count(long* count) { - grib_accessor_smart_table_column_t* self = (grib_accessor_smart_table_column_t*)a; size_t size = 0; int err = 0; *count = 0; - if (!self->smartTable) + if (!smartTable_) return 0; - err = grib_get_size(grib_handle_of_accessor(a), self->smartTable, &size); + err = grib_get_size(grib_handle_of_accessor(this), smartTable_, &size); *count = size; return err; } -void grib_accessor_class_smart_table_column_t::destroy(grib_context* context, grib_accessor* a) +void grib_accessor_smart_table_column_t::destroy(grib_context* context) { - if (a->vvalue != NULL) { - grib_context_free(context, a->vvalue); - a->vvalue = NULL; + if (vvalue_ != NULL) { + grib_context_free(context, vvalue_); + vvalue_ = NULL; } - grib_accessor_class_gen_t::destroy(context, a); + grib_accessor_gen_t::destroy(context); } -int grib_accessor_class_smart_table_column_t::get_native_type(grib_accessor* a) +long grib_accessor_smart_table_column_t::get_native_type() { int type = GRIB_TYPE_LONG; /*printf("---------- %s flags=%ld GRIB_ACCESSOR_FLAG_STRING_TYPE=%d\n", - a->name,a->flags,GRIB_ACCESSOR_FLAG_STRING_TYPE);*/ - if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) + a->name,flags_ ,GRIB_ACCESSOR_FLAG_STRING_TYPE);*/ + if (flags_ & GRIB_ACCESSOR_FLAG_STRING_TYPE) type = GRIB_TYPE_STRING; return type; } diff --git a/src/accessor/grib_accessor_class_smart_table_column.h b/src/accessor/grib_accessor_class_smart_table_column.h index 9e1edcd2a..2b7e4cfe3 100644 --- a/src/accessor/grib_accessor_class_smart_table_column.h +++ b/src/accessor/grib_accessor_class_smart_table_column.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,20 +15,18 @@ class grib_accessor_smart_table_column_t : public grib_accessor_gen_t { public: - const char* smartTable; - int index; -}; - -class grib_accessor_class_smart_table_column_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_smart_table_column_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_smart_table_column_t() : + grib_accessor_gen_t() { class_name_ = "smart_table_column"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_smart_table_column_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string_array(grib_accessor*, char**, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_long(long* val, size_t* len) override; + int unpack_string_array(char**, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* smartTable_ = nullptr; + int index_ = 0; }; diff --git a/src/accessor/grib_accessor_class_spd.cc b/src/accessor/grib_accessor_class_spd.cc index 212b4a36e..8d0df9bad 100644 --- a/src/accessor/grib_accessor_class_spd.cc +++ b/src/accessor/grib_accessor_class_spd.cc @@ -10,32 +10,30 @@ #include "grib_accessor_class_spd.h" -grib_accessor_class_spd_t _grib_accessor_class_spd{ "spd" }; -grib_accessor_class* grib_accessor_class_spd = &_grib_accessor_class_spd; +grib_accessor_spd_t _grib_accessor_spd{}; +grib_accessor* grib_accessor_spd = &_grib_accessor_spd; - -long grib_accessor_class_spd_t::byte_count(grib_accessor* a) +long grib_accessor_spd_t::byte_count() { - return a->length; + return length_; } -static long compute_byte_count(grib_accessor* a) +long grib_accessor_spd_t::compute_byte_count() { - grib_accessor_spd_t* self = (grib_accessor_spd_t*)a; long numberOfBits = 0; long numberOfElements = 0; - int ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfBits, &numberOfBits); + int ret = grib_get_long(grib_handle_of_accessor(this), numberOfBits_, &numberOfBits); if (ret) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s unable to get %s to compute size", a->name, self->numberOfBits); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s unable to get %s to compute size", name_, numberOfBits_); return 0; } - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfElements, &numberOfElements); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfElements_, &numberOfElements); if (ret) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s unable to get %s to compute size", a->name, self->numberOfElements); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s unable to get %s to compute size", name_, numberOfElements_); return 0; } numberOfElements++; @@ -43,78 +41,75 @@ static long compute_byte_count(grib_accessor* a) return (numberOfBits * numberOfElements + 7) / 8; } -void grib_accessor_class_spd_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_spd_t::init(const long len, grib_arguments* args) { - grib_accessor_class_long_t::init(a, len, args); - grib_accessor_spd_t* self = (grib_accessor_spd_t*)a; - int n = 0; - self->numberOfBits = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->numberOfElements = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - a->length = compute_byte_count(a); + grib_accessor_long_t::init(len, args); + int n = 0; + numberOfBits_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + numberOfElements_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + length_ = compute_byte_count(); } -int grib_accessor_class_spd_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_spd_t::unpack_long(long* val, size_t* len) { - grib_accessor_spd_t* self = (grib_accessor_spd_t*)a; - long pos = a->offset * 8; - long rlen = 0; - long numberOfBits = 0; + long pos = offset_ * 8; + long rlen = 0; + long numberOfBits = 0; - int ret = value_count(a, &rlen); + int ret = value_count(&rlen); if (ret) return ret; if (*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Wrong size (%zu) for %s, it contains %ld values", *len, a->name, rlen); + grib_context_log(context_, GRIB_LOG_ERROR, + "Wrong size (%zu) for %s, it contains %ld values", *len, name_, rlen); *len = rlen; return GRIB_ARRAY_TOO_SMALL; } - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfBits, &numberOfBits); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfBits_, &numberOfBits); if (ret) return ret; if (numberOfBits > 64) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Invalid number of bits: %ld", numberOfBits); + grib_context_log(context_, GRIB_LOG_ERROR, "Invalid number of bits: %ld", numberOfBits); return GRIB_DECODING_ERROR; } for (long i = 0; i < rlen - 1; i++) - val[i] = grib_decode_unsigned_long(grib_handle_of_accessor(a)->buffer->data, &pos, numberOfBits); + val[i] = grib_decode_unsigned_long(grib_handle_of_accessor(this)->buffer->data, &pos, numberOfBits); - val[rlen - 1] = grib_decode_signed_longb(grib_handle_of_accessor(a)->buffer->data, &pos, numberOfBits); + val[rlen - 1] = grib_decode_signed_longb(grib_handle_of_accessor(this)->buffer->data, &pos, numberOfBits); *len = rlen; return GRIB_SUCCESS; } -int grib_accessor_class_spd_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_spd_t::pack_long(const long* val, size_t* len) { - grib_accessor_spd_t* self = (grib_accessor_spd_t*)a; - int ret = 0; - long off = 0; - long numberOfBits = 0; - size_t buflen = 0; - unsigned char* buf = NULL; - unsigned long i = 0; - long rlen = 0; + int ret = 0; + long off = 0; + long numberOfBits = 0; + size_t buflen = 0; + unsigned char* buf = NULL; + unsigned long i = 0; + long rlen = 0; - ret = value_count(a, &rlen); + ret = value_count(&rlen); if (ret) return ret; if (*len != rlen) { - ret = grib_set_long(grib_handle_of_accessor(a), self->numberOfElements, (*len) - 1); + ret = grib_set_long(grib_handle_of_accessor(this), numberOfElements_, (*len) - 1); if (ret) return ret; } - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfBits, &numberOfBits); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfBits_, &numberOfBits); if (ret) return ret; - buflen = compute_byte_count(a); - buf = (unsigned char*)grib_context_malloc_clear(a->context, buflen); + buflen = compute_byte_count(); + buf = (unsigned char*)grib_context_malloc_clear(context_, buflen); for (i = 0; i < rlen - 1; i++) { grib_encode_unsigned_longb(buf, val[i], &off, numberOfBits); @@ -122,24 +117,23 @@ int grib_accessor_class_spd_t::pack_long(grib_accessor* a, const long* val, size grib_encode_signed_longb(buf, val[rlen - 1], &off, numberOfBits); - grib_buffer_replace(a, buf, buflen, 1, 1); + grib_buffer_replace(this, buf, buflen, 1, 1); - grib_context_free(a->context, buf); + grib_context_free(context_, buf); *len = rlen; return ret; } -int grib_accessor_class_spd_t::value_count(grib_accessor* a, long* numberOfElements) +int grib_accessor_spd_t::value_count(long* numberOfElements) { - grib_accessor_spd_t* self = (grib_accessor_spd_t*)a; int ret; *numberOfElements = 0; - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfElements, numberOfElements); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfElements_, numberOfElements); if (ret) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s unable to get %s to compute size", a->name, self->numberOfElements); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s unable to get %s to compute size", name_, numberOfElements_); return ret; } (*numberOfElements)++; @@ -147,17 +141,17 @@ int grib_accessor_class_spd_t::value_count(grib_accessor* a, long* numberOfEleme return ret; } -long grib_accessor_class_spd_t::byte_offset(grib_accessor* a) +long grib_accessor_spd_t::byte_offset() { - return a->offset; + return offset_; } -void grib_accessor_class_spd_t::update_size(grib_accessor* a, size_t s) +void grib_accessor_spd_t::update_size(size_t s) { - a->length = s; + length_ = s; } -long grib_accessor_class_spd_t::next_offset(grib_accessor* a) +long grib_accessor_spd_t::next_offset() { - return a->byte_offset() + a->length; + return byte_offset() + length_; } diff --git a/src/accessor/grib_accessor_class_spd.h b/src/accessor/grib_accessor_class_spd.h index ee4fa5d12..62e9192dc 100644 --- a/src/accessor/grib_accessor_class_spd.h +++ b/src/accessor/grib_accessor_class_spd.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,22 +15,21 @@ class grib_accessor_spd_t : public grib_accessor_long_t { public: - /* Members defined in spd */ - const char* numberOfBits; - const char* numberOfElements; -}; - -class grib_accessor_class_spd_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_spd_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_spd_t() : + grib_accessor_long_t() { class_name_ = "spd"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_spd_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - long byte_count(grib_accessor*) override; - long byte_offset(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + long byte_count() override; + long byte_offset() override; + long next_offset() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + +private: + const char* numberOfBits_ = nullptr; + const char* numberOfElements_ = nullptr; + + long compute_byte_count(); }; diff --git a/src/accessor/grib_accessor_class_spectral_truncation.cc b/src/accessor/grib_accessor_class_spectral_truncation.cc index fda29784c..a7c2c0a5d 100644 --- a/src/accessor/grib_accessor_class_spectral_truncation.cc +++ b/src/accessor/grib_accessor_class_spectral_truncation.cc @@ -10,41 +10,38 @@ #include "grib_accessor_class_spectral_truncation.h" -grib_accessor_class_spectral_truncation_t _grib_accessor_class_spectral_truncation{ "spectral_truncation" }; -grib_accessor_class* grib_accessor_class_spectral_truncation = &_grib_accessor_class_spectral_truncation; +grib_accessor_spectral_truncation_t _grib_accessor_spectral_truncation{}; +grib_accessor* grib_accessor_spectral_truncation = &_grib_accessor_spectral_truncation; - -void grib_accessor_class_spectral_truncation_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_spectral_truncation_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_spectral_truncation_t* self = (grib_accessor_spectral_truncation_t*)a; + grib_accessor_long_t::init(l, c); int n = 0; - self->J = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->K = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->M = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->T = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + J_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + K_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + M_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + T_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_spectral_truncation_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_spectral_truncation_t::unpack_long(long* val, size_t* len) { - grib_accessor_spectral_truncation_t* self = (grib_accessor_spectral_truncation_t*)a; - int ret = GRIB_SUCCESS; + int ret = 0; long J, K, M, T, Tc; if (*len < 1) return GRIB_ARRAY_TOO_SMALL; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->J, &J)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), J_, &J)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->K, &K)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), K_, &K)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->M, &M)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), M_, &M)) != GRIB_SUCCESS) return ret; Tc = -1; @@ -62,17 +59,17 @@ int grib_accessor_class_spectral_truncation_t::unpack_long(grib_accessor* a, lon } *val = Tc; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->T, &T)) != GRIB_SUCCESS) { + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), T_, &T)) != GRIB_SUCCESS) { if (Tc == -1) - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s. Spectral Truncation Type Unknown: %s=%ld %s=%ld %s=%ld", - a->name, self->J, J, self->K, K, self->M, M); + name_, J, J, K, K, M_, M); Tc = 0; - grib_set_long(grib_handle_of_accessor(a), self->T, Tc); + grib_set_long(grib_handle_of_accessor(this), T_, Tc); } else { if (Tc != -1 && Tc != T) - grib_set_long(grib_handle_of_accessor(a), self->T, Tc); + grib_set_long(grib_handle_of_accessor(this), T_, Tc); } if (ret == GRIB_SUCCESS) diff --git a/src/accessor/grib_accessor_class_spectral_truncation.h b/src/accessor/grib_accessor_class_spectral_truncation.h index c9f85b9f8..055937c07 100644 --- a/src/accessor/grib_accessor_class_spectral_truncation.h +++ b/src/accessor/grib_accessor_class_spectral_truncation.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,18 +15,15 @@ class grib_accessor_spectral_truncation_t : public grib_accessor_long_t { public: - /* Members defined in spectral_truncation */ - const char* J; - const char* K; - const char* M; - const char* T; -}; - -class grib_accessor_class_spectral_truncation_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_spectral_truncation_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_spectral_truncation_t() : + grib_accessor_long_t() { class_name_ = "spectral_truncation"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_spectral_truncation_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* J_ = nullptr; + const char* K_ = nullptr; + const char* M_ = nullptr; + const char* T_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_sprintf.cc b/src/accessor/grib_accessor_class_sprintf.cc index 533d66d7a..075596edb 100644 --- a/src/accessor/grib_accessor_class_sprintf.cc +++ b/src/accessor/grib_accessor_class_sprintf.cc @@ -10,21 +10,18 @@ #include "grib_accessor_class_sprintf.h" -grib_accessor_class_sprintf_t _grib_accessor_class_sprintf{ "sprintf" }; -grib_accessor_class* grib_accessor_class_sprintf = &_grib_accessor_class_sprintf; +grib_accessor_sprintf_t _grib_accessor_sprintf{}; +grib_accessor* grib_accessor_sprintf = &_grib_accessor_sprintf; - -void grib_accessor_class_sprintf_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_sprintf_t::init(const long l, grib_arguments* c) { - grib_accessor_class_ascii_t::init(a, l, c); - grib_accessor_sprintf_t* self = (grib_accessor_sprintf_t*)a; - self->args = c; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_ascii_t::init(l, c); + args_ = c; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_sprintf_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_sprintf_t::unpack_string(char* val, size_t* len) { - grib_accessor_sprintf_t* self = (grib_accessor_sprintf_t*)a; char result[1024]; char tempBuffer[2048]; char sres[1024]; @@ -39,7 +36,7 @@ int grib_accessor_class_sprintf_t::unpack_string(grib_accessor* a, char* val, si const char* tempname = NULL; size_t uname_len = 0; - uname = grib_arguments_get_string(grib_handle_of_accessor(a), self->args, carg++); + uname = grib_arguments_get_string(grib_handle_of_accessor(this), args_, carg++); snprintf(result, sizeof(result), "%s", ""); uname_len = strlen(uname); @@ -57,12 +54,12 @@ int grib_accessor_class_sprintf_t::unpack_string(grib_accessor* a, char* val, si } switch (uname[i]) { case 'd': - tempname = grib_arguments_get_name(grib_handle_of_accessor(a), self->args, carg++); + tempname = grib_arguments_get_name(grib_handle_of_accessor(this), args_, carg++); - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), tempname, &ires)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), tempname, &ires)) != GRIB_SUCCESS) return ret; /* Bug GRIB-56: Check to see if the key is missing */ - is_missing = grib_is_missing(grib_handle_of_accessor(a), tempname, &ret); + is_missing = grib_is_missing(grib_handle_of_accessor(this), tempname, &ret); if (ret != GRIB_SUCCESS) return ret; if (is_missing) { @@ -83,8 +80,8 @@ int grib_accessor_class_sprintf_t::unpack_string(grib_accessor* a, char* val, si break; case 'g': - tempname = grib_arguments_get_name(grib_handle_of_accessor(a), self->args, carg++); - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), tempname, &dres)) != GRIB_SUCCESS) + tempname = grib_arguments_get_name(grib_handle_of_accessor(this), args_, carg++); + if ((ret = grib_get_double_internal(grib_handle_of_accessor(this), tempname, &dres)) != GRIB_SUCCESS) return ret; snprintf(tempBuffer, sizeof(tempBuffer), "%s%g", result, dres); strcpy(result, tempBuffer); @@ -92,8 +89,8 @@ int grib_accessor_class_sprintf_t::unpack_string(grib_accessor* a, char* val, si break; case 's': - tempname = grib_arguments_get_name(grib_handle_of_accessor(a), self->args, carg++); - if ((ret = grib_get_string_internal(grib_handle_of_accessor(a), tempname, sres, &replen)) != GRIB_SUCCESS) + tempname = grib_arguments_get_name(grib_handle_of_accessor(this), args_, carg++); + if ((ret = grib_get_string_internal(grib_handle_of_accessor(this), tempname, sres, &replen)) != GRIB_SUCCESS) return ret; snprintf(tempBuffer, sizeof(tempBuffer), "%s%s", result, sres); strcpy(result, tempBuffer); @@ -119,13 +116,13 @@ int grib_accessor_class_sprintf_t::unpack_string(grib_accessor* a, char* val, si return GRIB_SUCCESS; } -int grib_accessor_class_sprintf_t::value_count(grib_accessor* a, long* count) +int grib_accessor_sprintf_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_sprintf_t::string_length(grib_accessor* a) +size_t grib_accessor_sprintf_t::string_length() { return 1024; } diff --git a/src/accessor/grib_accessor_class_sprintf.h b/src/accessor/grib_accessor_class_sprintf.h index 36d5f3e10..8301845a6 100644 --- a/src/accessor/grib_accessor_class_sprintf.h +++ b/src/accessor/grib_accessor_class_sprintf.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,14 @@ class grib_accessor_sprintf_t : public grib_accessor_ascii_t { public: - /* Members defined in sprintf */ - grib_arguments* args; -}; - -class grib_accessor_class_sprintf_t : public grib_accessor_class_ascii_t -{ -public: - grib_accessor_class_sprintf_t(const char* name) : grib_accessor_class_ascii_t(name) {} + grib_accessor_sprintf_t() : + grib_accessor_ascii_t() { class_name_ = "sprintf"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_sprintf_t{}; } - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + grib_arguments* args_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_statistics.cc b/src/accessor/grib_accessor_class_statistics.cc index 7e4a4eca8..b2fc3078d 100644 --- a/src/accessor/grib_accessor_class_statistics.cc +++ b/src/accessor/grib_accessor_class_statistics.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,55 +10,53 @@ #include "grib_accessor_class_statistics.h" -grib_accessor_class_statistics_t _grib_accessor_class_statistics{ "statistics" }; -grib_accessor_class* grib_accessor_class_statistics = &_grib_accessor_class_statistics; +grib_accessor_statistics_t _grib_accessor_statistics{}; +grib_accessor* grib_accessor_statistics = &_grib_accessor_statistics; - -void grib_accessor_class_statistics_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_statistics_t::init(const long l, grib_arguments* c) { - grib_accessor_class_abstract_vector_t::init(a, l, c); - grib_accessor_statistics_t* self = (grib_accessor_statistics_t*)a; + grib_accessor_abstract_vector_t::init(l, c); int n = 0; - self->missing_value = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; + missing_value_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + flags_ |= GRIB_ACCESSOR_FLAG_HIDDEN; - self->number_of_elements = 8; - self->v = (double*)grib_context_malloc(a->context, sizeof(double) * self->number_of_elements); + number_of_elements_ = 8; + v_ = (double*)grib_context_malloc(context_, + sizeof(double) * number_of_elements_); - a->length = 0; - a->dirty = 1; + length_ = 0; + dirty_ = 1; } -int grib_accessor_class_statistics_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_statistics_t::unpack_double(double* val, size_t* len) { - grib_accessor_statistics_t* self = (grib_accessor_statistics_t*)a; - int ret = 0; + int ret = 0; double* values = NULL; size_t i = 0, size = 0, real_size = 0; double max, min, avg, sd, value, skew, kurt, m2 = 0, m3 = 0, m4 = 0; - double missing = 0; + double missing = 0; long missingValuesPresent = 0; size_t number_of_missing = 0; - grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + grib_context* c = context_; + grib_handle* h = grib_handle_of_accessor(this); - if (!a->dirty) + if (!dirty_) return GRIB_SUCCESS; - if (*len != self->number_of_elements) + if (*len != number_of_elements_) return GRIB_ARRAY_TOO_SMALL; - if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) return ret; - grib_context_log(a->context, GRIB_LOG_DEBUG, + grib_context_log(context_, GRIB_LOG_DEBUG, "grib_accessor_statistics_t: computing statistics for %d values", size); - if ((ret = grib_get_double(h, self->missing_value, &missing)) != GRIB_SUCCESS) + if ((ret = grib_get_double(h, missing_value_, &missing)) != GRIB_SUCCESS) return ret; if ((ret = grib_get_long_internal(h, "missingValuesPresent", &missingValuesPresent)) != GRIB_SUCCESS) return ret; @@ -68,7 +65,7 @@ int grib_accessor_class_statistics_t::unpack_double(grib_accessor* a, double* va if (!values) return GRIB_OUT_OF_MEMORY; - if ((ret = grib_get_double_array_internal(h, self->values, values, &size)) != GRIB_SUCCESS) { + if ((ret = grib_get_double_array_internal(h, values_, values, &size)) != GRIB_SUCCESS) { grib_context_free(c, values); return ret; } @@ -148,42 +145,39 @@ int grib_accessor_class_statistics_t::unpack_double(grib_accessor* a, double* va skew = m3 / (sd * sd * sd); kurt = m4 / (m2 * m2) - 3.0; } - - //printf("\ngrib_accessor_class_statistics_t::unpack_double Computed. So setting dirty to 0....... \n"); - a->dirty = 0; + // printf("\ngrib_accessor_class_statistics_t::unpack_double Computed. So setting dirty to 0....... \n"); + dirty_ = 0; grib_context_free(c, values); - self->v[0] = max; - self->v[1] = min; - self->v[2] = avg; - self->v[3] = number_of_missing; - self->v[4] = sd; - self->v[5] = skew; - self->v[6] = kurt; - self->v[7] = sd == 0 ? 1 : 0; + v_[0] = max; + v_[1] = min; + v_[2] = avg; + v_[3] = number_of_missing; + v_[4] = sd; + v_[5] = skew; + v_[6] = kurt; + v_[7] = sd == 0 ? 1 : 0; - for (i = 0; i < self->number_of_elements; i++) - val[i] = self->v[i]; + for (i = 0; i < number_of_elements_; i++) + val[i] = v_[i]; return ret; } -int grib_accessor_class_statistics_t::value_count(grib_accessor* a, long* count) +int grib_accessor_statistics_t::value_count(long* count) { - grib_accessor_statistics_t* self = (grib_accessor_statistics_t*)a; - *count = self->number_of_elements; + *count = number_of_elements_; return 0; } -void grib_accessor_class_statistics_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_statistics_t::destroy(grib_context* c) { - grib_accessor_statistics_t* self = (grib_accessor_statistics_t*)a; - grib_context_free(c, self->v); - grib_accessor_class_abstract_vector_t::destroy(c, a); + grib_context_free(c, v_); + grib_accessor_abstract_vector_t::destroy(c); } -int grib_accessor_class_statistics_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_statistics_t::compare(grib_accessor* b) { int retval = GRIB_SUCCESS; double* aval = 0; @@ -194,7 +188,7 @@ int grib_accessor_class_statistics_t::compare(grib_accessor* a, grib_accessor* b int err = 0; long count = 0; - err = a->value_count(&count); + err = value_count(&count); if (err) return err; alen = count; @@ -207,26 +201,26 @@ int grib_accessor_class_statistics_t::compare(grib_accessor* a, grib_accessor* b if (alen != blen) return GRIB_COUNT_MISMATCH; - aval = (double*)grib_context_malloc(a->context, alen * sizeof(double)); - bval = (double*)grib_context_malloc(b->context, blen * sizeof(double)); + aval = (double*)grib_context_malloc(context_, alen * sizeof(double)); + bval = (double*)grib_context_malloc(b->context_, blen * sizeof(double)); - b->dirty = 1; - a->dirty = 1; + b->dirty_ = 1; + dirty_ = 1; - a->unpack_double(aval, &alen); + unpack_double(aval, &alen); b->unpack_double(bval, &blen); retval = GRIB_SUCCESS; for (size_t i = 0; i < alen && retval == GRIB_SUCCESS; ++i) { if (aval[i] != bval[i]) retval = GRIB_DOUBLE_VALUE_MISMATCH; } - grib_context_free(a->context, aval); - grib_context_free(b->context, bval); + grib_context_free(context_, aval); + grib_context_free(b->context_, bval); return retval; } -int grib_accessor_class_statistics_t::unpack_string(grib_accessor* a, char* v, size_t* len) +int grib_accessor_statistics_t::unpack_string(char* v, size_t* len) { return GRIB_NOT_IMPLEMENTED; } diff --git a/src/accessor/grib_accessor_class_statistics.h b/src/accessor/grib_accessor_class_statistics.h index 63d7cbc00..366727b31 100644 --- a/src/accessor/grib_accessor_class_statistics.h +++ b/src/accessor/grib_accessor_class_statistics.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,20 +15,17 @@ class grib_accessor_statistics_t : public grib_accessor_abstract_vector_t { public: - /* Members defined in statistics */ - const char* values; - const char* missing_value; -}; - -class grib_accessor_class_statistics_t : public grib_accessor_class_abstract_vector_t -{ -public: - grib_accessor_class_statistics_t(const char* name) : grib_accessor_class_abstract_vector_t(name) {} + grib_accessor_statistics_t() : + grib_accessor_abstract_vector_t() { class_name_ = "statistics"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_statistics_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int compare(grib_accessor*, grib_accessor*) override; + int unpack_double(double* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void init(const long, grib_arguments*) override; + int compare(grib_accessor*) override; + +private: + const char* values_ = nullptr; + const char* missing_value_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_statistics_spectral.cc b/src/accessor/grib_accessor_class_statistics_spectral.cc index b4c17db03..5a092e25b 100644 --- a/src/accessor/grib_accessor_class_statistics_spectral.cc +++ b/src/accessor/grib_accessor_class_statistics_spectral.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,59 +10,57 @@ #include "grib_accessor_class_statistics_spectral.h" -grib_accessor_class_statistics_spectral_t _grib_accessor_class_statistics_spectral{ "statistics_spectral" }; -grib_accessor_class* grib_accessor_class_statistics_spectral = &_grib_accessor_class_statistics_spectral; +grib_accessor_statistics_spectral_t _grib_accessor_statistics_spectral{}; +grib_accessor* grib_accessor_statistics_spectral = &_grib_accessor_statistics_spectral; - -void grib_accessor_class_statistics_spectral_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_statistics_spectral_t::init(const long l, grib_arguments* c) { - grib_accessor_class_abstract_vector_t::init(a, l, c); - grib_accessor_statistics_spectral_t* self = (grib_accessor_statistics_spectral_t*)a; + grib_accessor_abstract_vector_t::init(l, c); int n = 0; + grib_handle* h = grib_handle_of_accessor(this); - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->J = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->K = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->M = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->JS = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + values_ = grib_arguments_get_name(h, c, n++); + J_ = grib_arguments_get_name(h, c, n++); + K_ = grib_arguments_get_name(h, c, n++); + M_ = grib_arguments_get_name(h, c, n++); + JS_ = grib_arguments_get_name(h, c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; - self->number_of_elements = 4; - self->v = (double*)grib_context_malloc(a->context, sizeof(double) * self->number_of_elements); + number_of_elements_ = 4; + v_ = (double*)grib_context_malloc(context_, sizeof(double) * number_of_elements_); - a->length = 0; - a->dirty = 1; + length_ = 0; + dirty_ = 1; } -int grib_accessor_class_statistics_spectral_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_statistics_spectral_t::unpack_double(double* val, size_t* len) { - grib_accessor_statistics_spectral_t* self = (grib_accessor_statistics_spectral_t*)a; int ret = 0, i = 0; double* values; size_t size = 0; long J, K, M, N; double avg, enorm, sd; - grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + grib_context* c = context_; + grib_handle* h = grib_handle_of_accessor(this); - if (!a->dirty) + if (!dirty_) return GRIB_SUCCESS; - if (*len != self->number_of_elements) + if (*len != number_of_elements_) return GRIB_ARRAY_TOO_SMALL; - if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) + if ((ret = grib_get_size(h, values_, &size)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long(grib_handle_of_accessor(a), self->J, &J)) != GRIB_SUCCESS) + if ((ret = grib_get_long(h, J_, &J)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long(grib_handle_of_accessor(a), self->K, &K)) != GRIB_SUCCESS) + if ((ret = grib_get_long(h, K_, &K)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long(grib_handle_of_accessor(a), self->M, &M)) != GRIB_SUCCESS) + if ((ret = grib_get_long(h, M_, &M)) != GRIB_SUCCESS) return ret; if (J != M || M != K) @@ -72,7 +69,7 @@ int grib_accessor_class_statistics_spectral_t::unpack_double(grib_accessor* a, d N = (M + 1) * (M + 2) / 2; if (2 * N != size) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "wrong number of components for spherical harmonics %ld != %ld", 2 * N, size); return GRIB_WRONG_ARRAY_SIZE; } @@ -81,7 +78,7 @@ int grib_accessor_class_statistics_spectral_t::unpack_double(grib_accessor* a, d if (!values) return GRIB_OUT_OF_MEMORY; - if ((ret = grib_get_double_array_internal(h, self->values, values, &size)) != GRIB_SUCCESS) { + if ((ret = grib_get_double_array_internal(h, values_, values, &size)) != GRIB_SUCCESS) { grib_context_free(c, values); return ret; } @@ -100,36 +97,34 @@ int grib_accessor_class_statistics_spectral_t::unpack_double(grib_accessor* a, d sd = sqrt(sd); enorm = sqrt(enorm); - a->dirty = 0; + dirty_ = 0; grib_context_free(c, values); - self->v[0] = avg; - self->v[1] = enorm; - self->v[2] = sd; - self->v[3] = sd == 0 ? 1 : 0; + v_[0] = avg; + v_[1] = enorm; + v_[2] = sd; + v_[3] = sd == 0 ? 1 : 0; - for (i = 0; i < self->number_of_elements; i++) - val[i] = self->v[i]; + for (i = 0; i < number_of_elements_; i++) + val[i] = v_[i]; return ret; } -int grib_accessor_class_statistics_spectral_t::value_count(grib_accessor* a, long* count) +int grib_accessor_statistics_spectral_t::value_count(long* count) { - grib_accessor_statistics_spectral_t* self = (grib_accessor_statistics_spectral_t*)a; - *count = self->number_of_elements; - return 0; + *count = number_of_elements_; + return GRIB_SUCCESS; } -void grib_accessor_class_statistics_spectral_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_statistics_spectral_t::destroy(grib_context* c) { - grib_accessor_statistics_spectral_t* self = (grib_accessor_statistics_spectral_t*)a; - grib_context_free(c, self->v); - grib_accessor_class_abstract_vector_t::destroy(c, a); + grib_context_free(c, v_); + grib_accessor_abstract_vector_t::destroy(c); } -int grib_accessor_class_statistics_spectral_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_statistics_spectral_t::compare(grib_accessor* b) { int retval = GRIB_SUCCESS; double* aval = 0; @@ -140,7 +135,7 @@ int grib_accessor_class_statistics_spectral_t::compare(grib_accessor* a, grib_ac int err = 0; long count = 0; - err = a->value_count(&count); + err = value_count(&count); if (err) return err; alen = count; @@ -153,21 +148,21 @@ int grib_accessor_class_statistics_spectral_t::compare(grib_accessor* a, grib_ac if (alen != blen) return GRIB_COUNT_MISMATCH; - aval = (double*)grib_context_malloc(a->context, alen * sizeof(double)); - bval = (double*)grib_context_malloc(b->context, blen * sizeof(double)); + aval = (double*)grib_context_malloc(context_, alen * sizeof(double)); + bval = (double*)grib_context_malloc(b->context_, blen * sizeof(double)); - b->dirty = 1; - a->dirty = 1; + b->dirty_ = 1; + dirty_ = 1; - a->unpack_double(aval, &alen); + unpack_double(aval, &alen); b->unpack_double(bval, &blen); retval = GRIB_SUCCESS; for (size_t i = 0; i < alen && retval == GRIB_SUCCESS; ++i) { if (aval[i] != bval[i]) retval = GRIB_DOUBLE_VALUE_MISMATCH; } - grib_context_free(a->context, aval); - grib_context_free(b->context, bval); + grib_context_free(context_, aval); + grib_context_free(b->context_, bval); return retval; } diff --git a/src/accessor/grib_accessor_class_statistics_spectral.h b/src/accessor/grib_accessor_class_statistics_spectral.h index 41846c5c7..34f07a53e 100644 --- a/src/accessor/grib_accessor_class_statistics_spectral.h +++ b/src/accessor/grib_accessor_class_statistics_spectral.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,22 +15,19 @@ class grib_accessor_statistics_spectral_t : public grib_accessor_abstract_vector_t { public: - /* Members defined in statistics_spectral */ - const char* values; - const char* J; - const char* K; - const char* M; - const char* JS; -}; - -class grib_accessor_class_statistics_spectral_t : public grib_accessor_class_abstract_vector_t -{ -public: - grib_accessor_class_statistics_spectral_t(const char* name) : grib_accessor_class_abstract_vector_t(name) {} + grib_accessor_statistics_spectral_t() : + grib_accessor_abstract_vector_t() { class_name_ = "statistics_spectral"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_statistics_spectral_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int compare(grib_accessor*, grib_accessor*) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void init(const long, grib_arguments*) override; + int compare(grib_accessor*) override; + +private: + const char* values_ = nullptr; + const char* J_ = nullptr; + const char* K_ = nullptr; + const char* M_ = nullptr; + const char* JS_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_step_human_readable.cc b/src/accessor/grib_accessor_class_step_human_readable.cc index 18dec9c14..20f6ed199 100644 --- a/src/accessor/grib_accessor_class_step_human_readable.cc +++ b/src/accessor/grib_accessor_class_step_human_readable.cc @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -11,24 +10,22 @@ #include "grib_accessor_class_step_human_readable.h" -grib_accessor_class_step_human_readable_t _grib_accessor_class_step_human_readable{ "step_human_readable" }; -grib_accessor_class* grib_accessor_class_step_human_readable = &_grib_accessor_class_step_human_readable; +grib_accessor_step_human_readable_t _grib_accessor_step_human_readable{}; +grib_accessor* grib_accessor_step_human_readable = &_grib_accessor_step_human_readable; - -void grib_accessor_class_step_human_readable_t::init(grib_accessor* a, const long len, grib_arguments* params) +void grib_accessor_step_human_readable_t::init(const long len, grib_arguments* params) { - grib_accessor_class_gen_t::init(a, len, params); - grib_accessor_step_human_readable_t* self = (grib_accessor_step_human_readable_t*)a; - int n = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_accessor_gen_t::init(len, params); + int n = 0; + grib_handle* h = grib_handle_of_accessor(this); - self->stepUnits = grib_arguments_get_name(h, params, n++); - self->step = grib_arguments_get_name(h, params, n++); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + stepUnits_ = grib_arguments_get_name(h, params, n++); + step_ = grib_arguments_get_name(h, params, n++); + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_step_human_readable_t::get_native_type(grib_accessor* a) +long grib_accessor_step_human_readable_t::get_native_type() { return GRIB_TYPE_STRING; } @@ -66,22 +63,20 @@ static int get_step_human_readable(grib_handle* h, char* result, size_t* length) return GRIB_SUCCESS; } -int grib_accessor_class_step_human_readable_t::unpack_string(grib_accessor* a, char* buffer, size_t* len) +int grib_accessor_step_human_readable_t::unpack_string(char* buffer, size_t* len) { - grib_accessor_step_human_readable_t* self = (grib_accessor_step_human_readable_t*)a; - - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); long stepUnits = 0; int err = 0; /* Save the current value of stepUnits */ - err = grib_get_long_internal(h, self->stepUnits, &stepUnits); + err = grib_get_long_internal(h, stepUnits_, &stepUnits); if (err) return err; /* This will change stepUnits to seconds for its calculation */ err = get_step_human_readable(h, buffer, len); /* Restore stepUnits */ - grib_set_long(h, self->stepUnits, stepUnits); + grib_set_long(h, stepUnits_, stepUnits); return err; } diff --git a/src/accessor/grib_accessor_class_step_human_readable.h b/src/accessor/grib_accessor_class_step_human_readable.h index cbd61ed31..1e26c0cdf 100644 --- a/src/accessor/grib_accessor_class_step_human_readable.h +++ b/src/accessor/grib_accessor_class_step_human_readable.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,14 @@ class grib_accessor_step_human_readable_t : public grib_accessor_gen_t { public: - /* Members defined in step_human_readable */ - const char* stepUnits; - const char* step; -}; - -class grib_accessor_class_step_human_readable_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_step_human_readable_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_step_human_readable_t() : + grib_accessor_gen_t() { class_name_ = "step_human_readable"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_step_human_readable_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_string(char*, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* stepUnits_ = nullptr; + const char* step_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_step_in_units.cc b/src/accessor/grib_accessor_class_step_in_units.cc index e5fd32b8f..d63a13c76 100644 --- a/src/accessor/grib_accessor_class_step_in_units.cc +++ b/src/accessor/grib_accessor_class_step_in_units.cc @@ -12,50 +12,48 @@ #include "step_utilities.h" #include -grib_accessor_class_step_in_units_t _grib_accessor_class_step_in_units{"step_in_units"}; -grib_accessor_class* grib_accessor_class_step_in_units = &_grib_accessor_class_step_in_units; +grib_accessor_step_in_units_t _grib_accessor_step_in_units{}; +grib_accessor* grib_accessor_step_in_units = &_grib_accessor_step_in_units; -void grib_accessor_class_step_in_units_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_step_in_units_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_step_in_units_t* self = (grib_accessor_step_in_units_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_long_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - self->forecast_time_value = grib_arguments_get_name(hand, c, n++); - self->forecast_time_unit = grib_arguments_get_name(hand, c, n++); - self->step_units = grib_arguments_get_name(hand, c, n++); - self->time_range_unit = grib_arguments_get_name(hand, c, n++); - self->time_range_value = grib_arguments_get_name(hand, c, n++); + forecast_time_value_ = grib_arguments_get_name(hand, c, n++); + forecast_time_unit_ = grib_arguments_get_name(hand, c, n++); + step_units_ = grib_arguments_get_name(hand, c, n++); + time_range_unit_ = grib_arguments_get_name(hand, c, n++); + time_range_value_ = grib_arguments_get_name(hand, c, n++); } -void grib_accessor_class_step_in_units_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_step_in_units_t::dump(grib_dumper* dumper) { - grib_dump_double(dumper, a, NULL); + grib_dump_double(dumper, this, NULL); } -int grib_accessor_class_step_in_units_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_step_in_units_t::unpack_long(long* val, size_t* len) { - const grib_accessor_step_in_units_t* self = (grib_accessor_step_in_units_t*)a; int err = 0; long forecast_time_value, forecast_time_unit, step_units; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); - if ((err= grib_get_long_internal(h, "stepUnits", &step_units)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, "stepUnits", &step_units)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(h, self->forecast_time_unit, &forecast_time_unit))) + if ((err = grib_get_long_internal(h, forecast_time_unit_, &forecast_time_unit))) return err; - if ((err = grib_get_long_internal(h, self->forecast_time_value, &forecast_time_value))) + if ((err = grib_get_long_internal(h, forecast_time_value_, &forecast_time_value))) return err; try { - eccodes::Step step{forecast_time_value, forecast_time_unit}; + eccodes::Step step{ forecast_time_value, forecast_time_unit }; step.optimize_unit(); - if ((err = grib_set_long_internal(h, "startStepUnit", eccodes::Unit{step_units}.value())) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(h, "startStepUnit", eccodes::Unit{ step_units }.value())) != GRIB_SUCCESS) return err; - *val = step.value(eccodes::Unit{step_units}); + *val = step.value(eccodes::Unit{ step_units }); } catch (std::exception& e) { grib_context_log(h->context, GRIB_LOG_ERROR, "step_in_units: %s", e.what()); @@ -65,27 +63,26 @@ int grib_accessor_class_step_in_units_t::unpack_long(grib_accessor* a, long* val return GRIB_SUCCESS; } -int grib_accessor_class_step_in_units_t::unpack_double(grib_accessor* a, double * val, size_t* len) +int grib_accessor_step_in_units_t::unpack_double(double* val, size_t* len) { - const grib_accessor_step_in_units_t* self = (grib_accessor_step_in_units_t*)a; int err = 0; long forecast_time_value, forecast_time_unit, step_units; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); - if ((err= grib_get_long_internal(h, "stepUnits", &step_units)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, "stepUnits", &step_units)) != GRIB_SUCCESS) return err; - if ((err = grib_get_long_internal(h, self->forecast_time_unit, &forecast_time_unit))) + if ((err = grib_get_long_internal(h, forecast_time_unit_, &forecast_time_unit))) return err; - if ((err = grib_get_long_internal(h, self->forecast_time_value, &forecast_time_value))) + if ((err = grib_get_long_internal(h, forecast_time_value_, &forecast_time_value))) return err; try { - eccodes::Step step{forecast_time_value, forecast_time_unit}; + eccodes::Step step{ forecast_time_value, forecast_time_unit }; - if ((err = grib_set_long_internal(h, "startStepUnit", eccodes::Unit{step_units}.value())) != GRIB_SUCCESS) + if ((err = grib_set_long_internal(h, "startStepUnit", eccodes::Unit{ step_units }.value())) != GRIB_SUCCESS) return err; - *val = step.value(eccodes::Unit{step_units}); + *val = step.value(eccodes::Unit{ step_units }); } catch (std::exception& e) { grib_context_log(h->context, GRIB_LOG_ERROR, "step_in_units: %s", e.what()); @@ -95,19 +92,18 @@ int grib_accessor_class_step_in_units_t::unpack_double(grib_accessor* a, double return GRIB_SUCCESS; } -static int pack_long_new_(grib_accessor* a, const long start_step_value, const long start_step_unit, const long force_step_units) +int grib_accessor_step_in_units_t::pack_long_new_(const long start_step_value, const long start_step_unit, const long force_step_units) { - const grib_accessor_step_in_units_t* self = (grib_accessor_step_in_units_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int err = 0; + grib_handle* h = grib_handle_of_accessor(this); + int err = 0; long forecast_time_unit; long start_step_value_old; long start_step_unit_old; size_t len = 0; - if ((err = grib_get_long_internal(h, self->forecast_time_unit, &forecast_time_unit)) != GRIB_SUCCESS) + if ((err = grib_get_long_internal(h, forecast_time_unit_, &forecast_time_unit)) != GRIB_SUCCESS) return err; - if ((err = a->unpack_long(&start_step_value_old, &len)) != GRIB_SUCCESS) + if ((err = unpack_long(&start_step_value_old, &len)) != GRIB_SUCCESS) return err; if ((err = grib_get_long_internal(h, "startStepUnit", &start_step_unit_old)) != GRIB_SUCCESS) return err; @@ -116,39 +112,39 @@ static int pack_long_new_(grib_accessor* a, const long start_step_value, const l eccodes::Step forecast_time(start_step_value, start_step_unit); eccodes::Step time_range_new{}; - auto time_range_opt = get_step(h, self->time_range_value, self->time_range_unit); + auto time_range_opt = get_step(h, time_range_value_, time_range_unit_); if (time_range_opt) { auto time_range = time_range_opt.value(); - time_range = time_range - (forecast_time - start_step_old); + time_range = time_range - (forecast_time - start_step_old); if (time_range.value() < 0) - time_range = eccodes::Step{0l, time_range.unit()}; + time_range = eccodes::Step{ 0l, time_range.unit() }; auto [sa, sb] = find_common_units(forecast_time.optimize_unit(), time_range.optimize_unit()); - if ((err = set_step(h, self->forecast_time_value, self->forecast_time_unit, sa)) != GRIB_SUCCESS) + if ((err = set_step(h, forecast_time_value_, forecast_time_unit_, sa)) != GRIB_SUCCESS) return err; if ((err = grib_set_long_internal(h, "startStepUnit", forecast_time.unit().value())) != GRIB_SUCCESS) return err; - if ((err = set_step(h, self->time_range_value, self->time_range_unit, sb)) != GRIB_SUCCESS) + if ((err = set_step(h, time_range_value_, time_range_unit_, sb)) != GRIB_SUCCESS) return err; return GRIB_SUCCESS; } - if (eccodes::Unit{force_step_units} == eccodes::Unit{eccodes::Unit::Value::MISSING}) { + if (eccodes::Unit{ force_step_units } == eccodes::Unit{ eccodes::Unit::Value::MISSING }) { forecast_time.optimize_unit(); } if ((err = grib_set_long_internal(h, "startStepUnit", forecast_time.unit().value())) != GRIB_SUCCESS) return err; - if ((err = set_step(h, self->forecast_time_value, self->forecast_time_unit, forecast_time)) != GRIB_SUCCESS) + if ((err = set_step(h, forecast_time_value_, forecast_time_unit_, forecast_time)) != GRIB_SUCCESS) return err; return GRIB_SUCCESS; } -int grib_accessor_class_step_in_units_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_step_in_units_t::pack_long(const long* val, size_t* len) { - grib_handle* h = grib_handle_of_accessor(a); - int ret = GRIB_SUCCESS; + grib_handle* h = grib_handle_of_accessor(this); + int ret = GRIB_SUCCESS; long force_step_units; if ((ret = grib_get_long_internal(h, "forceStepUnits", &force_step_units)) != GRIB_SUCCESS) @@ -156,12 +152,12 @@ int grib_accessor_class_step_in_units_t::pack_long(grib_accessor* a, const long* long start_step_unit; try { - if (eccodes::Unit{force_step_units} == eccodes::Unit{eccodes::Unit::Value::MISSING}) { + if (eccodes::Unit{ force_step_units } == eccodes::Unit{ eccodes::Unit::Value::MISSING }) { if ((ret = grib_get_long_internal(h, "startStepUnit", &start_step_unit)) != GRIB_SUCCESS) return ret; - if (eccodes::Unit{start_step_unit} == eccodes::Unit{eccodes::Unit::Value::MISSING}) - start_step_unit = eccodes::Unit{eccodes::Unit::Value::HOUR}.value(); + if (eccodes::Unit{ start_step_unit } == eccodes::Unit{ eccodes::Unit::Value::MISSING }) + start_step_unit = eccodes::Unit{ eccodes::Unit::Value::HOUR }.value(); } else { start_step_unit = force_step_units; @@ -172,56 +168,55 @@ int grib_accessor_class_step_in_units_t::pack_long(grib_accessor* a, const long* return GRIB_DECODING_ERROR; } - ret = pack_long_new_(a, *val, start_step_unit, force_step_units); + ret = pack_long_new_(*val, start_step_unit, force_step_units); return ret; } -int grib_accessor_class_step_in_units_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_step_in_units_t::pack_string(const char* val, size_t* len) { - grib_handle* h = grib_handle_of_accessor(a); - //long force_step_units = eccodes::Unit(eccodes::Unit::Value::MISSING).value(); + grib_handle* h = grib_handle_of_accessor(this); + // long force_step_units = eccodes::Unit(eccodes::Unit::Value::MISSING).value(); int ret = GRIB_SUCCESS; long force_step_units; if ((ret = grib_get_long_internal(h, "forceStepUnits", &force_step_units)) != GRIB_SUCCESS) return ret; try { - eccodes::Step step = step_from_string(val, eccodes::Unit{force_step_units}); - if ((ret = pack_long_new_(a, step.value(), step.unit().value(), force_step_units)) != GRIB_SUCCESS) + eccodes::Step step = step_from_string(val, eccodes::Unit{ force_step_units }); + if ((ret = pack_long_new_(step.value(), step.unit().value(), force_step_units)) != GRIB_SUCCESS) return ret; } catch (std::exception& e) { - grib_context_log(a->context, GRIB_LOG_ERROR, "step_in_units: %s", e.what()); + grib_context_log(context_, GRIB_LOG_ERROR, "step_in_units: %s", e.what()); return GRIB_DECODING_ERROR; } return GRIB_SUCCESS; } -int grib_accessor_class_step_in_units_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_step_in_units_t::unpack_string(char* val, size_t* len) { - const grib_accessor_step_in_units_t* self = (grib_accessor_step_in_units_t*)a; - grib_handle* h = grib_handle_of_accessor(a); - int ret = GRIB_SUCCESS; + grib_handle* h = grib_handle_of_accessor(this); + int ret = GRIB_SUCCESS; long start_step_value = 0; - long start_step_unit = 0; - long step_units = 0; - char fp_format[128] = "%g"; - size_t fp_format_len = sizeof(fp_format); - int show_hours = a->context->grib_hourly_steps_with_units; + long start_step_unit = 0; + long step_units = 0; + char fp_format[128] = "%g"; + size_t fp_format_len = sizeof(fp_format); + int show_hours = context_->grib_hourly_steps_with_units; if ((ret = grib_get_long_internal(h, "startStep", &start_step_value)) != GRIB_SUCCESS) return ret; if ((ret = grib_get_long_internal(h, "startStepUnit", &start_step_unit)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, self->step_units, &step_units))) + if ((ret = grib_get_long_internal(h, step_units_, &step_units))) return ret; if ((ret = grib_get_string_internal(h, "formatForDoubles", fp_format, &fp_format_len)) != GRIB_SUCCESS) return ret; try { - eccodes::Step step{start_step_value, start_step_unit}; + eccodes::Step step{ start_step_value, start_step_unit }; std::stringstream ss; ss << step.value(fp_format, show_hours); @@ -243,16 +238,16 @@ int grib_accessor_class_step_in_units_t::unpack_string(grib_accessor* a, char* v return GRIB_SUCCESS; } -int grib_accessor_class_step_in_units_t::get_native_type(grib_accessor* a) +long grib_accessor_step_in_units_t::get_native_type() { - grib_handle* h = grib_handle_of_accessor(a); - const int show_units_for_hours = a->context->grib_hourly_steps_with_units; + grib_handle* h = grib_handle_of_accessor(this); + const int show_units_for_hours = context_->grib_hourly_steps_with_units; if (!show_units_for_hours) { long step_units = 0; if (grib_get_long_internal(h, "stepUnits", &step_units) == GRIB_SUCCESS) { - if (eccodes::Unit{step_units} == eccodes::Unit::Value::HOUR) { - return GRIB_TYPE_LONG; // For backward compatibility + if (eccodes::Unit{ step_units } == eccodes::Unit::Value::HOUR) { + return GRIB_TYPE_LONG; // For backward compatibility } } } diff --git a/src/accessor/grib_accessor_class_step_in_units.h b/src/accessor/grib_accessor_class_step_in_units.h index 66f4b2b44..4d561b514 100644 --- a/src/accessor/grib_accessor_class_step_in_units.h +++ b/src/accessor/grib_accessor_class_step_in_units.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,25 +15,24 @@ class grib_accessor_step_in_units_t : public grib_accessor_long_t { public: - /* Members defined in step_in_units */ - const char* forecast_time_value; - const char* forecast_time_unit; - const char* step_units; - const char* time_range_unit; - const char* time_range_value; -}; - -class grib_accessor_class_step_in_units_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_step_in_units_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_step_in_units_t() : + grib_accessor_long_t() { class_name_ = "step_in_units"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_step_in_units_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* forecast_time_value_ = nullptr; + const char* forecast_time_unit_ = nullptr; + const char* step_units_ = nullptr; + const char* time_range_unit_ = nullptr; + const char* time_range_value_ = nullptr; + + int pack_long_new_(const long start_step_value, const long start_step_unit, const long force_step_units); }; diff --git a/src/accessor/grib_accessor_class_sum.cc b/src/accessor/grib_accessor_class_sum.cc index 5eb3882d1..d23706077 100644 --- a/src/accessor/grib_accessor_class_sum.cc +++ b/src/accessor/grib_accessor_class_sum.cc @@ -10,63 +10,27 @@ #include "grib_accessor_class_sum.h" -grib_accessor_class_sum_t _grib_accessor_class_sum{ "sum" }; -grib_accessor_class* grib_accessor_class_sum = &_grib_accessor_class_sum; +grib_accessor_sum_t _grib_accessor_sum{}; +grib_accessor* grib_accessor_sum = &_grib_accessor_sum; - -void grib_accessor_class_sum_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_sum_t::init(const long l, grib_arguments* c) { - grib_accessor_class_double_t::init(a, l, c); - grib_accessor_sum_t* self = (grib_accessor_sum_t*)a; - int n = 0; - self->values = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_double_t::init(l, c); + int n = 0; + values_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_sum_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_sum_t::unpack_long(long* val, size_t* len) { - grib_accessor_sum_t* self = (grib_accessor_sum_t*)a; int ret = 0; size_t size = 0; long* values = 0; - size_t i = 0; - long count = 0; - - ret = value_count(a, &count); - if (ret) - return ret; - size = count; - - if (size == 0) { - *val = 0; - return GRIB_SUCCESS; - } - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); - if (!values) - return GRIB_OUT_OF_MEMORY; - - grib_get_long_array(grib_handle_of_accessor(a), self->values, values, &size); - - *val = 0; - for (i = 0; i < size; i++) - *val += values[i]; - - grib_context_free(a->context, values); - - return GRIB_SUCCESS; -} - -int grib_accessor_class_sum_t::unpack_double(grib_accessor* a, double* val, size_t* len) -{ - grib_accessor_sum_t* self = (grib_accessor_sum_t*)a; - int ret = 0; - size_t size = 0; - double* values = 0; - size_t i = 0; + long i; long count = 0; - ret = value_count(a, &count); + ret = value_count(&count); if (ret) return ret; size = count; @@ -75,36 +39,67 @@ int grib_accessor_class_sum_t::unpack_double(grib_accessor* a, double* val, size *val = 0; return GRIB_SUCCESS; } - values = (double*)grib_context_malloc_clear(a->context, sizeof(double) * size); + values = (long*)grib_context_malloc_clear(context_, sizeof(long) * size); if (!values) return GRIB_OUT_OF_MEMORY; - ret = grib_get_double_array(grib_handle_of_accessor(a), self->values, values, &size); + grib_get_long_array(grib_handle_of_accessor(this), values_, values, &size); + + *val = 0; + for (i = 0; i < size; i++) + *val += values[i]; + + grib_context_free(context_, values); + + return GRIB_SUCCESS; +} + +int grib_accessor_sum_t::unpack_double(double* val, size_t* len) +{ + int ret = 0; + size_t size = 0; + double* values = 0; + long i; + long count = 0; + + ret = value_count(&count); + if (ret) + return ret; + size = count; + + if (size == 0) { + *val = 0; + return GRIB_SUCCESS; + } + values = (double*)grib_context_malloc_clear(context_, sizeof(double) * size); + if (!values) + return GRIB_OUT_OF_MEMORY; + + ret = grib_get_double_array(grib_handle_of_accessor(this), values_, values, &size); if (ret) { - grib_context_free(a->context, values); + grib_context_free(context_, values); return ret; } *val = 0; for (i = 0; i < size; i++) *val += values[i]; - grib_context_free(a->context, values); + grib_context_free(context_, values); return GRIB_SUCCESS; } -int grib_accessor_class_sum_t::value_count(grib_accessor* a, long* count) +int grib_accessor_sum_t::value_count(long* count) { - grib_accessor_sum_t* self = (grib_accessor_sum_t*)a; size_t n = 0; int ret = GRIB_SUCCESS; - ret = grib_get_size(grib_handle_of_accessor(a), self->values, &n); + ret = grib_get_size(grib_handle_of_accessor(this), values_, &n); *count = n; if (ret) - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s is unable to get size of %s", a->name, self->values); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s is unable to get size of %s", name_, values_); return ret; } diff --git a/src/accessor/grib_accessor_class_sum.h b/src/accessor/grib_accessor_class_sum.h index 5667d8da9..40b18d1d6 100644 --- a/src/accessor/grib_accessor_class_sum.h +++ b/src/accessor/grib_accessor_class_sum.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,17 +15,14 @@ class grib_accessor_sum_t : public grib_accessor_double_t { public: - /* Members defined in sum */ - const char* values; -}; - -class grib_accessor_class_sum_t : public grib_accessor_class_double_t -{ -public: - grib_accessor_class_sum_t(const char* name) : grib_accessor_class_double_t(name) {} + grib_accessor_sum_t() : + grib_accessor_double_t() { class_name_ = "sum"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_sum_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* values_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_suppressed.cc b/src/accessor/grib_accessor_class_suppressed.cc index 7cc05c5e1..f0de3960f 100644 --- a/src/accessor/grib_accessor_class_suppressed.cc +++ b/src/accessor/grib_accessor_class_suppressed.cc @@ -10,62 +10,59 @@ #include "grib_accessor_class_suppressed.h" -grib_accessor_class_suppressed_t _grib_accessor_class_suppressed{ "suppressed" }; -grib_accessor_class* grib_accessor_class_suppressed = &_grib_accessor_class_suppressed; +grib_accessor_suppressed_t _grib_accessor_suppressed{}; +grib_accessor* grib_accessor_suppressed = &_grib_accessor_suppressed; - -void grib_accessor_class_suppressed_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_suppressed_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_suppressed_t* self = (grib_accessor_suppressed_t*)a; - self->args = c; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + grib_accessor_long_t::init(l, c); + args_ = c; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -static void log_message(grib_accessor* a) +void grib_accessor_suppressed_t::log_message() { - grib_accessor_suppressed_t* self = (grib_accessor_suppressed_t*)a; - int i = 0; - grib_handle* hand = grib_handle_of_accessor(a); + int i = 0; + grib_handle* hand = grib_handle_of_accessor(this); - grib_context_log(a->context, GRIB_LOG_ERROR, - "key '%s' is unavailable in this version.", a->name); - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, + "key '%s' is unavailable in this version.", name_); + grib_context_log(context_, GRIB_LOG_ERROR, "Please use the following key(s):"); - while (grib_arguments_get_name(hand, self->args, i)) { - grib_context_log(a->context, GRIB_LOG_ERROR, "\t- %s", - grib_arguments_get_name(hand, self->args, i)); + while (grib_arguments_get_name(hand, args_, i)) { + grib_context_log(context_, GRIB_LOG_ERROR, "\t- %s", + grib_arguments_get_name(hand, args_, i)); i++; } } -int grib_accessor_class_suppressed_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_suppressed_t::unpack_string(char* val, size_t* len) { - log_message(a); + log_message(); return GRIB_NOT_FOUND; } -int grib_accessor_class_suppressed_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_suppressed_t::unpack_long(long* val, size_t* len) { - log_message(a); + log_message(); return GRIB_NOT_FOUND; } -int grib_accessor_class_suppressed_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_suppressed_t::unpack_double(double* val, size_t* len) { - log_message(a); + log_message(); return GRIB_NOT_FOUND; } -int grib_accessor_class_suppressed_t::value_count(grib_accessor* a, long* count) +int grib_accessor_suppressed_t::value_count(long* count) { *count = 1; return 0; } -int grib_accessor_class_suppressed_t::get_native_type(grib_accessor* a) +long grib_accessor_suppressed_t::get_native_type() { return GRIB_TYPE_STRING; } diff --git a/src/accessor/grib_accessor_class_suppressed.h b/src/accessor/grib_accessor_class_suppressed.h index 5d764be35..7a43331a4 100644 --- a/src/accessor/grib_accessor_class_suppressed.h +++ b/src/accessor/grib_accessor_class_suppressed.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,18 @@ class grib_accessor_suppressed_t : public grib_accessor_long_t { public: - /* Members defined in suppressed */ - grib_arguments* args; -}; - -class grib_accessor_class_suppressed_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_suppressed_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_suppressed_t() : + grib_accessor_long_t() { class_name_ = "suppressed"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_suppressed_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + grib_arguments* args_ = nullptr; + + void log_message(); }; diff --git a/src/accessor/grib_accessor_class_time.cc b/src/accessor/grib_accessor_class_time.cc index 921114465..ce647581b 100644 --- a/src/accessor/grib_accessor_class_time.cc +++ b/src/accessor/grib_accessor_class_time.cc @@ -10,41 +10,37 @@ #include "grib_accessor_class_time.h" -grib_accessor_class_time_t _grib_accessor_class_time{ "time" }; -grib_accessor_class* grib_accessor_class_time = &_grib_accessor_class_time; +grib_accessor_time_t _grib_accessor_time{}; +grib_accessor* grib_accessor_time = &_grib_accessor_time; - -void grib_accessor_class_time_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_time_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_time_t* self = (grib_accessor_time_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_long_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - self->hour = grib_arguments_get_name(hand, c, n++); - self->minute = grib_arguments_get_name(hand, c, n++); - self->second = grib_arguments_get_name(hand, c, n++); + hour_ = grib_arguments_get_name(hand, c, n++); + minute_ = grib_arguments_get_name(hand, c, n++); + second_ = grib_arguments_get_name(hand, c, n++); } -int grib_accessor_class_time_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_time_t::unpack_long(long* val, size_t* len) { - const grib_accessor_time_t* self = (grib_accessor_time_t*)a; - int ret = 0; long hour = 0, minute = 0, second = 0; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); - if ((ret = grib_get_long_internal(hand, self->hour, &hour)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, hour_, &hour)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->minute, &minute)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, minute_, &minute)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->second, &second)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, second_, &second)) != GRIB_SUCCESS) return ret; /* We ignore the 'seconds' in our time calculation! */ if (second != 0) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Key %s (%s): Truncating time: non-zero seconds(%ld) ignored", a->name, __func__, second); + grib_context_log(context_, GRIB_LOG_ERROR, + "Key %s (%s): Truncating time: non-zero seconds(%ld) ignored", name_, __func__, second); } if (*len < 1) @@ -61,13 +57,11 @@ int grib_accessor_class_time_t::unpack_long(grib_accessor* a, long* val, size_t* return GRIB_SUCCESS; } -int grib_accessor_class_time_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_time_t::pack_long(const long* val, size_t* len) { - const grib_accessor_time_t* self = (grib_accessor_time_t*)a; - - int ret = 0; - long v = val[0]; - grib_handle* hand = grib_handle_of_accessor(a); + int ret = 0; + long v = val[0]; + grib_handle* hand = grib_handle_of_accessor(this); long hour = 0, minute = 0, second = 0; if (*len != 1) @@ -76,7 +70,7 @@ int grib_accessor_class_time_t::pack_long(grib_accessor* a, const long* val, siz if (!is_time_valid(v)) { // ECC-1777: For now just a warning. Will later change to an error fprintf(stderr, "ECCODES WARNING : %s:%s: Time is not valid! hour=%ld min=%ld sec=%ld\n", - a->cclass->name, __func__, hour, minute, second); + class_name_, __func__, hour, minute, second); // return GRIB_ENCODING_ERROR; } @@ -84,27 +78,27 @@ int grib_accessor_class_time_t::pack_long(grib_accessor* a, const long* val, siz minute = v % 100; second = 0; /* We ignore the 'seconds' in our time calculation! */ - if ((ret = grib_set_long_internal(hand, self->hour, hour)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, hour_, hour)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(hand, self->minute, minute)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, minute_, minute)) != GRIB_SUCCESS) return ret; - if ((ret = grib_set_long_internal(hand, self->second, second)) != GRIB_SUCCESS) + if ((ret = grib_set_long_internal(hand, second_, second)) != GRIB_SUCCESS) return ret; return GRIB_SUCCESS; } -int grib_accessor_class_time_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_time_t::unpack_string(char* val, size_t* len) { - long v = 0; + long v = 0; size_t lsize = 1, lmin = 5; - unpack_long(a, &v, &lsize); + unpack_long(&v, &lsize); if (*len < lmin) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - a->cclass->name, a->name, lmin, *len); + class_name_, name_, lmin, *len); *len = lmin; return GRIB_BUFFER_TOO_SMALL; } diff --git a/src/accessor/grib_accessor_class_time.h b/src/accessor/grib_accessor_class_time.h index dee0325a9..52b3df90d 100644 --- a/src/accessor/grib_accessor_class_time.h +++ b/src/accessor/grib_accessor_class_time.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_time_t : public grib_accessor_long_t { public: - /* Members defined in time */ - const char* hour; - const char* minute; - const char* second; -}; - -class grib_accessor_class_time_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_time_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_time_t() : + grib_accessor_long_t() { class_name_ = "time"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_time_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* hour_ = nullptr; + const char* minute_ = nullptr; + const char* second_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_to_double.cc b/src/accessor/grib_accessor_class_to_double.cc index afe26f2a1..462af1b59 100644 --- a/src/accessor/grib_accessor_class_to_double.cc +++ b/src/accessor/grib_accessor_class_to_double.cc @@ -10,76 +10,72 @@ #include "grib_accessor_class_to_double.h" -grib_accessor_class_to_double_t _grib_accessor_class_to_double{ "to_double" }; -grib_accessor_class* grib_accessor_class_to_double = &_grib_accessor_class_to_double; +grib_accessor_to_double_t _grib_accessor_to_double{}; +grib_accessor* grib_accessor_to_double = &_grib_accessor_to_double; - -void grib_accessor_class_to_double_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_to_double_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_accessor_to_double_t* self = (grib_accessor_to_double_t*)a; + grib_accessor_gen_t::init(len, arg); + grib_handle* hand = grib_handle_of_accessor(this); - self->key = grib_arguments_get_name(grib_handle_of_accessor(a), arg, 0); - self->start = grib_arguments_get_long(grib_handle_of_accessor(a), arg, 1); - self->length = grib_arguments_get_long(grib_handle_of_accessor(a), arg, 2); - self->scale = grib_arguments_get_long(grib_handle_of_accessor(a), arg, 3); - if (!self->scale) - self->scale = 1; + key_ = grib_arguments_get_name(hand, arg, 0); + start_ = grib_arguments_get_long(hand, arg, 1); + str_length_ = grib_arguments_get_long(hand, arg, 2); + scale_ = grib_arguments_get_long(hand, arg, 3); + if (!scale_) + scale_ = 1; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length = 0; + grib_accessor::flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor::length_ = 0; } -int grib_accessor_class_to_double_t::value_count(grib_accessor* a, long* count) +int grib_accessor_to_double_t::value_count(long* count) { - grib_accessor_to_double_t* self = (grib_accessor_to_double_t*)a; size_t size = 0; - int err = grib_get_size(grib_handle_of_accessor(a), self->key, &size); + int err = grib_get_size(grib_handle_of_accessor(this), key_, &size); *count = size; return err; } -size_t grib_accessor_class_to_double_t::string_length(grib_accessor* a) +size_t grib_accessor_to_double_t::string_length() { - grib_accessor_to_double_t* self = (grib_accessor_to_double_t*)a; size_t size = 0; - if (self->length) - return self->length; + if (str_length_) + return str_length_; - grib_get_string_length_acc(a, &size); + grib_get_string_length_acc(this, &size); return size; } -void grib_accessor_class_to_double_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_to_double_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } -int grib_accessor_class_to_double_t::get_native_type(grib_accessor* a) +long grib_accessor_to_double_t::get_native_type() { return GRIB_TYPE_LONG; } -int grib_accessor_class_to_double_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_to_double_t::unpack_string(char* val, size_t* len) { - grib_accessor_to_double_t* self = (grib_accessor_to_double_t*)a; - - int err = 0; + int err = 0; char buff[512] = {0,}; - size_t size = 512; - size_t length = string_length(a); + size_t size = sizeof(buff); + size_t length = string_length(); if (*len < length + 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%lu) for %s, it contains %ld values", - *len, a->name, a->length + 1); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", + class_name_, name_, length + 1, *len); *len = length + 1; - return GRIB_ARRAY_TOO_SMALL; + return GRIB_BUFFER_TOO_SMALL; } - err = grib_get_string(grib_handle_of_accessor(a), self->key, buff, &size); + err = grib_get_string(grib_handle_of_accessor(this), key_, buff, &size); if (err) return err; if (length > size) { @@ -87,20 +83,19 @@ int grib_accessor_class_to_double_t::unpack_string(grib_accessor* a, char* val, length = size; } - memcpy(val, buff + self->start, length); + memcpy(val, buff + start_, length); val[length] = 0; - *len = length; + *len = length; return err; } -int grib_accessor_class_to_double_t::unpack_long(grib_accessor* a, long* v, size_t* len) +int grib_accessor_to_double_t::unpack_long(long* v, size_t* len) { - grib_accessor_to_double_t* self = (grib_accessor_to_double_t*)a; char val[1024] = {0,}; size_t l = sizeof(val); char* last = NULL; - int err = a->unpack_string(val, &l); + int err = unpack_string(val, &l); if (err) return err; @@ -108,18 +103,17 @@ int grib_accessor_class_to_double_t::unpack_long(grib_accessor* a, long* v, size if (*last) { err = GRIB_WRONG_CONVERSION; } - *v /= self->scale; + *v /= scale_; return err; } -int grib_accessor_class_to_double_t::unpack_double(grib_accessor* a, double* v, size_t* len) +int grib_accessor_to_double_t::unpack_double(double* v, size_t* len) { - grib_accessor_to_double_t* self = (grib_accessor_to_double_t*)a; char val[1024] = {0,}; size_t l = sizeof(val); char* last = NULL; - int err = a->unpack_string(val, &l); + int err = unpack_string(val, &l); if (err) return err; @@ -127,12 +121,12 @@ int grib_accessor_class_to_double_t::unpack_double(grib_accessor* a, double* v, if (*last) { err = GRIB_WRONG_CONVERSION; } - *v /= self->scale; + *v /= scale_; return err; } -long grib_accessor_class_to_double_t::next_offset(grib_accessor* a) +long grib_accessor_to_double_t::next_offset() { - return a->offset + a->length; + return offset_ + grib_accessor::length_; } diff --git a/src/accessor/grib_accessor_class_to_double.h b/src/accessor/grib_accessor_class_to_double.h index c8755c90f..d3bcf3c17 100644 --- a/src/accessor/grib_accessor_class_to_double.h +++ b/src/accessor/grib_accessor_class_to_double.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,25 +15,24 @@ class grib_accessor_to_double_t : public grib_accessor_gen_t { public: - /* Members defined in to_double */ - const char* key; - long start; - size_t length; - long scale; -}; - -class grib_accessor_class_to_double_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_to_double_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_to_double_t() : + grib_accessor_gen_t() { class_name_ = "to_double"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_to_double_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + long next_offset() override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +protected: + const char* key_ = nullptr; + long start_ = 0; + size_t str_length_ = 0; + +private: + long scale_ = 0; }; diff --git a/src/accessor/grib_accessor_class_to_integer.cc b/src/accessor/grib_accessor_class_to_integer.cc index 827812db8..33b7489ed 100644 --- a/src/accessor/grib_accessor_class_to_integer.cc +++ b/src/accessor/grib_accessor_class_to_integer.cc @@ -10,76 +10,69 @@ #include "grib_accessor_class_to_integer.h" -grib_accessor_class_to_integer_t _grib_accessor_class_to_integer{ "to_integer" }; -grib_accessor_class* grib_accessor_class_to_integer = &_grib_accessor_class_to_integer; +grib_accessor_to_integer_t _grib_accessor_to_integer{}; +grib_accessor* grib_accessor_to_integer = &_grib_accessor_to_integer; - -void grib_accessor_class_to_integer_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_to_integer_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_accessor_to_integer_t* self = (grib_accessor_to_integer_t*)a; + grib_accessor_gen_t::init(len, arg); + grib_handle* hand = grib_handle_of_accessor(this); - self->key = grib_arguments_get_name(grib_handle_of_accessor(a), arg, 0); - self->start = grib_arguments_get_long(grib_handle_of_accessor(a), arg, 1); - self->length = grib_arguments_get_long(grib_handle_of_accessor(a), arg, 2); + key_ = grib_arguments_get_name(hand, arg, 0); + start_ = grib_arguments_get_long(hand, arg, 1); + str_length_ = grib_arguments_get_long(hand, arg, 2); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor::length_ = 0; } -int grib_accessor_class_to_integer_t::value_count(grib_accessor* a, long* count) +int grib_accessor_to_integer_t::value_count(long* count) { - grib_accessor_to_integer_t* self = (grib_accessor_to_integer_t*)a; size_t size = 0; - int err = grib_get_size(grib_handle_of_accessor(a), self->key, &size); + int err = grib_get_size(grib_handle_of_accessor(this), key_, &size); *count = size; return err; } -size_t grib_accessor_class_to_integer_t::string_length(grib_accessor* a) +size_t grib_accessor_to_integer_t::string_length() { - grib_accessor_to_integer_t* self = (grib_accessor_to_integer_t*)a; size_t size = 0; - if (self->length) - return self->length; + if (str_length_) + return str_length_; - grib_get_string_length(grib_handle_of_accessor(a), self->key, &size); + grib_get_string_length(grib_handle_of_accessor(this), key_, &size); return size; } -void grib_accessor_class_to_integer_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_to_integer_t::dump(grib_dumper* dumper) { - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); } -int grib_accessor_class_to_integer_t::get_native_type(grib_accessor* a) +long grib_accessor_to_integer_t::get_native_type() { return GRIB_TYPE_LONG; } -int grib_accessor_class_to_integer_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_to_integer_t::unpack_string(char* val, size_t* len) { - grib_accessor_to_integer_t* self = (grib_accessor_to_integer_t*)a; - - int err = 0; + int err = 0; char buff[512] = {0,}; - size_t size = 512; - - size_t length = string_length(a); + size_t size = sizeof(buff); + size_t length = string_length(); if (*len < length + 1) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, length + 1, *len); + class_name_, name_, length + 1, *len); *len = length + 1; return GRIB_BUFFER_TOO_SMALL; } - err = grib_get_string(grib_handle_of_accessor(a), self->key, buff, &size); + err = grib_get_string(grib_handle_of_accessor(this), key_, buff, &size); if (err) return err; if (length > size) { @@ -87,36 +80,36 @@ int grib_accessor_class_to_integer_t::unpack_string(grib_accessor* a, char* val, length = size; } - memcpy(val, buff + self->start, length); + memcpy(val, buff + start_, length); val[length] = 0; - *len = length; + *len = length; return GRIB_SUCCESS; } -int grib_accessor_class_to_integer_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_to_integer_t::pack_string(const char* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_to_integer_t::pack_long(grib_accessor* a, const long* v, size_t* len) +int grib_accessor_to_integer_t::pack_long(const long* v, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack %s as an integer", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Should not pack %s as an integer", name_); return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_to_integer_t::pack_double(grib_accessor* a, const double* v, size_t* len) +int grib_accessor_to_integer_t::pack_double(const double* v, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack %s as a double", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Should not pack %s as a double", name_); return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_to_integer_t::unpack_long(grib_accessor* a, long* v, size_t* len) +int grib_accessor_to_integer_t::unpack_long(long* v, size_t* len) { char val[1024] = {0,}; size_t l = sizeof(val); char* last = NULL; - int err = unpack_string(a, val, &l); + int err = unpack_string(val, &l); if (err) return err; @@ -127,17 +120,17 @@ int grib_accessor_class_to_integer_t::unpack_long(grib_accessor* a, long* v, siz return GRIB_SUCCESS; } -int grib_accessor_class_to_integer_t::unpack_double(grib_accessor* a, double* v, size_t* len) +int grib_accessor_to_integer_t::unpack_double(double* v, size_t* len) { size_t l = 1; long val = 0; - int err = unpack_long(a, &val, &l); + int err = unpack_long(&val, &l); *v = (double)val; return err; } -long grib_accessor_class_to_integer_t::next_offset(grib_accessor* a) +long grib_accessor_to_integer_t::next_offset() { - return a->offset + a->length; + return offset_ + grib_accessor::length_; } diff --git a/src/accessor/grib_accessor_class_to_integer.h b/src/accessor/grib_accessor_class_to_integer.h index da8334e4f..147cf4d08 100644 --- a/src/accessor/grib_accessor_class_to_integer.h +++ b/src/accessor/grib_accessor_class_to_integer.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,27 +15,24 @@ class grib_accessor_to_integer_t : public grib_accessor_gen_t { public: - /* Members defined in to_integer */ - const char* key; - long start; - size_t length; -}; - -class grib_accessor_class_to_integer_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_to_integer_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_to_integer_t() : + grib_accessor_gen_t() { class_name_ = "to_integer"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_to_integer_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + long next_offset() override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* key_ = nullptr; + long start_ = 0; + size_t str_length_ = 0; }; diff --git a/src/accessor/grib_accessor_class_to_string.cc b/src/accessor/grib_accessor_class_to_string.cc index c6b093a5f..2ac2d2a76 100644 --- a/src/accessor/grib_accessor_class_to_string.cc +++ b/src/accessor/grib_accessor_class_to_string.cc @@ -10,76 +10,68 @@ #include "grib_accessor_class_to_string.h" -grib_accessor_class_to_string_t _grib_accessor_class_to_string{ "to_string" }; -grib_accessor_class* grib_accessor_class_to_string = &_grib_accessor_class_to_string; +grib_accessor_to_string_t _grib_accessor_to_string{}; +grib_accessor* grib_accessor_to_string = &_grib_accessor_to_string; - -void grib_accessor_class_to_string_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_to_string_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - grib_accessor_to_string_t* self = (grib_accessor_to_string_t*)a; + grib_accessor_gen_t::init(len, arg); + grib_handle* hand = grib_handle_of_accessor(this); - self->key = grib_arguments_get_name(grib_handle_of_accessor(a), arg, 0); - self->start = grib_arguments_get_long(grib_handle_of_accessor(a), arg, 1); - self->length = grib_arguments_get_long(grib_handle_of_accessor(a), arg, 2); + key_ = grib_arguments_get_name(hand, arg, 0); + start_ = grib_arguments_get_long(hand, arg, 1); + str_length_ = grib_arguments_get_long(hand, arg, 2); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length = 0; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_gen_t::length_ = 0; } -int grib_accessor_class_to_string_t::value_count(grib_accessor* a, long* count) +int grib_accessor_to_string_t::value_count(long* count) { - grib_accessor_to_string_t* self = (grib_accessor_to_string_t*)a; size_t size = 0; - int err = grib_get_size(grib_handle_of_accessor(a), self->key, &size); + int err = grib_get_size(grib_handle_of_accessor(this), key_, &size); *count = size; return err; } -size_t grib_accessor_class_to_string_t::string_length(grib_accessor* a) +size_t grib_accessor_to_string_t::string_length() { - grib_accessor_to_string_t* self = (grib_accessor_to_string_t*)a; - - if (self->length) - return self->length; + if (str_length_) + return str_length_; size_t size = 0; - grib_get_string_length(grib_handle_of_accessor(a), self->key, &size); + grib_get_string_length(grib_handle_of_accessor(this), key_, &size); return size; } -void grib_accessor_class_to_string_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_to_string_t::dump(grib_dumper* dumper) { - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); } -int grib_accessor_class_to_string_t::get_native_type(grib_accessor* a) +long grib_accessor_to_string_t::get_native_type() { return GRIB_TYPE_STRING; } -int grib_accessor_class_to_string_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_to_string_t::unpack_string(char* val, size_t* len) { - grib_accessor_to_string_t* self = (grib_accessor_to_string_t*)a; - - int err = 0; + int err = 0; char buff[512] = {0,}; - - size_t length = string_length(a); + size_t length = string_length(); if (*len < length + 1) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, length + 1, *len); + class_name_, name_, length + 1, *len); *len = length + 1; return GRIB_BUFFER_TOO_SMALL; } size_t size = sizeof(buff); - err = grib_get_string(grib_handle_of_accessor(a), self->key, buff, &size); + err = grib_get_string(grib_handle_of_accessor(this), key_, buff, &size); if (err) return err; if (length > size) { @@ -87,19 +79,19 @@ int grib_accessor_class_to_string_t::unpack_string(grib_accessor* a, char* val, length = size; } - memcpy(val, buff + self->start, length); + memcpy(val, buff + start_, length); val[length] = 0; - *len = length; + *len = length; return GRIB_SUCCESS; } -int grib_accessor_class_to_string_t::unpack_long(grib_accessor* a, long* v, size_t* len) +int grib_accessor_to_string_t::unpack_long(long* v, size_t* len) { char val[1024] = {0,}; size_t l = sizeof(val); char* last = NULL; - int err = unpack_string(a, val, &l); + int err = unpack_string(val, &l); if (err) return err; @@ -112,17 +104,17 @@ int grib_accessor_class_to_string_t::unpack_long(grib_accessor* a, long* v, size return err; } -int grib_accessor_class_to_string_t::unpack_double(grib_accessor* a, double* v, size_t* len) +int grib_accessor_to_string_t::unpack_double(double* v, size_t* len) { size_t l = 1; long val = 0; - int err = unpack_long(a, &val, &l); + int err = unpack_long(&val, &l); *v = (double)val; return err; } -long grib_accessor_class_to_string_t::next_offset(grib_accessor* a) +long grib_accessor_to_string_t::next_offset() { - return a->offset + a->length; + return offset_ + grib_accessor_gen_t::length_; } diff --git a/src/accessor/grib_accessor_class_to_string.h b/src/accessor/grib_accessor_class_to_string.h index ea6981276..4f2af227e 100644 --- a/src/accessor/grib_accessor_class_to_string.h +++ b/src/accessor/grib_accessor_class_to_string.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,24 +15,21 @@ class grib_accessor_to_string_t : public grib_accessor_gen_t { public: - /* Members defined in to_string */ - const char* key; - long start; - size_t length; -}; - -class grib_accessor_class_to_string_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_to_string_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_to_string_t() : + grib_accessor_gen_t() { class_name_ = "to_string"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_to_string_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + long next_offset() override; + int value_count(long*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + const char* key_ = nullptr; + long start_ = 0; + size_t str_length_ = 0; }; diff --git a/src/accessor/grib_accessor_class_transient.cc b/src/accessor/grib_accessor_class_transient.cc index d40fdc9cc..0a7aca1ed 100644 --- a/src/accessor/grib_accessor_class_transient.cc +++ b/src/accessor/grib_accessor_class_transient.cc @@ -10,11 +10,10 @@ #include "grib_accessor_class_transient.h" -grib_accessor_class_transient_t _grib_accessor_class_transient{ "transient" }; -grib_accessor_class* grib_accessor_class_transient = &_grib_accessor_class_transient; +grib_accessor_transient_t _grib_accessor_transient{}; +grib_accessor* grib_accessor_transient = &_grib_accessor_transient; - -void grib_accessor_class_transient_t::init(grib_accessor* a, const long l, grib_arguments* args) +void grib_accessor_transient_t::init(const long l, grib_arguments* args) { - grib_accessor_class_variable_t::init(a, l, args); + grib_accessor_variable_t::init(l, args); } diff --git a/src/accessor/grib_accessor_class_transient.h b/src/accessor/grib_accessor_class_transient.h index e330ad686..8e04802ae 100644 --- a/src/accessor/grib_accessor_class_transient.h +++ b/src/accessor/grib_accessor_class_transient.h @@ -12,14 +12,11 @@ #include "grib_accessor_class_variable.h" -class grib_accessor_transient_t : public grib_accessor_variable_t { +class grib_accessor_transient_t : public grib_accessor_variable_t +{ public: -}; - -class grib_accessor_class_transient_t : public grib_accessor_class_variable_t { -public: - void init(grib_accessor* a, const long l, grib_arguments* args) override; - grib_accessor_class_transient_t(const char* name) : grib_accessor_class_variable_t(name) {}; + void init(const long l, grib_arguments* args) override; + grib_accessor_transient_t() : + grib_accessor_variable_t() { class_name_ = "transient"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_transient_t{}; } }; - diff --git a/src/accessor/grib_accessor_class_transient_darray.cc b/src/accessor/grib_accessor_class_transient_darray.cc index 3766bb218..50cb5b402 100644 --- a/src/accessor/grib_accessor_class_transient_darray.cc +++ b/src/accessor/grib_accessor_class_transient_darray.cc @@ -10,111 +10,100 @@ #include "grib_accessor_class_transient_darray.h" -grib_accessor_class_transient_darray_t _grib_accessor_class_transient_darray{ "transient_darray" }; -grib_accessor_class* grib_accessor_class_transient_darray = &_grib_accessor_class_transient_darray; +grib_accessor_transient_darray_t _grib_accessor_transient_darray{}; +grib_accessor* grib_accessor_transient_darray = &_grib_accessor_transient_darray; - -void grib_accessor_class_transient_darray_t::init(grib_accessor* a, const long length, grib_arguments* args) +void grib_accessor_transient_darray_t::init(const long length, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, length, args); - grib_accessor_transient_darray_t* self = (grib_accessor_transient_darray_t*)a; - self->arr = NULL; - self->type = GRIB_TYPE_DOUBLE; - a->length = 0; + grib_accessor_gen_t::init(length, args); + arr_ = NULL; + type_ = GRIB_TYPE_DOUBLE; + length_ = 0; } -void grib_accessor_class_transient_darray_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_transient_darray_t::dump(grib_dumper* dumper) { - grib_dump_double(dumper, a, NULL); + grib_dump_double(dumper, this, NULL); } -int grib_accessor_class_transient_darray_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_transient_darray_t::pack_double(const double* val, size_t* len) { - grib_accessor_transient_darray_t* self = (grib_accessor_transient_darray_t*)a; - - if (self->arr) - grib_darray_delete(a->context, self->arr); - self->arr = grib_darray_new(a->context, *len, 10); + if (arr_) + grib_darray_delete(arr_); + arr_ = grib_darray_new(*len, 10); for (size_t i = 0; i < *len; i++) - grib_darray_push(a->context, self->arr, val[i]); + grib_darray_push(arr_, val[i]); return GRIB_SUCCESS; } -int grib_accessor_class_transient_darray_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_transient_darray_t::pack_long(const long* val, size_t* len) { - grib_accessor_transient_darray_t* self = (grib_accessor_transient_darray_t*)a; - - if (self->arr) - grib_darray_delete(a->context, self->arr); - self->arr = grib_darray_new(a->context, *len, 10); + if (arr_) + grib_darray_delete(arr_); + arr_ = grib_darray_new(*len, 10); for (size_t i = 0; i < *len; i++) - grib_darray_push(a->context, self->arr, (double)val[i]); + grib_darray_push(arr_, (double)val[i]); return GRIB_SUCCESS; } -int grib_accessor_class_transient_darray_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_transient_darray_t::unpack_double(double* val, size_t* len) { - grib_accessor_transient_darray_t* self = (grib_accessor_transient_darray_t*)a; long count = 0; - value_count(a, &count); + value_count(&count); if (*len < count) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s (setting %ld, required %ld) ", a->name, *len, count); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s (setting %ld, required %ld) ", name_, *len, count); return GRIB_ARRAY_TOO_SMALL; } *len = count; for (size_t i = 0; i < *len; i++) - val[i] = self->arr->v[i]; + val[i] = arr_->v[i]; return GRIB_SUCCESS; } -int grib_accessor_class_transient_darray_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_transient_darray_t::unpack_long(long* val, size_t* len) { - grib_accessor_transient_darray_t* self = (grib_accessor_transient_darray_t*)a; long count = 0; - value_count(a, &count); + value_count(&count); if (*len < count) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s (setting %ld, required %ld) ", a->name, *len, count); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s (setting %ld, required %ld) ", name_, *len, count); return GRIB_ARRAY_TOO_SMALL; } *len = count; for (size_t i = 0; i < *len; i++) - val[i] = (long)self->arr->v[i]; + val[i] = (long)arr_->v[i]; return GRIB_SUCCESS; } -void grib_accessor_class_transient_darray_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_transient_darray_t::destroy(grib_context* c) { - grib_accessor_transient_darray_t* self = (grib_accessor_transient_darray_t*)a; - if (self->arr) - grib_darray_delete(a->context, self->arr); - grib_accessor_class_gen_t::destroy(c, a); + if (arr_) + grib_darray_delete(arr_); + grib_accessor_gen_t::destroy(c); } -int grib_accessor_class_transient_darray_t::value_count(grib_accessor* a, long* count) +int grib_accessor_transient_darray_t::value_count(long* count) { - grib_accessor_transient_darray_t* self = (grib_accessor_transient_darray_t*)a; - if (self->arr) - *count = grib_darray_used_size(self->arr); + if (arr_) + *count = grib_darray_used_size(arr_); else *count = 0; return 0; } -int grib_accessor_class_transient_darray_t::get_native_type(grib_accessor* a) +long grib_accessor_transient_darray_t::get_native_type() { - const grib_accessor_transient_darray_t* self = (grib_accessor_transient_darray_t*)a; - return self->type; + return type_; } diff --git a/src/accessor/grib_accessor_class_transient_darray.h b/src/accessor/grib_accessor_class_transient_darray.h index 230dfa1a1..12abf029f 100644 --- a/src/accessor/grib_accessor_class_transient_darray.h +++ b/src/accessor/grib_accessor_class_transient_darray.h @@ -16,23 +16,20 @@ class grib_accessor_transient_darray_t : public grib_accessor_gen_t { public: - /* Members defined in transient_darray */ - grib_darray* arr; - int type; -}; - -class grib_accessor_class_transient_darray_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_transient_darray_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_transient_darray_t() : + grib_accessor_gen_t() { class_name_ = "transient_darray"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_transient_darray_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + grib_darray* arr_ = nullptr; + int type_ = 0; }; diff --git a/src/accessor/grib_accessor_class_trim.cc b/src/accessor/grib_accessor_class_trim.cc index 4d4fb733d..e8364eef0 100644 --- a/src/accessor/grib_accessor_class_trim.cc +++ b/src/accessor/grib_accessor_class_trim.cc @@ -10,45 +10,41 @@ #include "grib_accessor_class_trim.h" -grib_accessor_class_trim_t _grib_accessor_class_trim{ "trim" }; -grib_accessor_class* grib_accessor_class_trim = &_grib_accessor_class_trim; +grib_accessor_trim_t _grib_accessor_trim{}; +grib_accessor* grib_accessor_trim = &_grib_accessor_trim; - -void grib_accessor_class_trim_t::init(grib_accessor* a, const long l, grib_arguments* arg) +void grib_accessor_trim_t::init(const long l, grib_arguments* arg) { - grib_accessor_class_ascii_t::init(a, l, arg); - int n = 0; - grib_accessor_trim_t* self = (grib_accessor_trim_t*)a; - grib_handle* h = grib_handle_of_accessor(a); + grib_accessor_ascii_t::init(l, arg); + int n = 0; + grib_handle* h = grib_handle_of_accessor(this); - self->input = grib_arguments_get_name(h, arg, n++); - self->trim_left = grib_arguments_get_long(h, arg, n++); - self->trim_right = grib_arguments_get_long(h, arg, n++); - DEBUG_ASSERT(self->trim_left == 0 || self->trim_left == 1); - DEBUG_ASSERT(self->trim_right == 0 || self->trim_right == 1); + input_ = grib_arguments_get_name(h, arg, n++); + trim_left_ = grib_arguments_get_long(h, arg, n++); + trim_right_ = grib_arguments_get_long(h, arg, n++); + DEBUG_ASSERT(trim_left_ == 0 || trim_left_ == 1); + DEBUG_ASSERT(trim_right_ == 0 || trim_right_ == 1); } -int grib_accessor_class_trim_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_trim_t::unpack_string(char* val, size_t* len) { - grib_accessor_trim_t* self = (grib_accessor_trim_t*)a; - int err = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(this); char input[256] = {0,}; size_t size = sizeof(input) / sizeof(*input); char* pInput = input; - err = grib_get_string(h, self->input, input, &size); + err = grib_get_string(h, input_, input, &size); if (err) return err; - string_lrtrim(&pInput, self->trim_left, self->trim_right); + string_lrtrim(&pInput, trim_left_, trim_right_); snprintf(val, 1024, "%s", pInput); size = strlen(val); *len = size + 1; return GRIB_SUCCESS; } -int grib_accessor_class_trim_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_trim_t::pack_string(const char* val, size_t* len) { char input[256] = {0,}; @@ -56,25 +52,24 @@ int grib_accessor_class_trim_t::pack_string(grib_accessor* a, const char* val, s char buf[256] = {0,}; char* pBuf = NULL; int err; - grib_handle* h = grib_handle_of_accessor(a); - grib_accessor_trim_t* self = (grib_accessor_trim_t*)a; - grib_accessor* inputAccesstor = grib_find_accessor(h, self->input); + grib_handle* h = grib_handle_of_accessor(this); + grib_accessor* inputAccesstor = grib_find_accessor(h, input_); if (!inputAccesstor) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor for %s not found", self->input); + grib_context_log(context_, GRIB_LOG_ERROR, "Accessor for %s not found", input_); return GRIB_NOT_FOUND; } - if ((err = grib_get_string(h, self->input, input, &inputLen)) != GRIB_SUCCESS) + if ((err = grib_get_string(h, input_, input, &inputLen)) != GRIB_SUCCESS) return err; snprintf(buf, sizeof(buf), "%s", val); pBuf = buf; - string_lrtrim(&pBuf, self->trim_left, self->trim_right); + string_lrtrim(&pBuf, trim_left_, trim_right_); return inputAccesstor->pack_string(pBuf, len); } -size_t grib_accessor_class_trim_t::string_length(grib_accessor* a) +size_t grib_accessor_trim_t::string_length() { return 1024; } diff --git a/src/accessor/grib_accessor_class_trim.h b/src/accessor/grib_accessor_class_trim.h index d5c029a78..39bc5e97b 100644 --- a/src/accessor/grib_accessor_class_trim.h +++ b/src/accessor/grib_accessor_class_trim.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,19 +15,16 @@ class grib_accessor_trim_t : public grib_accessor_ascii_t { public: - /* Members defined in trim */ - const char* input; - int trim_left; - int trim_right; -}; - -class grib_accessor_class_trim_t : public grib_accessor_class_ascii_t -{ -public: - grib_accessor_class_trim_t(const char* name) : grib_accessor_class_ascii_t(name) {} + grib_accessor_trim_t() : + grib_accessor_ascii_t() { class_name_ = "trim"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_trim_t{}; } - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int pack_string(const char*, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + void init(const long, grib_arguments*) override; + +private: + const char* input_ = nullptr; + int trim_left_ = 0; + int trim_right_ = 0; }; diff --git a/src/accessor/grib_accessor_class_uint16.cc b/src/accessor/grib_accessor_class_uint16.cc index b17aa37cf..a045bdb15 100644 --- a/src/accessor/grib_accessor_class_uint16.cc +++ b/src/accessor/grib_accessor_class_uint16.cc @@ -10,15 +10,14 @@ #include "grib_accessor_class_uint16.h" -grib_accessor_class_uint16_t _grib_accessor_class_uint16{ "uint16" }; -grib_accessor_class* grib_accessor_class_uint16 = &_grib_accessor_class_uint16; +grib_accessor_uint16_t _grib_accessor_uint16{}; +grib_accessor* grib_accessor_uint16 = &_grib_accessor_uint16; - -int grib_accessor_class_uint16_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_uint16_t::unpack_long(long* val, size_t* len) { long value = 0; - /*long pos = a->offset;*/ - /*unsigned char* data = grib_handle_of_accessor(a)->buffer->data;*/ + /*long pos = offset_ ;*/ + /*unsigned char* data = grib_handle_of_accessor(this)->buffer->data;*/ if (*len < 1) { return GRIB_ARRAY_TOO_SMALL; @@ -29,7 +28,7 @@ int grib_accessor_class_uint16_t::unpack_long(grib_accessor* a, long* val, size_ return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_uint16_t::get_native_type(grib_accessor* a) +long grib_accessor_uint16_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_uint16.h b/src/accessor/grib_accessor_class_uint16.h index 05818ebbd..1829fb319 100644 --- a/src/accessor/grib_accessor_class_uint16.h +++ b/src/accessor/grib_accessor_class_uint16.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,14 +15,9 @@ class grib_accessor_uint16_t : public grib_accessor_gen_t { public: - /* Members defined in uint16 */ -}; - -class grib_accessor_class_uint16_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_uint16_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_uint16_t() : + grib_accessor_gen_t() { class_name_ = "uint16"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_uint16_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; + long get_native_type() override; + int unpack_long(long* val, size_t* len) override; }; diff --git a/src/accessor/grib_accessor_class_uint32.cc b/src/accessor/grib_accessor_class_uint32.cc index 015646cbb..eb77df508 100644 --- a/src/accessor/grib_accessor_class_uint32.cc +++ b/src/accessor/grib_accessor_class_uint32.cc @@ -10,15 +10,14 @@ #include "grib_accessor_class_uint32.h" -grib_accessor_class_uint32_t _grib_accessor_class_uint32{ "uint32" }; -grib_accessor_class* grib_accessor_class_uint32 = &_grib_accessor_class_uint32; +grib_accessor_uint32_t _grib_accessor_uint32{}; +grib_accessor* grib_accessor_uint32 = &_grib_accessor_uint32; - -int grib_accessor_class_uint32_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_uint32_t::unpack_long(long* val, size_t* len) { long value = 0; - /* long pos = a->offset; */ - /* unsigned char* data = grib_handle_of_accessor(a)->buffer->data; */ + /* long pos = offset_ ; */ + /* unsigned char* data = grib_handle_of_accessor(this)->buffer->data; */ if (*len < 1) { return GRIB_ARRAY_TOO_SMALL; @@ -29,7 +28,7 @@ int grib_accessor_class_uint32_t::unpack_long(grib_accessor* a, long* val, size_ return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_uint32_t::get_native_type(grib_accessor* a) +long grib_accessor_uint32_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_uint32.h b/src/accessor/grib_accessor_class_uint32.h index 143dfc809..5e3f65025 100644 --- a/src/accessor/grib_accessor_class_uint32.h +++ b/src/accessor/grib_accessor_class_uint32.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,14 +15,9 @@ class grib_accessor_uint32_t : public grib_accessor_gen_t { public: - /* Members defined in uint32 */ -}; - -class grib_accessor_class_uint32_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_uint32_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_uint32_t() : + grib_accessor_gen_t() { class_name_ = "uint32"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_uint32_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; + long get_native_type() override; + int unpack_long(long* val, size_t* len) override; }; diff --git a/src/accessor/grib_accessor_class_uint32_little_endian.cc b/src/accessor/grib_accessor_class_uint32_little_endian.cc index fa8aeb03a..a85e7167c 100644 --- a/src/accessor/grib_accessor_class_uint32_little_endian.cc +++ b/src/accessor/grib_accessor_class_uint32_little_endian.cc @@ -10,15 +10,14 @@ #include "grib_accessor_class_uint32_little_endian.h" -grib_accessor_class_uint32_little_endian_t _grib_accessor_class_uint32_little_endian{ "uint32_little_endian" }; -grib_accessor_class* grib_accessor_class_uint32_little_endian = &_grib_accessor_class_uint32_little_endian; +grib_accessor_uint32_little_endian_t _grib_accessor_uint32_little_endian{}; +grib_accessor* grib_accessor_uint32_little_endian = &_grib_accessor_uint32_little_endian; - -int grib_accessor_class_uint32_little_endian_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_uint32_little_endian_t::unpack_long(long* val, size_t* len) { long value = 0; - /* long pos = a->offset; */ - /* unsigned char* data = grib_handle_of_accessor(a)->buffer->data; */ + /* long pos = offset_ ; */ + /* unsigned char* data = grib_handle_of_accessor(this)->buffer->data; */ if (*len < 1) { return GRIB_ARRAY_TOO_SMALL; @@ -29,7 +28,7 @@ int grib_accessor_class_uint32_little_endian_t::unpack_long(grib_accessor* a, lo return GRIB_NOT_IMPLEMENTED; } -int grib_accessor_class_uint32_little_endian_t::get_native_type(grib_accessor* a) +long grib_accessor_uint32_little_endian_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_uint32_little_endian.h b/src/accessor/grib_accessor_class_uint32_little_endian.h index 83e808bc5..251dfbd97 100644 --- a/src/accessor/grib_accessor_class_uint32_little_endian.h +++ b/src/accessor/grib_accessor_class_uint32_little_endian.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,14 +15,9 @@ class grib_accessor_uint32_little_endian_t : public grib_accessor_gen_t { public: - /* Members defined in uint32_little_endian */ -}; - -class grib_accessor_class_uint32_little_endian_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_uint32_little_endian_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_uint32_little_endian_t() : + grib_accessor_gen_t() { class_name_ = "uint32_little_endian"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_uint32_little_endian_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; + long get_native_type() override; + int unpack_long(long* val, size_t* len) override; }; diff --git a/src/accessor/grib_accessor_class_uint64.cc b/src/accessor/grib_accessor_class_uint64.cc index a800a4630..c3382ccb1 100644 --- a/src/accessor/grib_accessor_class_uint64.cc +++ b/src/accessor/grib_accessor_class_uint64.cc @@ -10,15 +10,14 @@ #include "grib_accessor_class_uint64.h" -grib_accessor_class_uint64_t _grib_accessor_class_uint64{ "uint64" }; -grib_accessor_class* grib_accessor_class_uint64 = &_grib_accessor_class_uint64; +grib_accessor_uint64_t _grib_accessor_uint64{}; +grib_accessor* grib_accessor_uint64 = &_grib_accessor_uint64; - -int grib_accessor_class_uint64_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_uint64_t::unpack_long(long* val, size_t* len) { long value = 0; - long pos = a->offset; - unsigned char* data = grib_handle_of_accessor(a)->buffer->data; + long pos = offset_; + const unsigned char* data = grib_handle_of_accessor(this)->buffer->data; unsigned long long result = 0, tmp; int i; @@ -36,7 +35,7 @@ int grib_accessor_class_uint64_t::unpack_long(grib_accessor* a, long* val, size_ /* Result does not fit in long */ if (tmp != result) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Value for %s cannot be decoded as a 'long' (%llu)", a->name, result); + grib_context_log(context_, GRIB_LOG_ERROR, "Value for %s cannot be decoded as a 'long' (%llu)", name_, result); return GRIB_DECODING_ERROR; } @@ -45,7 +44,7 @@ int grib_accessor_class_uint64_t::unpack_long(grib_accessor* a, long* val, size_ return GRIB_SUCCESS; } -int grib_accessor_class_uint64_t::get_native_type(grib_accessor* a) +long grib_accessor_uint64_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_uint64.h b/src/accessor/grib_accessor_class_uint64.h index d442b736d..78e961911 100644 --- a/src/accessor/grib_accessor_class_uint64.h +++ b/src/accessor/grib_accessor_class_uint64.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,14 +15,9 @@ class grib_accessor_uint64_t : public grib_accessor_gen_t { public: - /* Members defined in uint64 */ -}; - -class grib_accessor_class_uint64_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_uint64_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_uint64_t() : + grib_accessor_gen_t() { class_name_ = "uint64"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_uint64_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; + long get_native_type() override; + int unpack_long(long* val, size_t* len) override; }; diff --git a/src/accessor/grib_accessor_class_uint64_little_endian.cc b/src/accessor/grib_accessor_class_uint64_little_endian.cc index 25e537dbe..cbec116b9 100644 --- a/src/accessor/grib_accessor_class_uint64_little_endian.cc +++ b/src/accessor/grib_accessor_class_uint64_little_endian.cc @@ -10,23 +10,21 @@ #include "grib_accessor_class_uint64_little_endian.h" -grib_accessor_class_uint64_little_endian_t _grib_accessor_class_uint64_little_endian{ "uint64_little_endian" }; -grib_accessor_class* grib_accessor_class_uint64_little_endian = &_grib_accessor_class_uint64_little_endian; +grib_accessor_uint64_little_endian_t _grib_accessor_uint64_little_endian{}; +grib_accessor* grib_accessor_uint64_little_endian = &_grib_accessor_uint64_little_endian; - -int grib_accessor_class_uint64_little_endian_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_uint64_little_endian_t::unpack_long(long* val, size_t* len) { long value = 0; - long pos = a->offset; - unsigned char* data = grib_handle_of_accessor(a)->buffer->data; + long pos = offset_; + const unsigned char* data = grib_handle_of_accessor(this)->buffer->data; unsigned long long result = 0, tmp; - int i; if (*len < 1) { return GRIB_ARRAY_TOO_SMALL; } - for (i = 7; i >= 0; i--) { + for (int i = 7; i >= 0; i--) { result <<= 8; result |= data[pos + i]; } @@ -36,7 +34,7 @@ int grib_accessor_class_uint64_little_endian_t::unpack_long(grib_accessor* a, lo /* Result does not fit in long */ if (tmp != result) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Value for %s cannot be decoded as a 'long' (%llu)", a->name, result); + grib_context_log(context_, GRIB_LOG_ERROR, "Value for %s cannot be decoded as a 'long' (%llu)", name_, result); return GRIB_DECODING_ERROR; } @@ -45,7 +43,7 @@ int grib_accessor_class_uint64_little_endian_t::unpack_long(grib_accessor* a, lo return GRIB_SUCCESS; } -int grib_accessor_class_uint64_little_endian_t::get_native_type(grib_accessor* a) +long grib_accessor_uint64_little_endian_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_uint64_little_endian.h b/src/accessor/grib_accessor_class_uint64_little_endian.h index 9e8f4327e..32e2a15de 100644 --- a/src/accessor/grib_accessor_class_uint64_little_endian.h +++ b/src/accessor/grib_accessor_class_uint64_little_endian.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,14 +15,9 @@ class grib_accessor_uint64_little_endian_t : public grib_accessor_gen_t { public: - /* Members defined in uint64_little_endian */ -}; - -class grib_accessor_class_uint64_little_endian_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_uint64_little_endian_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_uint64_little_endian_t() : + grib_accessor_gen_t() { class_name_ = "uint64_little_endian"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_uint64_little_endian_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; + long get_native_type() override; + int unpack_long(long* val, size_t* len) override; }; diff --git a/src/accessor/grib_accessor_class_uint8.cc b/src/accessor/grib_accessor_class_uint8.cc index 90236aa50..ced906bae 100644 --- a/src/accessor/grib_accessor_class_uint8.cc +++ b/src/accessor/grib_accessor_class_uint8.cc @@ -10,15 +10,14 @@ #include "grib_accessor_class_uint8.h" -grib_accessor_class_uint8_t _grib_accessor_class_uint8{ "uint8" }; -grib_accessor_class* grib_accessor_class_uint8 = &_grib_accessor_class_uint8; +grib_accessor_uint8_t _grib_accessor_uint8{}; +grib_accessor* grib_accessor_uint8 = &_grib_accessor_uint8; - -int grib_accessor_class_uint8_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_uint8_t::unpack_long(long* val, size_t* len) { - long value = 0; - long pos = a->offset; - unsigned char* data = grib_handle_of_accessor(a)->buffer->data; + long value = 0; + long pos = offset_; + const unsigned char* data = grib_handle_of_accessor(this)->buffer->data; if (*len < 1) { return GRIB_ARRAY_TOO_SMALL; @@ -31,7 +30,7 @@ int grib_accessor_class_uint8_t::unpack_long(grib_accessor* a, long* val, size_t return GRIB_SUCCESS; } -int grib_accessor_class_uint8_t::get_native_type(grib_accessor* a) +long grib_accessor_uint8_t::get_native_type() { return GRIB_TYPE_LONG; } diff --git a/src/accessor/grib_accessor_class_uint8.h b/src/accessor/grib_accessor_class_uint8.h index 8a58b27f3..ab5601a20 100644 --- a/src/accessor/grib_accessor_class_uint8.h +++ b/src/accessor/grib_accessor_class_uint8.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,14 +15,9 @@ class grib_accessor_uint8_t : public grib_accessor_gen_t { public: - /* Members defined in uint8 */ -}; - -class grib_accessor_class_uint8_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_uint8_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_uint8_t() : + grib_accessor_gen_t() { class_name_ = "uint8"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_uint8_t{}; } - int get_native_type(grib_accessor*) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; + long get_native_type() override; + int unpack_long(long* val, size_t* len) override; }; diff --git a/src/accessor/grib_accessor_class_unexpanded_descriptors.cc b/src/accessor/grib_accessor_class_unexpanded_descriptors.cc index 36e7112a6..7c4ddd602 100644 --- a/src/accessor/grib_accessor_class_unexpanded_descriptors.cc +++ b/src/accessor/grib_accessor_class_unexpanded_descriptors.cc @@ -8,51 +8,48 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ +#include "grib_accessor_class_expanded_descriptors.h" #include "grib_accessor_class_unexpanded_descriptors.h" -grib_accessor_class_unexpanded_descriptors_t _grib_accessor_class_unexpanded_descriptors{ "unexpanded_descriptors" }; -grib_accessor_class* grib_accessor_class_unexpanded_descriptors = &_grib_accessor_class_unexpanded_descriptors; +grib_accessor_unexpanded_descriptors_t _grib_accessor_unexpanded_descriptors{}; +grib_accessor* grib_accessor_unexpanded_descriptors = &_grib_accessor_unexpanded_descriptors; - -void grib_accessor_class_unexpanded_descriptors_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_unexpanded_descriptors_t::init(const long len, grib_arguments* args) { - grib_accessor_class_long_t::init(a, len, args); - grib_accessor_unexpanded_descriptors_t* self = (grib_accessor_unexpanded_descriptors_t*)a; + grib_accessor_long_t::init(len, args); - int n = 0; - grib_handle* hand = grib_handle_of_accessor(a); - self->unexpandedDescriptorsEncoded = grib_find_accessor(hand, grib_arguments_get_name(hand, args, n++)); - self->createNewData = grib_arguments_get_name(hand, args, n++); - a->length = 0; + int n = 0; + grib_handle* hand = grib_handle_of_accessor(this); + unexpandedDescriptorsEncoded_ = grib_find_accessor(hand, grib_arguments_get_name(hand, args, n++)); + createNewData_ = grib_arguments_get_name(hand, args, n++); + length_ = 0; } -int grib_accessor_class_unexpanded_descriptors_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_unexpanded_descriptors_t::unpack_long(long* val, size_t* len) { - grib_accessor_unexpanded_descriptors_t* self = (grib_accessor_unexpanded_descriptors_t*)a; - int ret = 0; long pos = 0; long rlen = 0; long f, x, y; long* v = val; long i; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); - pos = accessor_raw_get_offset(self->unexpandedDescriptorsEncoded) * 8; + pos = accessor_raw_get_offset(unexpandedDescriptorsEncoded_) * 8; - ret = value_count(a, &rlen); + ret = value_count(&rlen); if (ret) return ret; if (rlen == 0) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "No descriptors in section 3. Malformed message."); return GRIB_MESSAGE_MALFORMED; } if (*len < rlen) { - /* grib_context_log(a->context, GRIB_LOG_ERROR, */ - /* " wrong size (%ld) for %s it contains %d values ",*len, a->name , rlen); */ + /* grib_context_log(context_ , GRIB_LOG_ERROR, */ + /* " wrong size (%ld) for %s it contains %d values ",*len, name_ , rlen); */ *len = 0; return GRIB_ARRAY_TOO_SMALL; } @@ -67,22 +64,21 @@ int grib_accessor_class_unexpanded_descriptors_t::unpack_long(grib_accessor* a, return GRIB_SUCCESS; } -int grib_accessor_class_unexpanded_descriptors_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_unexpanded_descriptors_t::pack_long(const long* val, size_t* len) { - grib_accessor_unexpanded_descriptors_t* self = (grib_accessor_unexpanded_descriptors_t*)a; - int ret = 0; - long pos = 0; + int ret = 0; + long pos = 0; unsigned long f, x, y; unsigned char* buf = NULL; - grib_accessor* expanded = NULL; + grib_accessor_expanded_descriptors_t* expanded = NULL; size_t buflen = *len * 2; size_t i = 0, length = *len; long createNewData = 1; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(this); - grib_get_long(hand, self->createNewData, &createNewData); + grib_get_long(hand, createNewData_, &createNewData); - buf = (unsigned char*)grib_context_malloc_clear(a->context, buflen); + buf = (unsigned char*)grib_context_malloc_clear(context_, buflen); for (i = 0; i < length; i++) { const long tmp = val[i] % 100000; @@ -94,15 +90,15 @@ int grib_accessor_class_unexpanded_descriptors_t::pack_long(grib_accessor* a, co grib_encode_unsigned_longb(buf, y, &pos, 8); } - self->unexpandedDescriptorsEncoded->pack_bytes(buf, &buflen); + unexpandedDescriptorsEncoded_->pack_bytes(buf, &buflen); grib_context_free(hand->context, buf); if (createNewData == 0) return ret; - expanded = grib_find_accessor(hand, "expandedCodes"); + expanded = dynamic_cast(grib_find_accessor(hand, "expandedCodes")); Assert(expanded != NULL); - ret = grib_accessor_class_expanded_descriptors_set_do_expand(expanded, 1); + ret = expanded->grib_accessor_expanded_descriptors_set_do_expand(1); if (ret != GRIB_SUCCESS) return ret; @@ -115,28 +111,27 @@ int grib_accessor_class_unexpanded_descriptors_t::pack_long(grib_accessor* a, co return ret; } -int grib_accessor_class_unexpanded_descriptors_t::value_count(grib_accessor* a, long* numberOfUnexpandedDescriptors) +int grib_accessor_unexpanded_descriptors_t::value_count(long* numberOfUnexpandedDescriptors) { - grib_accessor_unexpanded_descriptors_t* self = (grib_accessor_unexpanded_descriptors_t*)a; long n = 0; - self->unexpandedDescriptorsEncoded->value_count(&n); + unexpandedDescriptorsEncoded_->value_count(&n); *numberOfUnexpandedDescriptors = n / 2; return 0; } -long grib_accessor_class_unexpanded_descriptors_t::byte_offset(grib_accessor* a) +long grib_accessor_unexpanded_descriptors_t::byte_offset() { - return a->offset; + return offset_; } -void grib_accessor_class_unexpanded_descriptors_t::update_size(grib_accessor* a, size_t s) +void grib_accessor_unexpanded_descriptors_t::update_size(size_t s) { - a->length = s; + length_ = s; } -long grib_accessor_class_unexpanded_descriptors_t::next_offset(grib_accessor* a) +long grib_accessor_unexpanded_descriptors_t::next_offset() { - return a->byte_offset() + a->length; + return byte_offset() + length_; } diff --git a/src/accessor/grib_accessor_class_unexpanded_descriptors.h b/src/accessor/grib_accessor_class_unexpanded_descriptors.h index f9a016c1e..a3146c4a7 100644 --- a/src/accessor/grib_accessor_class_unexpanded_descriptors.h +++ b/src/accessor/grib_accessor_class_unexpanded_descriptors.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,21 +15,18 @@ class grib_accessor_unexpanded_descriptors_t : public grib_accessor_long_t { public: - /* Members defined in unexpanded_descriptors */ - grib_accessor* unexpandedDescriptorsEncoded; - const char* createNewData; -}; - -class grib_accessor_class_unexpanded_descriptors_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_unexpanded_descriptors_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_unexpanded_descriptors_t() : + grib_accessor_long_t() { class_name_ = "unexpanded_descriptors"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_unexpanded_descriptors_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - long byte_offset(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + long byte_offset() override; + long next_offset() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + +private: + grib_accessor* unexpandedDescriptorsEncoded_ = nullptr; + const char* createNewData_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_unpack_bufr_values.cc b/src/accessor/grib_accessor_class_unpack_bufr_values.cc index 9f6495989..be36e9a2d 100644 --- a/src/accessor/grib_accessor_class_unpack_bufr_values.cc +++ b/src/accessor/grib_accessor_class_unpack_bufr_values.cc @@ -9,72 +9,64 @@ */ #include "grib_accessor_class_unpack_bufr_values.h" -#include "grib_accessor_class_bufr_data_array.h" -grib_accessor_class_unpack_bufr_values_t _grib_accessor_class_unpack_bufr_values{ "unpack_bufr_values" }; -grib_accessor_class* grib_accessor_class_unpack_bufr_values = &_grib_accessor_class_unpack_bufr_values; +grib_accessor_unpack_bufr_values_t _grib_accessor_unpack_bufr_values{}; +grib_accessor* grib_accessor_unpack_bufr_values = &_grib_accessor_unpack_bufr_values; -void grib_accessor_class_unpack_bufr_values_t::init(grib_accessor* a, const long len, grib_arguments* params) +void grib_accessor_unpack_bufr_values_t::init(const long len, grib_arguments* params) { - grib_accessor_class_gen_t::init(a, len, params); + grib_accessor_gen_t::init(len, params); char* key; - grib_accessor_unpack_bufr_values_t* self = (grib_accessor_unpack_bufr_values_t*)a; - key = (char*)grib_arguments_get_name(grib_handle_of_accessor(a), params, 0); - self->data_accessor = grib_find_accessor(grib_handle_of_accessor(a), key); + key = (char*)grib_arguments_get_name(grib_handle_of_accessor(this), params, 0); + data_accessor_ = dynamic_cast(grib_find_accessor(grib_handle_of_accessor(this), key)); - a->length = 0; + length_ = 0; } -void grib_accessor_class_unpack_bufr_values_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_unpack_bufr_values_t::dump(grib_dumper* dumper) { } -int grib_accessor_class_unpack_bufr_values_t::unpack_string_array(grib_accessor* a, char** buffer, size_t* len) +int grib_accessor_unpack_bufr_values_t::unpack_string_array(char** buffer, size_t* len) { - grib_accessor_unpack_bufr_values_t* self = (grib_accessor_unpack_bufr_values_t*)a; - grib_accessor* data = (grib_accessor*)self->data_accessor; - + grib_accessor* data = (grib_accessor*)data_accessor_; return data->unpack_double(0, 0); } -int grib_accessor_class_unpack_bufr_values_t::unpack_string(grib_accessor* a, char* buffer, size_t* len) +int grib_accessor_unpack_bufr_values_t::unpack_string(char* buffer, size_t* len) { - grib_accessor_unpack_bufr_values_t* self = (grib_accessor_unpack_bufr_values_t*)a; - grib_accessor* data = (grib_accessor*)self->data_accessor; + grib_accessor* data = (grib_accessor*)data_accessor_; strcpy(buffer, "0"); *len = 1; return data->unpack_double(0, 0); } -int grib_accessor_class_unpack_bufr_values_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_unpack_bufr_values_t::unpack_long(long* val, size_t* len) { - grib_accessor_unpack_bufr_values_t* self = (grib_accessor_unpack_bufr_values_t*)a; - grib_accessor* data = (grib_accessor*)self->data_accessor; + grib_accessor* data = (grib_accessor*)data_accessor_; + return data->unpack_double(0, 0); +} + +int grib_accessor_unpack_bufr_values_t::unpack_double(double* val, size_t* len) +{ + grib_accessor* data = (grib_accessor*)data_accessor_; return data->unpack_double(0, 0); } -int grib_accessor_class_unpack_bufr_values_t::unpack_double(grib_accessor* a, double* val, size_t* len) -{ - grib_accessor_unpack_bufr_values_t* self = (grib_accessor_unpack_bufr_values_t*)a; - grib_accessor* data = (grib_accessor*)self->data_accessor; - - return data->unpack_double(0, 0); -} - -int grib_accessor_class_unpack_bufr_values_t::value_count(grib_accessor* a, long* count) +int grib_accessor_unpack_bufr_values_t::value_count(long* count) { *count = 1; return 0; } -void grib_accessor_class_unpack_bufr_values_t::destroy(grib_context* context, grib_accessor* a) +void grib_accessor_unpack_bufr_values_t::destroy(grib_context* context) { - grib_accessor_class_gen_t::destroy(context, a); + grib_accessor_gen_t::destroy(context); } -int grib_accessor_class_unpack_bufr_values_t::get_native_type(grib_accessor* a) +long grib_accessor_unpack_bufr_values_t::get_native_type() { return GRIB_TYPE_LONG; } @@ -87,26 +79,21 @@ int grib_accessor_class_unpack_bufr_values_t::get_native_type(grib_accessor* a) // return "unknown proc flag"; // } -int grib_accessor_class_unpack_bufr_values_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_unpack_bufr_values_t::pack_long(const long* val, size_t* len) { int unpackMode = CODES_BUFR_UNPACK_STRUCTURE; - grib_accessor_unpack_bufr_values_t* self = (grib_accessor_unpack_bufr_values_t*)a; - grib_accessor* data = (grib_accessor*)self->data_accessor; if (*val == 2) unpackMode = CODES_BUFR_UNPACK_FLAT; if (*val == 3) unpackMode = CODES_BUFR_NEW_DATA; - accessor_bufr_data_array_set_unpackMode(data, unpackMode); + data_accessor_->accessor_bufr_data_array_set_unpackMode(unpackMode); - return data->unpack_double(0, 0); + return data_accessor_->unpack_double(0, 0); } -int grib_accessor_class_unpack_bufr_values_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_unpack_bufr_values_t::pack_double(const double* val, size_t* len) { - grib_accessor_unpack_bufr_values_t* self = (grib_accessor_unpack_bufr_values_t*)a; - grib_accessor* data = (grib_accessor*)self->data_accessor; - - return data->unpack_double(0, 0); + return data_accessor_->unpack_double(0, 0); } diff --git a/src/accessor/grib_accessor_class_unpack_bufr_values.h b/src/accessor/grib_accessor_class_unpack_bufr_values.h index 46dd91ec5..07001cd26 100644 --- a/src/accessor/grib_accessor_class_unpack_bufr_values.h +++ b/src/accessor/grib_accessor_class_unpack_bufr_values.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -12,28 +11,26 @@ #pragma once #include "grib_accessor_class_gen.h" +#include "grib_accessor_class_bufr_data_array.h" class grib_accessor_unpack_bufr_values_t : public grib_accessor_gen_t { public: - /* Members defined in unpack_bufr_values */ - grib_accessor* data_accessor; -}; - -class grib_accessor_class_unpack_bufr_values_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_unpack_bufr_values_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_unpack_bufr_values_t() : + grib_accessor_gen_t() { class_name_ = "unpack_bufr_values"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_unpack_bufr_values_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - int unpack_string_array(grib_accessor*, char**, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + int unpack_string_array(char**, size_t* len) override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + +private: + grib_accessor_bufr_data_array_t* data_accessor_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_unsigned.cc b/src/accessor/grib_accessor_class_unsigned.cc index 14ca831a3..a00c0b603 100644 --- a/src/accessor/grib_accessor_class_unsigned.cc +++ b/src/accessor/grib_accessor_class_unsigned.cc @@ -9,42 +9,41 @@ */ #include "grib_accessor_class_unsigned.h" +#include "ecc_numeric_limits.h" -grib_accessor_class_unsigned_t _grib_accessor_class_unsigned("unsigned"); -grib_accessor_class* grib_accessor_class_unsigned = &_grib_accessor_class_unsigned; +grib_accessor_unsigned_t _grib_accessor_unsigned{}; +grib_accessor* grib_accessor_unsigned = &_grib_accessor_unsigned; - -void grib_accessor_class_unsigned_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_unsigned_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_long_t::init(a, len, arg); - grib_accessor_unsigned_t* self = (grib_accessor_unsigned_t*)a; - self->arg = arg; - self->nbytes = len; + grib_accessor_long_t::init(len, arg); + nbytes_ = len; + arg_ = arg; - if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { - a->length = 0; - if (!a->vvalue) - a->vvalue = (grib_virtual_value*)grib_context_malloc_clear(a->context, sizeof(grib_virtual_value)); - a->vvalue->type = GRIB_TYPE_LONG; - a->vvalue->length = len; + if (flags_ & GRIB_ACCESSOR_FLAG_TRANSIENT) { + length_ = 0; + if (!vvalue_) + vvalue_ = (grib_virtual_value*)grib_context_malloc_clear(context_, sizeof(grib_virtual_value)); + vvalue_->type = GRIB_TYPE_LONG; + vvalue_->length = len; } else { long count = 0; - a->value_count(&count); + value_count(&count); - a->length = len * count; - a->vvalue = NULL; + length_ = len * count; + vvalue_ = NULL; } } -void grib_accessor_class_unsigned_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_unsigned_t::dump(grib_dumper* dumper) { long rlen = 0; - a->value_count(&rlen); + value_count(&rlen); if (rlen == 1) - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); else - grib_dump_values(dumper, a); + grib_dump_values(dumper, this); } static const unsigned long ones[] = { @@ -63,10 +62,8 @@ int value_is_missing(long val) return (val == GRIB_MISSING_LONG || val == all_ones); } -int pack_long_unsigned_helper(grib_accessor* a, const long* val, size_t* len, int check) +int grib_accessor_unsigned_t::pack_long_unsigned_helper(const long* val, size_t* len, int check) { - grib_accessor_unsigned_t* self = (grib_accessor_unsigned_t*)a; - int ret = 0; long off = 0; long rlen = 0; @@ -76,28 +73,28 @@ int pack_long_unsigned_helper(grib_accessor* a, const long* val, size_t* len, in unsigned long i = 0; unsigned long missing = 0; - int err = a->value_count(&rlen); + int err = value_count(&rlen); if (err) return err; - if (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { - Assert(self->nbytes <= 4); - missing = ones[self->nbytes]; + if (flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { + Assert(nbytes_ <= 4); + missing = ones[nbytes_]; } - if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { - a->vvalue->lval = val[0]; + if (flags_ & GRIB_ACCESSOR_FLAG_TRANSIENT) { + vvalue_->lval = val[0]; if (missing && val[0] == GRIB_MISSING_LONG) - a->vvalue->missing = 1; + vvalue_->missing = 1; else - a->vvalue->missing = 0; + vvalue_->missing = 0; return GRIB_SUCCESS; } if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", name_, 1); len[0] = 0; return GRIB_ARRAY_TOO_SMALL; } @@ -112,90 +109,88 @@ int pack_long_unsigned_helper(grib_accessor* a, const long* val, size_t* len, in /* Check if value fits into number of bits */ if (check) { if (val[0] < 0) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Key \"%s\": Trying to encode a negative value of %ld for key of type unsigned", a->name, val[0]); + grib_context_log(context_, GRIB_LOG_ERROR, + "Key \"%s\": Trying to encode a negative value of %ld for key of type unsigned", name_, val[0]); return GRIB_ENCODING_ERROR; } /* See GRIB-23 and GRIB-262 */ if (!value_is_missing(v)) { - const long nbits = self->nbytes * 8; + const long nbits = nbytes_ * 8; if (nbits < 33) { - unsigned long maxval = (1UL << nbits) - 1; + unsigned long maxval = NumericLimits::max(nbits); if (maxval > 0 && v > maxval) { /* See ECC-1002 */ - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "Key \"%s\": Trying to encode value of %ld but the maximum allowable value is %lu (number of bits=%ld)", - a->name, v, maxval, nbits); + name_, v, maxval, nbits); return GRIB_ENCODING_ERROR; } } } } - off = a->offset * 8; - ret = grib_encode_unsigned_long(grib_handle_of_accessor(a)->buffer->data, v, &off, self->nbytes * 8); + off = offset_ * 8; + ret = grib_encode_unsigned_long(grib_handle_of_accessor(this)->buffer->data, v, &off, nbytes_ * 8); if (ret == GRIB_SUCCESS) len[0] = 1; if (*len > 1) - grib_context_log(a->context, GRIB_LOG_WARNING, "grib_accessor_unsigned : Trying to pack %d values in a scalar %s, packing first value", *len, a->name); + grib_context_log(context_, GRIB_LOG_WARNING, "grib_accessor_unsigned : Trying to pack %d values in a scalar %s, packing first value", *len, name_); len[0] = 1; return ret; } /* TODO: We assume that there are no missing values if there are more that 1 value */ - buflen = *len * self->nbytes; + buflen = *len * nbytes_; - buf = (unsigned char*)grib_context_malloc(a->context, buflen); + buf = (unsigned char*)grib_context_malloc(context_, buflen); for (i = 0; i < *len; i++) - grib_encode_unsigned_long(buf, val[i], &off, self->nbytes * 8); + grib_encode_unsigned_long(buf, val[i], &off, nbytes_ * 8); - ret = grib_set_long_internal(grib_handle_of_accessor(a), grib_arguments_get_name(a->parent->h, self->arg, 0), *len); + ret = grib_set_long_internal(grib_handle_of_accessor(this), grib_arguments_get_name(parent_->h, arg_, 0), *len); if (ret == GRIB_SUCCESS) - grib_buffer_replace(a, buf, buflen, 1, 1); + grib_buffer_replace(this, buf, buflen, 1, 1); else *len = 0; - grib_context_free(a->context, buf); + grib_context_free(context_, buf); return ret; } -int grib_accessor_class_unsigned_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_unsigned_t::unpack_long(long* val, size_t* len) { - grib_accessor_unsigned_t* self = (grib_accessor_unsigned_t*)a; - long rlen = 0; unsigned long i = 0; unsigned long missing = 0; long count = 0; int err = 0; - long pos = a->offset * 8; - grib_handle* hand = grib_handle_of_accessor(a); + long pos = offset_ * 8; + grib_handle* hand = grib_handle_of_accessor(this); - err = a->value_count(&count); + err = value_count(&count); if (err) return err; rlen = count; if (*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size (%ld) for %s, it contains %ld values", *len, a->name, rlen); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size (%ld) for %s, it contains %ld values", *len, name_, rlen); *len = 0; return GRIB_ARRAY_TOO_SMALL; } - if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { - *val = a->vvalue->lval; + if (flags_ & GRIB_ACCESSOR_FLAG_TRANSIENT) { + *val = vvalue_->lval; *len = 1; return GRIB_SUCCESS; } - if (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { - Assert(self->nbytes <= 4); - missing = ones[self->nbytes]; + if (flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { + Assert(nbytes_ <= 4); + missing = ones[nbytes_]; } for (i = 0; i < rlen; i++) { - val[i] = (long)grib_decode_unsigned_long(hand->buffer->data, &pos, self->nbytes * 8); + val[i] = (long)grib_decode_unsigned_long(hand->buffer->data, &pos, nbytes_ * 8); if (missing) if (val[i] == missing) val[i] = GRIB_MISSING_LONG; @@ -205,54 +200,53 @@ int grib_accessor_class_unsigned_t::unpack_long(grib_accessor* a, long* val, siz return GRIB_SUCCESS; } -int grib_accessor_class_unsigned_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_unsigned_t::pack_long(const long* val, size_t* len) { /* See GRIB-262 as example of why we do the checks */ - return pack_long_unsigned_helper(a, val, len, /*check=*/1); + return pack_long_unsigned_helper(val, len, /*check=*/1); } -long grib_accessor_class_unsigned_t::byte_count(grib_accessor* a) +long grib_accessor_unsigned_t::byte_count() { - return a->length; + return length_; } -int grib_accessor_class_unsigned_t::value_count(grib_accessor* a, long* len) +int grib_accessor_unsigned_t::value_count(long* len) { - grib_accessor_unsigned_t* self = (grib_accessor_unsigned_t*)a; - if (!self->arg) { + if (!arg_) { *len = 1; return 0; } - return grib_get_long_internal(grib_handle_of_accessor(a), grib_arguments_get_name(a->parent->h, self->arg, 0), len); + return grib_get_long_internal(grib_handle_of_accessor(this), grib_arguments_get_name(parent_->h, arg_, 0), len); } -long grib_accessor_class_unsigned_t::byte_offset(grib_accessor* a) +long grib_accessor_unsigned_t::byte_offset() { - return a->offset; + return offset_; } -void grib_accessor_class_unsigned_t::update_size(grib_accessor* a, size_t s) +void grib_accessor_unsigned_t::update_size(size_t s) { - a->length = s; + length_ = s; } -long grib_accessor_class_unsigned_t::next_offset(grib_accessor* a) +long grib_accessor_unsigned_t::next_offset() { - return a->byte_offset() + a->byte_count(); + return byte_offset() + byte_count(); } -int grib_accessor_class_unsigned_t::is_missing(grib_accessor* a) +int grib_accessor_unsigned_t::is_missing() { - const unsigned char ff = 0xff; - unsigned long offset = a->offset; - grib_handle* hand = grib_handle_of_accessor(a); + const unsigned char ff = 0xff; + unsigned long offset = offset_; + const grib_handle* hand = grib_handle_of_accessor(this); - if (a->length == 0) { - Assert(a->vvalue != NULL); - return a->vvalue->missing; + if (length_ == 0) { + Assert(vvalue_ != NULL); + return vvalue_->missing; } - for (long i = 0; i < a->length; i++) { + for (long i = 0; i < length_; i++) { if (hand->buffer->data[offset] != ff) { return 0; } @@ -261,10 +255,11 @@ int grib_accessor_class_unsigned_t::is_missing(grib_accessor* a) return 1; } -void grib_accessor_class_unsigned_t::destroy(grib_context* context, grib_accessor* a) +void grib_accessor_unsigned_t::destroy(grib_context* context) { - grib_context_free(context, a->vvalue); - a->vvalue = NULL; + if (vvalue_ != NULL) + grib_context_free(context, vvalue_); - grib_accessor_class_long_t::destroy(context, a); + vvalue_ = NULL; + grib_accessor_long_t::destroy(context); } diff --git a/src/accessor/grib_accessor_class_unsigned.h b/src/accessor/grib_accessor_class_unsigned.h index 50f3cfb16..7be47f6f4 100644 --- a/src/accessor/grib_accessor_class_unsigned.h +++ b/src/accessor/grib_accessor_class_unsigned.h @@ -15,25 +15,27 @@ class grib_accessor_unsigned_t : public grib_accessor_long_t { public: - long nbytes; - grib_arguments* arg; -}; - - -class grib_accessor_class_unsigned_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_unsigned_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_unsigned_t() : + grib_accessor_long_t() { class_name_ = "None"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_unsigned_t{}; } - void init(grib_accessor* a, const long len, grib_arguments* arg) override; - void dump(grib_accessor* a, grib_dumper* dumper) override; - int unpack_long(grib_accessor* a, long* val, size_t* len) override; - int pack_long(grib_accessor* a, const long* val, size_t* len) override; - long byte_count(grib_accessor* a) override; - int value_count(grib_accessor* a, long* len) override; - long byte_offset(grib_accessor* a) override; - void update_size(grib_accessor* a, size_t s) override; - long next_offset(grib_accessor* a) override; - int is_missing(grib_accessor* a) override; - void destroy(grib_context* context, grib_accessor* a) override; + void init(const long len, grib_arguments* arg) override; + void dump(grib_dumper* dumper) override; + int unpack_long(long* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + long byte_count() override; + int value_count(long* len) override; + long byte_offset() override; + void update_size(size_t s) override; + long next_offset() override; + int is_missing() override; + void destroy(grib_context* context) override; + +protected: + long nbytes_ = 0; + + int pack_long_unsigned_helper(const long* val, size_t* len, int check); + +private: + grib_arguments* arg_ = nullptr; + }; diff --git a/src/accessor/grib_accessor_class_unsigned_bits.cc b/src/accessor/grib_accessor_class_unsigned_bits.cc index 4e6f058fe..eeb34614d 100644 --- a/src/accessor/grib_accessor_class_unsigned_bits.cc +++ b/src/accessor/grib_accessor_class_unsigned_bits.cc @@ -10,65 +10,60 @@ #include "grib_accessor_class_unsigned_bits.h" -grib_accessor_class_unsigned_bits_t _grib_accessor_class_unsigned_bits{ "unsigned_bits" }; -grib_accessor_class* grib_accessor_class_unsigned_bits = &_grib_accessor_class_unsigned_bits; +grib_accessor_unsigned_bits_t _grib_accessor_unsigned_bits{}; +grib_accessor* grib_accessor_unsigned_bits = &_grib_accessor_unsigned_bits; - -static long compute_byte_count(grib_accessor* a) +long grib_accessor_unsigned_bits_t::compute_byte_count() { - grib_accessor_unsigned_bits_t* self = (grib_accessor_unsigned_bits_t*)a; long numberOfBits; long numberOfElements; int ret = 0; - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfBits, &numberOfBits); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfBits_, &numberOfBits); if (ret) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s unable to get %s to compute size", a->name, self->numberOfBits); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s unable to get %s to compute size", name_, numberOfBits_); return 0; } - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfElements, &numberOfElements); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfElements_, &numberOfElements); if (ret) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s unable to get %s to compute size", a->name, self->numberOfElements); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s unable to get %s to compute size", name_, numberOfElements_); return 0; } return (numberOfBits * numberOfElements + 7) / 8; } -void grib_accessor_class_unsigned_bits_t::init(grib_accessor* a, const long len, grib_arguments* args) +void grib_accessor_unsigned_bits_t::init(const long len, grib_arguments* args) { - grib_accessor_class_long_t::init(a, len, args); - grib_accessor_unsigned_bits_t* self = (grib_accessor_unsigned_bits_t*)a; - - int n = 0; - self->numberOfBits = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - self->numberOfElements = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); - a->length = compute_byte_count(a); + grib_accessor_long_t::init(len, args); + int n = 0; + numberOfBits_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + numberOfElements_ = grib_arguments_get_name(grib_handle_of_accessor(this), args, n++); + length_ = compute_byte_count(); } -int grib_accessor_class_unsigned_bits_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_unsigned_bits_t::unpack_long(long* val, size_t* len) { - grib_accessor_unsigned_bits_t* self = (grib_accessor_unsigned_bits_t*)a; - - long pos = a->offset * 8; + int ret = 0; + long pos = offset_ * 8; long rlen = 0; long numberOfBits = 0; - int ret = value_count(a, &rlen); + ret = value_count(&rlen); if (ret) return ret; if (*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Wrong size (%ld) for %s, it contains %ld values", *len, a->name, rlen); + grib_context_log(context_, GRIB_LOG_ERROR, + "Wrong size (%ld) for %s, it contains %ld values", *len, name_, rlen); *len = rlen; return GRIB_ARRAY_TOO_SMALL; } - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfBits, &numberOfBits); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfBits_, &numberOfBits); if (ret) return ret; if (numberOfBits == 0) { @@ -78,89 +73,87 @@ int grib_accessor_class_unsigned_bits_t::unpack_long(grib_accessor* a, long* val return GRIB_SUCCESS; } - grib_decode_long_array(grib_handle_of_accessor(a)->buffer->data, &pos, numberOfBits, rlen, val); + grib_decode_long_array(grib_handle_of_accessor(this)->buffer->data, &pos, numberOfBits, rlen, val); *len = rlen; return GRIB_SUCCESS; } -int grib_accessor_class_unsigned_bits_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_unsigned_bits_t::pack_long(const long* val, size_t* len) { - grib_accessor_unsigned_bits_t* self = (grib_accessor_unsigned_bits_t*)a; - + int ret = 0; long off = 0; long numberOfBits = 0; size_t buflen = 0; unsigned char* buf = NULL; unsigned long i = 0; long rlen = 0; - int ret = value_count(a, &rlen); + ret = value_count(&rlen); if (ret) return ret; /* if(*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "Wrong size for %s it contains %d values ", a->name , rlen ); + grib_context_log(context_ , GRIB_LOG_ERROR, + "Wrong size for %s it contains %d values ", name_ , rlen ); return GRIB_ARRAY_TOO_SMALL; } */ if (*len != rlen) - ret = grib_set_long(grib_handle_of_accessor(a), self->numberOfElements, *len); + ret = grib_set_long(grib_handle_of_accessor(this), numberOfElements_, *len); if (ret) return ret; - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfBits, &numberOfBits); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfBits_, &numberOfBits); if (ret) return ret; if (numberOfBits == 0) { - grib_buffer_replace(a, NULL, 0, 1, 1); + grib_buffer_replace(this, NULL, 0, 1, 1); return GRIB_SUCCESS; } - buflen = compute_byte_count(a); - buf = (unsigned char*)grib_context_malloc_clear(a->context, buflen + sizeof(long)); + buflen = compute_byte_count(); + buf = (unsigned char*)grib_context_malloc_clear(context_, buflen + sizeof(long)); for (i = 0; i < *len; i++) grib_encode_unsigned_longb(buf, val[i], &off, numberOfBits); - grib_buffer_replace(a, buf, buflen, 1, 1); + grib_buffer_replace(this, buf, buflen, 1, 1); - grib_context_free(a->context, buf); + grib_context_free(context_, buf); return ret; } -long grib_accessor_class_unsigned_bits_t::byte_count(grib_accessor* a) +long grib_accessor_unsigned_bits_t::byte_count() { - return a->length; + return length_; } -int grib_accessor_class_unsigned_bits_t::value_count(grib_accessor* a, long* numberOfElements) +int grib_accessor_unsigned_bits_t::value_count(long* numberOfElements) { - grib_accessor_unsigned_bits_t* self = (grib_accessor_unsigned_bits_t*)a; int ret; *numberOfElements = 0; - ret = grib_get_long(grib_handle_of_accessor(a), self->numberOfElements, numberOfElements); + ret = grib_get_long(grib_handle_of_accessor(this), numberOfElements_, numberOfElements); if (ret) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s unable to get %s to compute size", a->name, self->numberOfElements); + grib_context_log(context_, GRIB_LOG_ERROR, + "%s unable to get %s to compute size", name_, numberOfElements_); } return ret; } -long grib_accessor_class_unsigned_bits_t::byte_offset(grib_accessor* a) +long grib_accessor_unsigned_bits_t::byte_offset() { - return a->offset; + return offset_; } -void grib_accessor_class_unsigned_bits_t::update_size(grib_accessor* a, size_t s) +void grib_accessor_unsigned_bits_t::update_size(size_t s) { - a->length = s; + length_ = s; } -long grib_accessor_class_unsigned_bits_t::next_offset(grib_accessor* a) +long grib_accessor_unsigned_bits_t::next_offset() { - return a->byte_offset() + a->length; + return byte_offset() + length_; } diff --git a/src/accessor/grib_accessor_class_unsigned_bits.h b/src/accessor/grib_accessor_class_unsigned_bits.h index 52528ab83..2469250e8 100644 --- a/src/accessor/grib_accessor_class_unsigned_bits.h +++ b/src/accessor/grib_accessor_class_unsigned_bits.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,22 +15,21 @@ class grib_accessor_unsigned_bits_t : public grib_accessor_long_t { public: - /* Members defined in unsigned_bits */ - const char* numberOfBits; - const char* numberOfElements; -}; - -class grib_accessor_class_unsigned_bits_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_unsigned_bits_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_unsigned_bits_t() : + grib_accessor_long_t() { class_name_ = "unsigned_bits"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_unsigned_bits_t{}; } - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - long byte_count(grib_accessor*) override; - long byte_offset(grib_accessor*) override; - long next_offset(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; + int pack_long(const long* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + long byte_count() override; + long byte_offset() override; + long next_offset() override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + +private: + const char* numberOfBits_ = nullptr; + const char* numberOfElements_ = nullptr; + + long compute_byte_count(); }; diff --git a/src/accessor/grib_accessor_class_validity_date.cc b/src/accessor/grib_accessor_class_validity_date.cc index 99e0eb47a..c9b89d42b 100644 --- a/src/accessor/grib_accessor_class_validity_date.cc +++ b/src/accessor/grib_accessor_class_validity_date.cc @@ -10,61 +10,59 @@ #include "grib_accessor_class_validity_date.h" -grib_accessor_class_validity_date_t _grib_accessor_class_validity_date{ "validity_date" }; -grib_accessor_class* grib_accessor_class_validity_date = &_grib_accessor_class_validity_date; +grib_accessor_validity_date_t _grib_accessor_validity_date{}; +grib_accessor* grib_accessor_validity_date = &_grib_accessor_validity_date; -void grib_accessor_class_validity_date_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_validity_date_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_validity_date_t* self = (grib_accessor_validity_date_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_accessor_long_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - self->date = grib_arguments_get_name(hand, c, n++); - self->time = grib_arguments_get_name(hand, c, n++); - self->step = grib_arguments_get_name(hand, c, n++); - self->stepUnits = grib_arguments_get_name(hand, c, n++); - self->year = grib_arguments_get_name(hand, c, n++); - self->month = grib_arguments_get_name(hand, c, n++); - self->day = grib_arguments_get_name(hand, c, n++); + date_ = grib_arguments_get_name(hand, c, n++); + time_ = grib_arguments_get_name(hand, c, n++); + step_ = grib_arguments_get_name(hand, c, n++); + stepUnits_ = grib_arguments_get_name(hand, c, n++); + year_ = grib_arguments_get_name(hand, c, n++); + month_ = grib_arguments_get_name(hand, c, n++); + day_ = grib_arguments_get_name(hand, c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_validity_date_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_validity_date_t::unpack_long(long* val, size_t* len) { - grib_accessor_validity_date_t* self = (grib_accessor_validity_date_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int ret = 0; - long date = 0; - long time = 0; - long step = 0; - long stepUnits = 0; + grib_handle* hand = grib_handle_of_accessor(this); + int ret = 0; + long date = 0; + long time = 0; + long step = 0; + long stepUnits = 0; long hours = 0, minutes = 0, step_mins = 0, tmp, tmp_hrs; - if (self->year) { + if (year_) { long year, month, day; - if ((ret = grib_get_long_internal(hand, self->year, &year)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, year_, &year)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->month, &month)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, month_, &month)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->day, &day)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, day_, &day)) != GRIB_SUCCESS) return ret; *val = year * 10000 + month * 100 + day; return GRIB_SUCCESS; } - if ((ret = grib_get_long_internal(hand, self->date, &date)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, date_, &date)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->time, &time)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, time_, &time)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long(hand, self->step, &step)) != GRIB_SUCCESS) { + if ((ret = grib_get_long(hand, step_, &step)) != GRIB_SUCCESS) { if ((ret = grib_get_long_internal(hand, "endStep", &step)) != GRIB_SUCCESS) { return ret; /* See ECC-817 */ } } - if (self->stepUnits) { - if ((ret = grib_get_long_internal(hand, self->stepUnits, &stepUnits)) != GRIB_SUCCESS) + if (stepUnits_) { + if ((ret = grib_get_long_internal(hand, stepUnits_, &stepUnits)) != GRIB_SUCCESS) return ret; step_mins = convert_to_minutes(step, stepUnits); } diff --git a/src/accessor/grib_accessor_class_validity_date.h b/src/accessor/grib_accessor_class_validity_date.h index ca87b3282..7393eabd9 100644 --- a/src/accessor/grib_accessor_class_validity_date.h +++ b/src/accessor/grib_accessor_class_validity_date.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,21 +15,18 @@ class grib_accessor_validity_date_t : public grib_accessor_long_t { public: - /* Members defined in validity_date */ - const char* date; - const char* time; - const char* step; - const char* stepUnits; - const char* year; - const char* month; - const char* day; -}; - -class grib_accessor_class_validity_date_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_validity_date_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_validity_date_t() : + grib_accessor_long_t() { class_name_ = "validity_date"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_validity_date_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* date_ = nullptr; + const char* time_ = nullptr; + const char* step_ = nullptr; + const char* stepUnits_ = nullptr; + const char* year_ = nullptr; + const char* month_ = nullptr; + const char* day_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_validity_time.cc b/src/accessor/grib_accessor_class_validity_time.cc index 6f692e154..d4b6f4865 100644 --- a/src/accessor/grib_accessor_class_validity_time.cc +++ b/src/accessor/grib_accessor_class_validity_time.cc @@ -10,59 +10,56 @@ #include "grib_accessor_class_validity_time.h" -grib_accessor_class_validity_time_t _grib_accessor_class_validity_time{ "validity_time" }; -grib_accessor_class* grib_accessor_class_validity_time = &_grib_accessor_class_validity_time; +grib_accessor_validity_time_t _grib_accessor_validity_time{}; +grib_accessor* grib_accessor_validity_time = &_grib_accessor_validity_time; - -void grib_accessor_class_validity_time_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_validity_time_t::init(const long l, grib_arguments* c) { - grib_accessor_class_long_t::init(a, l, c); - grib_accessor_validity_time_t* self = (grib_accessor_validity_time_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_accessor_long_t::init(l, c); + grib_handle* hand = grib_handle_of_accessor(this); + int n = 0; - int n = 0; - self->date = grib_arguments_get_name(hand, c, n++); - self->time = grib_arguments_get_name(hand, c, n++); - self->step = grib_arguments_get_name(hand, c, n++); - self->stepUnits = grib_arguments_get_name(hand, c, n++); - self->hours = grib_arguments_get_name(hand, c, n++); - self->minutes = grib_arguments_get_name(hand, c, n++); + date_ = grib_arguments_get_name(hand, c, n++); + time_ = grib_arguments_get_name(hand, c, n++); + step_ = grib_arguments_get_name(hand, c, n++); + stepUnits_ = grib_arguments_get_name(hand, c, n++); + hours_ = grib_arguments_get_name(hand, c, n++); + minutes_ = grib_arguments_get_name(hand, c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -int grib_accessor_class_validity_time_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_validity_time_t::unpack_long(long* val, size_t* len) { - grib_accessor_validity_time_t* self = (grib_accessor_validity_time_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int ret = 0; - long date = 0; - long time = 0; - long step = 0; - long stepUnits = 0; + grib_handle* hand = grib_handle_of_accessor(this); + int ret = 0; + long date = 0; + long time = 0; + long step = 0; + long stepUnits = 0; long hours = 0, minutes = 0, step_mins = 0, tmp, tmp_hrs, tmp_mins; - if (self->hours) { - if ((ret = grib_get_long_internal(hand, self->hours, &hours)) != GRIB_SUCCESS) + if (hours_) { + if ((ret = grib_get_long_internal(hand, hours_, &hours)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->minutes, &minutes)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, minutes_, &minutes)) != GRIB_SUCCESS) return ret; *val = hours * 100 + minutes; return GRIB_SUCCESS; } - if ((ret = grib_get_long_internal(hand, self->date, &date)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, date_, &date)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(hand, self->time, &time)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, time_, &time)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long(hand, self->step, &step)) != GRIB_SUCCESS) { + if ((ret = grib_get_long(hand, step_, &step)) != GRIB_SUCCESS) { if ((ret = grib_get_long_internal(hand, "endStep", &step)) != GRIB_SUCCESS) { return ret; /* See ECC-817 */ } } /* Seconds will always be zero. So convert to minutes */ - if (self->stepUnits) { - if ((ret = grib_get_long_internal(hand, self->stepUnits, &stepUnits)) != GRIB_SUCCESS) + if (stepUnits_) { + if ((ret = grib_get_long_internal(hand, stepUnits_, &stepUnits)) != GRIB_SUCCESS) return ret; step_mins = convert_to_minutes(step, stepUnits); } @@ -92,20 +89,19 @@ int grib_accessor_class_validity_time_t::unpack_long(grib_accessor* a, long* val return GRIB_SUCCESS; } -int grib_accessor_class_validity_time_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_validity_time_t::unpack_string(char* val, size_t* len) { int err = 0; long v = 0; size_t lsize = 1, lmin = 5; - err = unpack_long(a, &v, &lsize); + err = unpack_long(&v, &lsize); if (err) return err; if (*len < lmin) { - const char* cclass_name = a->cclass->name; - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - cclass_name, a->name, lmin, *len); + class_name_, name_, lmin, *len); *len = lmin; return GRIB_BUFFER_TOO_SMALL; } diff --git a/src/accessor/grib_accessor_class_validity_time.h b/src/accessor/grib_accessor_class_validity_time.h index 023c3e30a..620900b3c 100644 --- a/src/accessor/grib_accessor_class_validity_time.h +++ b/src/accessor/grib_accessor_class_validity_time.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,21 +15,18 @@ class grib_accessor_validity_time_t : public grib_accessor_long_t { public: - /* Members defined in validity_time */ - const char* date; - const char* time; - const char* step; - const char* stepUnits; - const char* hours; - const char* minutes; -}; - -class grib_accessor_class_validity_time_t : public grib_accessor_class_long_t -{ -public: - grib_accessor_class_validity_time_t(const char* name) : grib_accessor_class_long_t(name) {} + grib_accessor_validity_time_t() : + grib_accessor_long_t() { class_name_ = "validity_time"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_validity_time_t{}; } - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* date_ = nullptr; + const char* time_ = nullptr; + const char* step_ = nullptr; + const char* stepUnits_ = nullptr; + const char* hours_ = nullptr; + const char* minutes_ = nullptr; }; diff --git a/src/accessor/grib_accessor_class_values.cc b/src/accessor/grib_accessor_class_values.cc index c8afd7787..b44c11ba4 100644 --- a/src/accessor/grib_accessor_class_values.cc +++ b/src/accessor/grib_accessor_class_values.cc @@ -10,19 +10,17 @@ #include "grib_accessor_class_values.h" -grib_accessor_class_values_t _grib_accessor_class_values{"values"}; -grib_accessor_class* grib_accessor_class_values = &_grib_accessor_class_values; +grib_accessor_values_t _grib_accessor_values{}; +grib_accessor* grib_accessor_values = &_grib_accessor_values; -long init_length(grib_accessor* a) +long grib_accessor_values_t::init_length() { - grib_accessor_values_t* self = (grib_accessor_values_t*)a; int ret = 0; - long seclen = 0; long offsetsection = 0; long offsetdata = 0; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->seclen, &seclen))) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), seclen_, &seclen))) return ret; if (seclen == 0) { @@ -30,71 +28,70 @@ long init_length(grib_accessor* a) return 0; } - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetsection, &offsetsection))) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), offsetsection_, &offsetsection))) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetdata, &offsetdata))) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(this), offsetdata_, &offsetdata))) return ret; /* When reparsing */ if (offsetdata < offsetsection) { /* printf("init_length offsetdata < offsetsection=0\n"); */ - Assert(grib_handle_of_accessor(a)->loader); + Assert(grib_handle_of_accessor(this)->loader); return 0; } return seclen - (offsetdata - offsetsection); } -void grib_accessor_class_values_t::init(grib_accessor* a, const long v, grib_arguments* params) +void grib_accessor_values_t::init(const long v, grib_arguments* params) { - grib_accessor_class_gen_t::init(a, v, params); - grib_accessor_values_t* self = (grib_accessor_values_t*)a; - self->carg = 0; + grib_accessor_gen_t::init(v, params); + carg_ = 0; - self->seclen = grib_arguments_get_name(grib_handle_of_accessor(a), params, self->carg++); - self->offsetdata = grib_arguments_get_name(grib_handle_of_accessor(a), params, self->carg++); - self->offsetsection = grib_arguments_get_name(grib_handle_of_accessor(a), params, self->carg++); - self->dirty = 1; + seclen_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, carg_++); + offsetdata_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, carg_++); + offsetsection_ = grib_arguments_get_name(grib_handle_of_accessor(this), params, carg_++); + values_dirty_ = 1; - a->length = init_length(a); - /* Assert(a->length>=0); */ + length_ = init_length(); + /* Assert(length_ >=0); */ } -int grib_accessor_class_values_t::get_native_type(grib_accessor* a) +long grib_accessor_values_t::get_native_type() { return GRIB_TYPE_DOUBLE; } -void grib_accessor_class_values_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_values_t::dump(grib_dumper* dumper) { - grib_dump_values(dumper, a); + grib_dump_values(dumper, this); } -long grib_accessor_class_values_t::byte_count(grib_accessor* a) +long grib_accessor_values_t::byte_count() { - grib_context_log(a->context, GRIB_LOG_DEBUG, "byte_count of %s = %ld", a->name, a->length); - return a->length; + grib_context_log(context_, GRIB_LOG_DEBUG, "byte_count of %s = %ld", name_, length_); + return length_; } -long grib_accessor_class_values_t::byte_offset(grib_accessor* a) +long grib_accessor_values_t::byte_offset() { - return a->offset; + return offset_; } -long grib_accessor_class_values_t::next_offset(grib_accessor* a) +long grib_accessor_values_t::next_offset() { - return a->offset + a->length; + return offset_ + length_; } -void grib_accessor_class_values_t::update_size(grib_accessor* a, size_t s) +void grib_accessor_values_t::update_size(size_t s) { - grib_context_log(a->context, GRIB_LOG_DEBUG, "updating size of %s old %ld new %ld", a->name, a->length, s); - a->length = s; - Assert(a->length >= 0); + grib_context_log(context_, GRIB_LOG_DEBUG, "updating size of %s old %ld new %ld", name_, length_, s); + length_ = s; + Assert(length_ >= 0); } -int grib_accessor_class_values_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_values_t::compare(grib_accessor* b) { int retval = 0; double* aval = 0; @@ -105,44 +102,46 @@ int grib_accessor_class_values_t::compare(grib_accessor* a, grib_accessor* b) int err = 0; long count = 0; - err = a->value_count(&count); if (err) + err = value_count(&count); + if (err) return err; alen = count; - err = b->value_count(&count); if (err) + err = b->value_count(&count); + if (err) return err; blen = count; if (alen != blen) return GRIB_COUNT_MISMATCH; - aval = (double*)grib_context_malloc(a->context, alen * sizeof(double)); - bval = (double*)grib_context_malloc(b->context, blen * sizeof(double)); + aval = (double*)grib_context_malloc(context_, alen * sizeof(double)); + bval = (double*)grib_context_malloc(b->context_, blen * sizeof(double)); - a->unpack_double(aval, &alen); b->unpack_double(bval, &blen); + unpack_double(aval, &alen); + b->unpack_double(bval, &blen); retval = GRIB_SUCCESS; - for (size_t i=0; icontext, aval); - grib_context_free(b->context, bval); + grib_context_free(context_, aval); + grib_context_free(b->context_, bval); return retval; } -int grib_accessor_class_values_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_values_t::pack_long(const long* val, size_t* len) { - grib_accessor_values_t* self = (grib_accessor_values_t*)a; - double* dval = (double*)grib_context_malloc(a->context, *len * sizeof(double)); + double* dval = (double*)grib_context_malloc(context_, *len * sizeof(double)); for (size_t i = 0; i < *len; i++) dval[i] = (double)val[i]; - int ret = a->pack_double(dval, len); - grib_context_free(a->context, dval); + int ret = pack_double(dval, len); + grib_context_free(context_, dval); - self->dirty = 1; + values_dirty_ = 1; return ret; } diff --git a/src/accessor/grib_accessor_class_values.h b/src/accessor/grib_accessor_class_values.h index bbe42bead..a0d50c234 100644 --- a/src/accessor/grib_accessor_class_values.h +++ b/src/accessor/grib_accessor_class_values.h @@ -15,25 +15,26 @@ class grib_accessor_values_t : public grib_accessor_gen_t { public: - int carg; - const char* seclen; - const char* offsetdata; - const char* offsetsection; - int dirty; -}; - -class grib_accessor_class_values_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_values_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_values_t() : + grib_accessor_gen_t() { class_name_ = "values"; } // grib_accessor* create_empty_accessor() override { return new grib_accessor_values_t{}; } - int get_native_type(grib_accessor*) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - long byte_count(grib_accessor*) override; - long byte_offset(grib_accessor*) override; - long next_offset(grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - void update_size(grib_accessor*, size_t) override; - int compare(grib_accessor*, grib_accessor*) override; + long get_native_type() override; + int pack_long(const long* val, size_t* len) override; + long byte_count() override; + long byte_offset() override; + long next_offset() override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + void update_size(size_t) override; + int compare(grib_accessor*) override; + +protected: + int carg_ = 0; + const char* seclen_ = nullptr; + const char* offsetdata_ = nullptr; + const char* offsetsection_ = nullptr; + int values_dirty_ = 0; + +private: + long init_length(); }; diff --git a/src/accessor/grib_accessor_class_variable.cc b/src/accessor/grib_accessor_class_variable.cc index b87798663..1fbc899d6 100644 --- a/src/accessor/grib_accessor_class_variable.cc +++ b/src/accessor/grib_accessor_class_variable.cc @@ -11,9 +11,8 @@ #include "grib_accessor_class_variable.h" #include - -grib_accessor_class_variable_t _grib_accessor_class_variable{"variable"}; -grib_accessor_class* grib_accessor_class_variable = &_grib_accessor_class_variable; +grib_accessor_variable_t _grib_accessor_variable{}; +grib_accessor* grib_accessor_variable = &_grib_accessor_variable; // // This accessor is used for: @@ -23,33 +22,36 @@ grib_accessor_class* grib_accessor_class_variable = &_grib_accessor_class_variab #define MAX_VARIABLE_STRING_LENGTH 255 -void grib_accessor_class_variable_t::init(grib_accessor* a, const long length, grib_arguments* args) +void grib_accessor_variable_t::init(const long length, grib_arguments* args) { - grib_accessor_class_gen_t::init(a, length, args); + grib_accessor_gen_t::init(length, args); - grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; - grib_handle* hand = grib_handle_of_accessor(a); - grib_expression* expression = grib_arguments_get_expression(hand, args, 0); - const char* p = 0; - size_t len = 1; - long l = 0; - int ret = 0; - double d = 0; - self->cname = NULL; + grib_handle* hand = grib_handle_of_accessor(this); + grib_expression* expression = grib_arguments_get_expression(hand, args, 0); + const char* p = 0; + size_t len = 1; + long l = 0; + int ret = 0; + double d = 0; + cname_ = NULL; + dval_ = 0; + fval_ = 0; + cval_ = NULL; + type_ = GRIB_TYPE_UNDEFINED; - a->length = 0; - if (self->type == GRIB_TYPE_UNDEFINED && expression) { - self->type = grib_expression_native_type(hand, expression); + length_ = 0; + if (type_ == GRIB_TYPE_UNDEFINED && expression) { + type_ = grib_expression_native_type(hand, expression); - switch (self->type) { + switch (type_) { case GRIB_TYPE_DOUBLE: grib_expression_evaluate_double(hand, expression, &d); - a->pack_double(&d, &len); + pack_double(&d, &len); break; case GRIB_TYPE_LONG: grib_expression_evaluate_long(hand, expression, &l); - a->pack_long(&l, &len); + pack_long(&l, &len); break; default: { @@ -57,191 +59,175 @@ void grib_accessor_class_variable_t::init(grib_accessor* a, const long length, g len = sizeof(tmp); p = grib_expression_evaluate_string(hand, expression, tmp, &len, &ret); if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to evaluate %s as string: %s", - a->name, grib_get_error_message(ret)); + grib_context_log(context_, GRIB_LOG_ERROR, "Unable to evaluate %s as string: %s", + name_, grib_get_error_message(ret)); return; } len = strlen(p) + 1; - a->pack_string(p, &len); + pack_string(p, &len); break; } } } } -void accessor_variable_set_type(grib_accessor* a, int type) +void grib_accessor_variable_t::accessor_variable_set_type(int type) { - grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; - self->type = type; + type_ = type; } -void grib_accessor_class_variable_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_variable_t::dump(grib_dumper* dumper) { - const grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; - switch (self->type) { + switch (type_) { case GRIB_TYPE_DOUBLE: - grib_dump_double(dumper, a, NULL); + grib_dump_double(dumper, this, NULL); break; case GRIB_TYPE_LONG: - grib_dump_long(dumper, a, NULL); + grib_dump_long(dumper, this, NULL); break; default: - grib_dump_string(dumper, a, NULL); + grib_dump_string(dumper, this, NULL); break; } } -int grib_accessor_class_variable_t::pack_double(grib_accessor* a, const double* val, size_t* len) +int grib_accessor_variable_t::pack_double(const double* val, size_t* len) { - grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; const double dval = *val; if (*len != 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains 1 value", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s, it contains 1 value", name_); *len = 1; return GRIB_ARRAY_TOO_SMALL; } - //if (std::isnan(dval)) { - // grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Invalid number for %s: %g", __func__, a->name, dval); - // return GRIB_INVALID_ARGUMENT; - //} + // if (std::isnan(dval)) { + // grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Invalid number for %s: %g", __func__, name_ , dval); + // return GRIB_INVALID_ARGUMENT; + // } - self->dval = dval; + dval_ = dval; if (dval < (double)LONG_MIN || dval > (double)LONG_MAX) - self->type = GRIB_TYPE_DOUBLE; + type_ = GRIB_TYPE_DOUBLE; else - self->type = ((long)dval == dval) ? GRIB_TYPE_LONG : GRIB_TYPE_DOUBLE; + type_ = ((long)dval == dval) ? GRIB_TYPE_LONG : GRIB_TYPE_DOUBLE; return GRIB_SUCCESS; } -int grib_accessor_class_variable_t::pack_float(grib_accessor* a, const float* val, size_t* len) +int grib_accessor_variable_t::pack_float(const float* val, size_t* len) { - grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; const double fval = *val; if (*len != 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains 1 value", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s, it contains 1 value", name_); *len = 1; return GRIB_ARRAY_TOO_SMALL; } - self->fval = fval; + fval_ = fval; if (fval < (float)LONG_MIN || fval > (float)LONG_MAX) - self->type = GRIB_TYPE_DOUBLE; + type_ = GRIB_TYPE_DOUBLE; else - self->type = ((long)fval == fval) ? GRIB_TYPE_LONG : GRIB_TYPE_DOUBLE; + type_ = ((long)fval == fval) ? GRIB_TYPE_LONG : GRIB_TYPE_DOUBLE; return GRIB_SUCCESS; } -int grib_accessor_class_variable_t::pack_long(grib_accessor* a, const long* val, size_t* len) +int grib_accessor_variable_t::pack_long(const long* val, size_t* len) { - grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; - if (*len != 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains 1 value", a->name); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s it contains 1 value", name_); *len = 1; return GRIB_ARRAY_TOO_SMALL; } - self->dval = *val; - self->fval = *val; - self->type = GRIB_TYPE_LONG; + dval_ = *val; + fval_ = *val; + type_ = GRIB_TYPE_LONG; return GRIB_SUCCESS; } -int grib_accessor_class_variable_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_variable_t::unpack_double(double* val, size_t* len) { - const grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; - if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", a->name, 1); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", name_, 1); *len = 0; return GRIB_ARRAY_TOO_SMALL; } - *val = self->dval; + *val = dval_; *len = 1; return GRIB_SUCCESS; } -int grib_accessor_class_variable_t::unpack_float(grib_accessor* a, float* val, size_t* len) +int grib_accessor_variable_t::unpack_float(float* val, size_t* len) { - const grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; - if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", a->name, 1); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", name_, 1); *len = 0; return GRIB_ARRAY_TOO_SMALL; } - *val = self->fval; + *val = fval_; *len = 1; return GRIB_SUCCESS; } -int grib_accessor_class_variable_t::unpack_long(grib_accessor* a, long* val, size_t* len) +int grib_accessor_variable_t::unpack_long(long* val, size_t* len) { - const grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; - if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); + grib_context_log(context_, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", name_, 1); *len = 0; return GRIB_ARRAY_TOO_SMALL; } - *val = (long)self->dval; + *val = (long)dval_; *len = 1; return GRIB_SUCCESS; } -int grib_accessor_class_variable_t::get_native_type(grib_accessor* a) +long grib_accessor_variable_t::get_native_type() { - const grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; - return self->type; + return type_; } -void grib_accessor_class_variable_t::destroy(grib_context* c, grib_accessor* a) +void grib_accessor_variable_t::destroy(grib_context* c) { - grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; - int i = 0; + int i = 0; - grib_context_free(c, self->cval); - if (self->cname) - grib_context_free(c, self->cname); /* ECC-765 */ + grib_context_free(c, cval_); + if (cname_) + grib_context_free(c, cname_); /* ECC-765 */ /* Note: BUFR operator descriptors are variables and have attributes so need to free them */ - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { - a->attributes[i]->destroy(c); - a->attributes[i] = NULL; + while (i < MAX_ACCESSOR_ATTRIBUTES && attributes_[i]) { + attributes_[i]->destroy(c); + attributes_[i] = NULL; ++i; } - grib_accessor_class_gen_t::destroy(c, a); + grib_accessor_gen_t::destroy(c); } -int grib_accessor_class_variable_t::unpack_string(grib_accessor* a, char* val, size_t* len) +int grib_accessor_variable_t::unpack_string(char* val, size_t* len) { - grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; - char buf[80]; - char* p = buf; + char* p = buf; size_t slen = 0; - if (self->type == GRIB_TYPE_STRING) { - p = self->cval; + if (type_ == GRIB_TYPE_STRING) { + p = cval_; } else { - snprintf(p, 64, "%g", self->dval); + snprintf(p, 64, "%g", dval_); } slen = strlen(p) + 1; if (*len < slen) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(context_, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", - a->cclass->name, a->name, slen, *len); + class_name_, name_, slen, *len); *len = slen; return GRIB_BUFFER_TOO_SMALL; } @@ -251,41 +237,39 @@ int grib_accessor_class_variable_t::unpack_string(grib_accessor* a, char* val, s return GRIB_SUCCESS; } -int grib_accessor_class_variable_t::pack_string(grib_accessor* a, const char* val, size_t* len) +int grib_accessor_variable_t::pack_string(const char* val, size_t* len) { - grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; - const grib_context* c = a->context; + const grib_context* c = context_; - grib_context_free(c, self->cval); - self->cval = grib_context_strdup(c, val); - self->dval = atof(val); - self->fval = atof(val); - self->type = GRIB_TYPE_STRING; - self->cname = NULL; + grib_context_free(c, cval_); + cval_ = grib_context_strdup(c, val); + dval_ = atof(val); + fval_ = atof(val); + type_ = GRIB_TYPE_STRING; + cname_ = NULL; return GRIB_SUCCESS; } -int grib_accessor_class_variable_t::value_count(grib_accessor* a, long* count) +int grib_accessor_variable_t::value_count(long* count) { *count = 1; return 0; } -size_t grib_accessor_class_variable_t::string_length(grib_accessor* a) +size_t grib_accessor_variable_t::string_length() { - const grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; - if (self->type == GRIB_TYPE_STRING) - return strlen(self->cval); + if (type_ == GRIB_TYPE_STRING) + return strlen(cval_); else return MAX_VARIABLE_STRING_LENGTH; } -long grib_accessor_class_variable_t::byte_count(grib_accessor* a) +long grib_accessor_variable_t::byte_count() { - return a->length; + return length_; } -int grib_accessor_class_variable_t::compare(grib_accessor* a, grib_accessor* b) +int grib_accessor_variable_t::compare(grib_accessor* b) { int retval = GRIB_SUCCESS; double* aval = 0; @@ -296,7 +280,7 @@ int grib_accessor_class_variable_t::compare(grib_accessor* a, grib_accessor* b) int err = 0; long count = 0; - err = a->value_count(&count); + err = value_count(&count); if (err) return err; alen = count; @@ -309,50 +293,50 @@ int grib_accessor_class_variable_t::compare(grib_accessor* a, grib_accessor* b) if (alen != blen) return GRIB_COUNT_MISMATCH; - aval = (double*)grib_context_malloc(a->context, alen * sizeof(double)); - bval = (double*)grib_context_malloc(b->context, blen * sizeof(double)); + aval = (double*)grib_context_malloc(context_, alen * sizeof(double)); + bval = (double*)grib_context_malloc(b->context_, blen * sizeof(double)); - a->unpack_double(aval, &alen); + unpack_double(aval, &alen); b->unpack_double(bval, &blen); retval = GRIB_SUCCESS; - retval = GRIB_SUCCESS; - for (size_t i=0; icontext, aval); - grib_context_free(b->context, bval); + grib_context_free(context_, aval); + grib_context_free(b->context_, bval); return retval; } -grib_accessor* grib_accessor_class_variable_t::make_clone(grib_accessor* a, grib_section* s, int* err) +grib_accessor* grib_accessor_variable_t::make_clone(grib_section* s, int* err) { - grib_accessor* the_clone = NULL; - const grib_accessor_variable_t* self = (grib_accessor_variable_t*)a; + grib_accessor* the_clone = NULL; grib_accessor_variable_t* variableAccessor = NULL; - grib_action creator = {0,}; - creator.op = (char*)"variable"; + grib_action creator = { + 0, + }; + creator.op = (char*)"variable"; creator.name_space = (char*)""; - creator.set = 0; + creator.set = 0; - creator.name = grib_context_strdup(a->context, a->name); - the_clone = grib_accessor_factory(s, &creator, 0, NULL); - the_clone->parent = NULL; - the_clone->h = s->h; - the_clone->flags = a->flags; - variableAccessor = (grib_accessor_variable_t*)the_clone; - variableAccessor->cname = creator.name; /* ECC-765: Store for later freeing memory */ + creator.name = grib_context_strdup(context_, name_); + the_clone = grib_accessor_factory(s, &creator, 0, NULL); + the_clone->parent_ = NULL; + the_clone->h_ = s->h; + the_clone->flags_ = flags_; + variableAccessor = (grib_accessor_variable_t*)the_clone; + variableAccessor->cname_ = creator.name; /* ECC-765: Store for later freeing memory */ - *err = 0; - variableAccessor->type = self->type; - if (self->type == GRIB_TYPE_STRING && self->cval != NULL) { - variableAccessor->cval = grib_context_strdup(a->context, self->cval); + *err = 0; + variableAccessor->type_ = type_; + if (type_ == GRIB_TYPE_STRING && cval_ != NULL) { + variableAccessor->cval_ = grib_context_strdup(context_, cval_); } else { - variableAccessor->dval = self->dval; - variableAccessor->fval = self->fval; + variableAccessor->dval_ = dval_; + variableAccessor->fval_ = fval_; } return the_clone; diff --git a/src/accessor/grib_accessor_class_variable.h b/src/accessor/grib_accessor_class_variable.h index 90ff71238..3c05887ef 100644 --- a/src/accessor/grib_accessor_class_variable.h +++ b/src/accessor/grib_accessor_class_variable.h @@ -13,37 +13,35 @@ #include "grib_accessor.h" #include "grib_accessor_class_gen.h" - class grib_accessor_variable_t : public grib_accessor_gen_t { public: - double dval; - float fval; - char* cval; - char* cname; - int type; -}; - -class grib_accessor_class_variable_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_variable_t(const char* name) : grib_accessor_class_gen_t(name) {}; + grib_accessor_variable_t() : + grib_accessor_gen_t() { class_name_ = "variable"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_variable_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int pack_float(grib_accessor*, const float* val, size_t* len) override; - int pack_long(grib_accessor*, const long* val, size_t* len) override; - int pack_string(grib_accessor*, const char*, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int unpack_float(grib_accessor*, float* val, size_t* len) override; - int unpack_long(grib_accessor*, long* val, size_t* len) override; - int unpack_string(grib_accessor*, char*, size_t* len) override; - size_t string_length(grib_accessor*) override; - long byte_count(grib_accessor*) override; - int value_count(grib_accessor*, long*) override; - void destroy(grib_context*, grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int compare(grib_accessor*, grib_accessor*) override; - grib_accessor* make_clone(grib_accessor*, grib_section*, int*) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int pack_float(const float* val, size_t* len) override; + int pack_long(const long* val, size_t* len) override; + int pack_string(const char*, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int unpack_float(float* val, size_t* len) override; + int unpack_long(long* val, size_t* len) override; + int unpack_string(char*, size_t* len) override; + size_t string_length() override; + long byte_count() override; + int value_count(long*) override; + void destroy(grib_context*) override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + int compare(grib_accessor*) override; + grib_accessor* make_clone(grib_section*, int*) override; + + void accessor_variable_set_type(int type); +private: + double dval_ = 0.; + float fval_ = 0.f; + char* cval_ = nullptr; + char* cname_ = nullptr; + int type_ = 0; }; diff --git a/src/accessor/grib_accessor_class_vector.cc b/src/accessor/grib_accessor_class_vector.cc index d9ae76406..1c0526641 100644 --- a/src/accessor/grib_accessor_class_vector.cc +++ b/src/accessor/grib_accessor_class_vector.cc @@ -11,53 +11,50 @@ #include "grib_accessor_class_vector.h" #include "grib_accessor_class_abstract_vector.h" -grib_accessor_class_vector_t _grib_accessor_class_vector{ "vector" }; -grib_accessor_class* grib_accessor_class_vector = &_grib_accessor_class_vector; +grib_accessor_vector_t _grib_accessor_vector{}; +grib_accessor* grib_accessor_vector = &_grib_accessor_vector; - -void grib_accessor_class_vector_t::init(grib_accessor* a, const long l, grib_arguments* c) +void grib_accessor_vector_t::init(const long l, grib_arguments* c) { - grib_accessor_class_abstract_vector_t::init(a, l, c); - grib_accessor_vector_t* self = (grib_accessor_vector_t*)a; + grib_accessor_abstract_vector_t::init(l, c); int n = 0; - self->vector = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->index = grib_arguments_get_long(grib_handle_of_accessor(a), c, n++); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length = 0; + vector_ = grib_arguments_get_name(grib_handle_of_accessor(this), c, n++); + index_ = grib_arguments_get_long(grib_handle_of_accessor(this), c, n++); + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; + flags_ |= GRIB_ACCESSOR_FLAG_FUNCTION; + length_ = 0; } -int grib_accessor_class_vector_t::unpack_double(grib_accessor* a, double* val, size_t* len) +int grib_accessor_vector_t::unpack_double(double* val, size_t* len) { int err = 0; size_t size = 0; double* stat; - grib_accessor_vector_t* self = (grib_accessor_vector_t*)a; - grib_accessor* va = (grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a), self->vector); + grib_accessor* va = (grib_accessor*)grib_find_accessor(grib_handle_of_accessor(this), vector_); grib_accessor_abstract_vector_t* v = (grib_accessor_abstract_vector_t*)va; - Assert(self->index >= 0); + Assert(index_ >= 0); - if (self->index >= v->number_of_elements) { - grib_context_log(a->context, GRIB_LOG_FATAL, "index=%d number_of_elements=%d for %s", self->index, v->number_of_elements, a->name); - Assert(self->index < v->number_of_elements); + if (index_ >= v->number_of_elements_) { + grib_context_log(context_, GRIB_LOG_FATAL, "index=%d number_of_elements=%d for %s", index_, v->number_of_elements_, name_); + Assert(index_ < v->number_of_elements_); } - if (va->dirty) { - //printf("\ngrib_accessor_class_vector_t::unpack_double accessor=%s is DIRTY\n",a->name); - grib_get_size(grib_handle_of_accessor(a), self->vector, &size); - stat = (double*)grib_context_malloc_clear(a->context, sizeof(double) * size); + if (va->dirty_) { + // printf("\ngrib_accessor_class_vector_t::unpack_double accessor=%s is DIRTY\n", name_); + grib_get_size(grib_handle_of_accessor(this), vector_, &size); + stat = (double*)grib_context_malloc_clear(context_, sizeof(double) * size); err = va->unpack_double(stat, &size); - grib_context_free(a->context, stat); + grib_context_free(context_, stat); if (err) return err; } else { - //printf("\ngrib_accessor_class_vector_t::unpack_double accessor=%s is CLEAN\n",a->name); + // printf("\ngrib_accessor_class_vector_t::unpack_double accessor=%s is CLEAN\n",a->name); } - *val = v->v[self->index]; + *val = v->v_[index_]; return err; } diff --git a/src/accessor/grib_accessor_class_vector.h b/src/accessor/grib_accessor_class_vector.h index 92dc6a13e..2d3a44cf7 100644 --- a/src/accessor/grib_accessor_class_vector.h +++ b/src/accessor/grib_accessor_class_vector.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,13 @@ class grib_accessor_vector_t : public grib_accessor_abstract_vector_t { public: - /* Members defined in vector */ - const char* vector; - int index; -}; - -class grib_accessor_class_vector_t : public grib_accessor_class_abstract_vector_t -{ -public: - grib_accessor_class_vector_t(const char* name) : grib_accessor_class_abstract_vector_t(name) {} + grib_accessor_vector_t() : + grib_accessor_abstract_vector_t() { class_name_ = "vector"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_vector_t{}; } - int unpack_double(grib_accessor*, double* val, size_t* len) override; - void init(grib_accessor*, const long, grib_arguments*) override; + int unpack_double(double* val, size_t* len) override; + void init(const long, grib_arguments*) override; + +private: + const char* vector_ = nullptr; + int index_ = 0; }; diff --git a/src/accessor/grib_accessor_class_when.cc b/src/accessor/grib_accessor_class_when.cc index a17f111ea..ecbd7b4db 100644 --- a/src/accessor/grib_accessor_class_when.cc +++ b/src/accessor/grib_accessor_class_when.cc @@ -10,29 +10,28 @@ #include "grib_accessor_class_when.h" -grib_accessor_class_when_t _grib_accessor_class_when{ "when" }; -grib_accessor_class* grib_accessor_class_when = &_grib_accessor_class_when; +grib_accessor_when_t _grib_accessor_when{}; +grib_accessor* grib_accessor_when = &_grib_accessor_when; - -void grib_accessor_class_when_t::init(grib_accessor* a, const long len, grib_arguments* arg) +void grib_accessor_when_t::init(const long len, grib_arguments* arg) { - grib_accessor_class_gen_t::init(a, len, arg); - a->length = 0; - a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_gen_t::init(len, arg); + length_ = 0; + flags_ |= GRIB_ACCESSOR_FLAG_HIDDEN; + flags_ |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -void grib_accessor_class_when_t::dump(grib_accessor* a, grib_dumper* dumper) +void grib_accessor_when_t::dump(grib_dumper* dumper) { /* grib_dump_when(dumper,a,NULL); */ } -int grib_accessor_class_when_t::notify_change(grib_accessor* a, grib_accessor* changed) +int grib_accessor_when_t::notify_change(grib_accessor* changed) { - return grib_action_notify_change(a->creator, a, changed); + return grib_action_notify_change(creator_, this, changed); } -int grib_accessor_class_when_t::get_native_type(grib_accessor* a) +long grib_accessor_when_t::get_native_type() { return GRIB_TYPE_UNDEFINED; } diff --git a/src/accessor/grib_accessor_class_when.h b/src/accessor/grib_accessor_class_when.h index 515afb4b1..ae8f89ccc 100644 --- a/src/accessor/grib_accessor_class_when.h +++ b/src/accessor/grib_accessor_class_when.h @@ -1,4 +1,3 @@ - /* * (C) Copyright 2005- ECMWF. * @@ -16,16 +15,11 @@ class grib_accessor_when_t : public grib_accessor_gen_t { public: - /* Members defined in when */ -}; - -class grib_accessor_class_when_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_when_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_when_t() : + grib_accessor_gen_t() { class_name_ = "when"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_when_t{}; } - int get_native_type(grib_accessor*) override; - void dump(grib_accessor*, grib_dumper*) override; - void init(grib_accessor*, const long, grib_arguments*) override; - int notify_change(grib_accessor*, grib_accessor*) override; + long get_native_type() override; + void dump(grib_dumper*) override; + void init(const long, grib_arguments*) override; + int notify_change(grib_accessor* changed) override; }; diff --git a/src/accessor/grib_accessors_list.cc b/src/accessor/grib_accessors_list.cc index 173077e69..b5aec4e9d 100644 --- a/src/accessor/grib_accessors_list.cc +++ b/src/accessor/grib_accessors_list.cc @@ -27,8 +27,8 @@ void grib_accessors_list_delete(grib_context* c, grib_accessors_list* al) int grib_accessors_list::value_count(size_t* count) { - long lcount = 0; - *count = 0; + long lcount = 0; + *count = 0; grib_accessors_list* al = this; while (al) { al->accessor->value_count(&lcount); @@ -40,16 +40,15 @@ int grib_accessors_list::value_count(size_t* count) void grib_accessors_list::push(grib_accessor* a, int rank) { - grib_accessors_list* last; - const grib_context* c = a->context; + const grib_context* c = a->context_; - last = this->last(); - if (last && last->accessor) { - last->next_ = (grib_accessors_list*)grib_context_malloc_clear(c, sizeof(grib_accessors_list)); - last->next_->accessor = a; - last->next_->prev_ = last; - last->next_->rank_ = rank; - this->last_ = last->next_; + grib_accessors_list* last_acc = this->last(); + if (last_acc && last_acc->accessor) { + last_acc->next_ = (grib_accessors_list*)grib_context_malloc_clear(c, sizeof(grib_accessors_list)); + last_acc->next_->accessor = a; + last_acc->next_->prev_ = last_acc; + last_acc->next_->rank_ = rank; + this->last_ = last_acc->next_; } else { this->accessor = a; diff --git a/src/accessor/grib_accessors_list.h b/src/accessor/grib_accessors_list.h index e136d955a..cc6eafee2 100644 --- a/src/accessor/grib_accessors_list.h +++ b/src/accessor/grib_accessors_list.h @@ -28,10 +28,11 @@ public: int rank() const { return rank_; } - grib_accessor* accessor = nullptr; + grib_accessor* accessor = nullptr; grib_accessors_list* next_ = nullptr; grib_accessors_list* prev_ = nullptr; grib_accessors_list* last_ = nullptr; + private: int rank_ = 0; }; diff --git a/src/action.cc b/src/action.cc index 026bca74e..a5496c32d 100644 --- a/src/action.cc +++ b/src/action.cc @@ -95,7 +95,6 @@ static void grib_dump(grib_action* a, FILE* f, int l) } c = c->super ? *(c->super) : NULL; } - DEBUG_ASSERT(0); } // void grib_xref(grib_action* a, FILE* f, const char* path) @@ -210,7 +209,27 @@ void grib_dump_action_tree(grib_context* ctx, FILE* out) Assert(ctx->grib_reader); Assert(ctx->grib_reader->first); Assert(out); - grib_dump_action_branch(out, ctx->grib_reader->first->root, 0); + + // grib_dump_action_branch(out, ctx->grib_reader->first->root, 0); + // grib_action* next = ctx->grib_reader->first->root; + // while (next) { + // fprintf(out, "Dump %s\n", next->name); + // grib_dump_action_branch(out, next, 0); + // next = next->next; + // } + + grib_action_file* fr = ctx->grib_reader->first; + grib_action_file* fn = fr; + while (fn) { + fr = fn; + fn = fn->next; + grib_action* a = fr->root; + while (a) { + grib_action* na = a->next; + grib_dump_action_branch(out, a, 0); + a = na; + } + } } // void grib_xref_action_branch(FILE* out, grib_action* a, const char* path) diff --git a/src/action.class b/src/action.class index 772c328c6..704079e07 100644 --- a/src/action.class +++ b/src/action.class @@ -17,20 +17,17 @@ MEMBERS extern grib_action_class* SUPER; static grib_action_class _grib_action_class_NAME = { - &SUPER, /* super */ - "action_class_NAME", /* name */ - sizeof(grib_action_NAME), /* size */ - 0, /* inited */ + &SUPER, /* super */ + "action_class_NAME", /* name */ + sizeof(grib_action_NAME), /* size */ + 0, /* inited */ &init_class, /* init_class */ - &init, /* init */ + &init, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - &xref, /* xref */ - - &create_accessor, /* create_accessor*/ - - ¬ify_change, /* notify_change */ + &dump, /* dump */ + &xref, /* xref */ + &create_accessor, /* create_accessor */ + ¬ify_change, /* notify_change */ &reparse, /* reparse */ &execute, /* execute */ }; diff --git a/src/action_class_alias.cc b/src/action_class_alias.cc index bcc2f799c..91f6cf28f 100644 --- a/src/action_class_alias.cc +++ b/src/action_class_alias.cc @@ -49,20 +49,17 @@ typedef struct grib_action_alias { static grib_action_class _grib_action_class_alias = { - 0, /* super */ - "action_class_alias", /* name */ - sizeof(grib_action_alias), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_alias", /* name */ + sizeof(grib_action_alias), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - &create_accessor, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + &create_accessor, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ 0, /* execute */ }; @@ -137,19 +134,19 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) return GRIB_SUCCESS; } - if (x->name_space == NULL) - x->name_space = act->name_space; + if (x->name_space_ == NULL) + x->name_space_ = act->name_space; grib_context_log(p->h->context, GRIB_LOG_DEBUG, "alias: add only namespace: %s.%s", act->name_space, act->name); i = 0; while (i < MAX_ACCESSOR_NAMES) { - if (x->all_names[i] != NULL && !grib_inline_strcmp(x->all_names[i], act->name)) { - if (x->all_name_spaces[i] == NULL) { - x->all_name_spaces[i] = act->name_space; + if (x->all_names_[i] != NULL && !grib_inline_strcmp(x->all_names_[i], act->name)) { + if (x->all_name_spaces_[i] == NULL) { + x->all_name_spaces_[i] = act->name_space; return GRIB_SUCCESS; } - else if (!grib_inline_strcmp(x->all_name_spaces[i], act->name_space)) { + else if (!grib_inline_strcmp(x->all_name_spaces_[i], act->name_space)) { return GRIB_SUCCESS; } } @@ -157,9 +154,9 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) } i = 0; while (i < MAX_ACCESSOR_NAMES) { - if (x->all_names[i] == NULL) { - x->all_names[i] = act->name; - x->all_name_spaces[i] = act->name_space; + if (x->all_names_[i] == NULL) { + x->all_names_[i] = act->name; + x->all_name_spaces_[i] = act->name_space; return GRIB_SUCCESS; } i++; @@ -175,20 +172,34 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) /* delete old alias if already defined */ if (y != NULL) { i = 0; - while (i < MAX_ACCESSOR_NAMES && y->all_names[i]) { - if (same(y->all_names[i], act->name) && same(y->all_name_spaces[i], act->name_space)) { + while (i < MAX_ACCESSOR_NAMES && y->all_names_[i]) { + if (same(y->all_names_[i], act->name) && same(y->all_name_spaces_[i], act->name_space)) { grib_context_log(p->h->context, GRIB_LOG_DEBUG, "alias %s.%s already defined for %s. Deleting old alias", - act->name_space, act->name, y->name); - /* printf("[%s %s]\n",y->all_names[i], y->all_name_spaces[i]); */ + act->name_space, act->name, y->name_); + /* printf("[%s %s]\n",y->all_names_[i], y->all_name_spaces_[i]); */ + + /* + * ECC-1898: Remove accessor from cache + * This workaround was disabled because it was causing problems with the unaliasing mars.step, + * i.e., when unaliasing "mars.step" it also unaliases "step" + */ + + // TODO(maee): Implement a new hash function, which uses the name and the name_space as well + + //grib_handle* hand = grib_handle_of_accessor(y); + //if (hand->use_trie && y->all_name_spaces_[i] != NULL && strcmp(y->name_, act->name) != 0) { + // int id = grib_hash_keys_get_id(hand->context->keys, act->name); + // hand->accessors[id] = NULL; + //} while (i < MAX_ACCESSOR_NAMES - 1) { - y->all_names[i] = y->all_names[i + 1]; - y->all_name_spaces[i] = y->all_name_spaces[i + 1]; + y->all_names_[i] = y->all_names_[i + 1]; + y->all_name_spaces_[i] = y->all_name_spaces_[i + 1]; i++; } - y->all_names[MAX_ACCESSOR_NAMES - 1] = NULL; - y->all_name_spaces[MAX_ACCESSOR_NAMES - 1] = NULL; + y->all_names_[MAX_ACCESSOR_NAMES - 1] = NULL; + y->all_name_spaces_[MAX_ACCESSOR_NAMES - 1] = NULL; break; } @@ -213,7 +224,7 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) hand = grib_handle_of_accessor(x); if (hand->use_trie) { - id = grib_hash_keys_get_id(x->context->keys, act->name); + id = grib_hash_keys_get_id(x->context_->keys, act->name); hand->accessors[id] = x; /* @@ -226,19 +237,19 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) i = 0; while (i < MAX_ACCESSOR_NAMES) { - if (x->all_names[i] == NULL) { + if (x->all_names_[i] == NULL) { /* Only add entries if not already there */ int found = 0; for (j = 0; j < i && !found; ++j) { - int nameSame = same(x->all_names[j], act->name); - int namespaceSame = same(x->all_name_spaces[j], act->name_space); + int nameSame = same(x->all_names_[j], act->name); + int namespaceSame = same(x->all_name_spaces_[j], act->name_space); if (nameSame && namespaceSame) { found = 1; } } if (!found) { /* Not there. So add them */ - x->all_names[i] = act->name; - x->all_name_spaces[i] = act->name_space; + x->all_names_[i] = act->name; + x->all_name_spaces_[i] = act->name_space; grib_context_log(p->h->context, GRIB_LOG_DEBUG, "alias %s.%s added (%s)", act->name_space, act->name, self->target); } @@ -249,7 +260,7 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) for (i = 0; i < MAX_ACCESSOR_NAMES; i++) grib_context_log(p->h->context, GRIB_LOG_ERROR, "alias %s= ( %s already bound to %s )", - act->name, self->target, x->all_names[i]); + act->name, self->target, x->all_names_[i]); return GRIB_SUCCESS; } diff --git a/src/action_class_assert.cc b/src/action_class_assert.cc index b19330505..bc449c7ab 100644 --- a/src/action_class_assert.cc +++ b/src/action_class_assert.cc @@ -49,20 +49,17 @@ typedef struct grib_action_assert { static grib_action_class _grib_action_class_assert = { - 0, /* super */ - "action_class_assert", /* name */ - sizeof(grib_action_assert), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_assert", /* name */ + sizeof(grib_action_assert), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - &create_accessor, /* create_accessor*/ - - ¬ify_change, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + &create_accessor, /* create_accessor */ + ¬ify_change, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; diff --git a/src/action_class_close.cc b/src/action_class_close.cc index dfe635890..8b8db96a0 100644 --- a/src/action_class_close.cc +++ b/src/action_class_close.cc @@ -43,20 +43,17 @@ typedef struct grib_action_close { static grib_action_class _grib_action_class_close = { - 0, /* super */ - "action_class_close", /* name */ - sizeof(grib_action_close), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_close", /* name */ + sizeof(grib_action_close), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - 0, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + 0, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; @@ -68,7 +65,7 @@ static void init_class(grib_action_class* c) } /* END_CLASS_IMP */ -grib_action* grib_action_create_close(grib_context* context, char* filename) +grib_action* grib_action_create_close(grib_context* context, const char* filename) { char buf[1024]; grib_action_close* a; diff --git a/src/action_class_concept.cc b/src/action_class_concept.cc index fa639c54c..17886564b 100644 --- a/src/action_class_concept.cc +++ b/src/action_class_concept.cc @@ -60,20 +60,17 @@ typedef struct grib_action_concept { extern grib_action_class* grib_action_class_gen; static grib_action_class _grib_action_class_concept = { - &grib_action_class_gen, /* super */ - "action_class_concept", /* name */ - sizeof(grib_action_concept), /* size */ - 0, /* inited */ + &grib_action_class_gen, /* super */ + "action_class_concept", /* name */ + sizeof(grib_action_concept), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ 0, /* execute */ }; @@ -122,12 +119,12 @@ static grib_concept_value* get_concept(grib_handle* h, grib_action_concept* self grib_concept_value* action_concept_get_concept(grib_accessor* a) { - return get_concept(grib_handle_of_accessor(a), (grib_action_concept*)a->creator); + return get_concept(grib_handle_of_accessor(a), (grib_action_concept*)a->creator_); } int action_concept_get_nofail(grib_accessor* a) { - const grib_action_concept* self = (grib_action_concept*)a->creator; + const grib_action_concept* self = (grib_action_concept*)a->creator_; return self->nofail; } @@ -221,10 +218,9 @@ static grib_concept_value* get_concept_impl(grib_handle* h, grib_action_concept* char master[1024] = {0,}; char local[1024] = {0,}; char masterDir[1024] = {0,}; - size_t lenMasterDir = 1024; + size_t lenMasterDir = sizeof(masterDir); char key[4096] = {0,}; char* full = 0; - int id; const size_t bufLen = sizeof(buf); const size_t keyLen = sizeof(key); @@ -237,7 +233,15 @@ static grib_concept_value* get_concept_impl(grib_handle* h, grib_action_concept* Assert(self->masterDir); grib_get_string(h, self->masterDir, masterDir, &lenMasterDir); - snprintf(buf, bufLen, "%s/%s", masterDir, self->basename); + // See ECC-1920: The basename could be a key or a string + char* basename = self->basename; // default is a string + Assert(basename); + char baseNameValue[1024] = {0,}; // its value if a key + size_t lenBaseName = sizeof(baseNameValue); + if (grib_get_string(h, self->basename, baseNameValue, &lenBaseName) == GRIB_SUCCESS) { + basename = baseNameValue; // self->basename was a key whose value is baseNameValue + } + snprintf(buf, bufLen, "%s/%s", masterDir, basename); grib_recompose_name(h, NULL, buf, master, 1); @@ -245,13 +249,13 @@ static grib_concept_value* get_concept_impl(grib_handle* h, grib_action_concept* char localDir[1024] = {0,}; size_t lenLocalDir = 1024; grib_get_string(h, self->localDir, localDir, &lenLocalDir); - snprintf(buf, bufLen, "%s/%s", localDir, self->basename); + snprintf(buf, bufLen, "%s/%s", localDir, basename); grib_recompose_name(h, NULL, buf, local, 1); } snprintf(key, keyLen, "%s%s", master, local); - id = grib_itrie_get_id(h->context->concepts_index, key); + int id = grib_itrie_get_id(h->context->concepts_index, key); if ((c = h->context->concepts[id]) != NULL) return c; @@ -277,7 +281,7 @@ static grib_concept_value* get_concept_impl(grib_handle* h, grib_action_concept* else { grib_context_log(context, GRIB_LOG_FATAL, "unable to find definition file %s in %s:%s\nDefinition files path=\"%s\"", - self->basename, master, local, context->grib_definition_files_path); + basename, master, local, context->grib_definition_files_path); return NULL; } diff --git a/src/action_class_gen.cc b/src/action_class_gen.cc index 722391c7f..eaf1627ff 100644 --- a/src/action_class_gen.cc +++ b/src/action_class_gen.cc @@ -54,20 +54,17 @@ typedef struct grib_action_gen { static grib_action_class _grib_action_class_gen = { - 0, /* super */ - "action_class_gen", /* name */ - sizeof(grib_action_gen), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_gen", /* name */ + sizeof(grib_action_gen), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - &create_accessor, /* create_accessor*/ - - ¬ify_change, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + &create_accessor, /* create_accessor */ + ¬ify_change, /* notify_change */ 0, /* reparse */ 0, /* execute */ }; @@ -140,7 +137,7 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* loade grib_push_accessor(ga, p->block); - if (ga->flags & GRIB_ACCESSOR_FLAG_CONSTRAINT) + if (ga->flags_ & GRIB_ACCESSOR_FLAG_CONSTRAINT) grib_dependency_observe_arguments(ga, act->default_value); if (loader == NULL) diff --git a/src/action_class_hash_array.cc b/src/action_class_hash_array.cc index 9a61f9e56..55e87ddda 100644 --- a/src/action_class_hash_array.cc +++ b/src/action_class_hash_array.cc @@ -61,20 +61,17 @@ typedef struct grib_action_hash_array { extern grib_action_class* grib_action_class_gen; static grib_action_class _grib_action_class_hash_array = { - &grib_action_class_gen, /* super */ - "action_class_hash_array", /* name */ - sizeof(grib_action_hash_array), /* size */ - 0, /* inited */ + &grib_action_class_gen, /* super */ + "action_class_hash_array", /* name */ + sizeof(grib_action_hash_array), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ 0, /* execute */ }; diff --git a/src/action_class_if.cc b/src/action_class_if.cc index 8a07b901b..5d4140710 100644 --- a/src/action_class_if.cc +++ b/src/action_class_if.cc @@ -61,20 +61,17 @@ typedef struct grib_action_if { extern grib_action_class* grib_action_class_section; static grib_action_class _grib_action_class_if = { - &grib_action_class_section, /* super */ - "action_class_if", /* name */ - sizeof(grib_action_if), /* size */ - 0, /* inited */ + &grib_action_class_section, /* super */ + "action_class_if", /* name */ + sizeof(grib_action_if), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - &create_accessor, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + &create_accessor, /* create_accessor */ + 0, /* notify_change */ &reparse, /* reparse */ &execute, /* execute */ }; @@ -141,7 +138,7 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) as = grib_accessor_factory(p, act, 0, NULL); if (!as) return GRIB_INTERNAL_ERROR; - gs = as->sub_section; + gs = as->sub_section_; grib_push_accessor(as, p->block); if ((ret = grib_expression_evaluate_long(p->h, a->expression, &lres)) != GRIB_SUCCESS) @@ -269,7 +266,7 @@ static grib_action* reparse(grib_action* a, grib_accessor* acc, int* doit) /* printf("reparse %s %s\n",a->name,acc->name); */ if ((ret = grib_expression_evaluate_long(grib_handle_of_accessor(acc), self->expression, &lres)) != GRIB_SUCCESS) - grib_context_log(acc->context, + grib_context_log(acc->context_, GRIB_LOG_ERROR, "action_class_if::reparse: grib_expression_evaluate_long failed: %s", grib_get_error_message(ret)); diff --git a/src/action_class_list.cc b/src/action_class_list.cc index 163a6da55..00f8d1459 100644 --- a/src/action_class_list.cc +++ b/src/action_class_list.cc @@ -56,20 +56,17 @@ typedef struct grib_action_list { extern grib_action_class* grib_action_class_section; static grib_action_class _grib_action_class_list = { - &grib_action_class_section, /* super */ - "action_class_list", /* name */ - sizeof(grib_action_list), /* size */ - 0, /* inited */ + &grib_action_class_section, /* super */ + "action_class_list", /* name */ + sizeof(grib_action_list), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - &create_accessor, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + &create_accessor, /* create_accessor */ + 0, /* notify_change */ &reparse, /* reparse */ 0, /* execute */ }; @@ -115,8 +112,8 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) ga = grib_accessor_factory(p, act, 0, NULL); if (!ga) return GRIB_BUFFER_TOO_SMALL; - gs = ga->sub_section; - ga->loop = val; + gs = ga->sub_section_; + ga->loop_ = val; grib_push_accessor(ga, p->block); @@ -164,11 +161,11 @@ static grib_action* reparse(grib_action* a, grib_accessor* acc, int* doit) int ret = grib_expression_evaluate_long(grib_handle_of_accessor(acc), self->expression, &val); if (ret != GRIB_SUCCESS) { - grib_context_log(acc->context, GRIB_LOG_ERROR, - "List %s creating %ld values: Unable to evaluate long", acc->name, val); + grib_context_log(acc->context_, GRIB_LOG_ERROR, + "List %s creating %ld values: Unable to evaluate long", acc->name_, val); } - *doit = (val != acc->loop); + *doit = (val != acc->loop_); return self->block_list; } diff --git a/src/action_class_meta.cc b/src/action_class_meta.cc index 3b5c375eb..7164593e7 100644 --- a/src/action_class_meta.cc +++ b/src/action_class_meta.cc @@ -51,20 +51,17 @@ typedef struct grib_action_meta { extern grib_action_class* grib_action_class_gen; static grib_action_class _grib_action_class_meta = { - &grib_action_class_gen, /* super */ - "action_class_meta", /* name */ - sizeof(grib_action_meta), /* size */ - 0, /* inited */ + &grib_action_class_gen, /* super */ + "action_class_meta", /* name */ + sizeof(grib_action_meta), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ 0, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; diff --git a/src/action_class_modify.cc b/src/action_class_modify.cc index cc5795559..44583d87c 100644 --- a/src/action_class_modify.cc +++ b/src/action_class_modify.cc @@ -49,20 +49,17 @@ typedef struct grib_action_modify { static grib_action_class _grib_action_class_modify = { - 0, /* super */ - "action_class_modify", /* name */ - sizeof(grib_action_modify), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_modify", /* name */ + sizeof(grib_action_modify), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - 0, /* dump */ - 0, /* xref */ - - &create_accessor, /* create_accessor*/ - - 0, /* notify_change */ + 0, /* dump */ + 0, /* xref */ + &create_accessor, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ 0, /* execute */ }; @@ -102,7 +99,7 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) ga = grib_find_accessor(p->h, a->name); if (ga) { - ga->flags = a->flags; + ga->flags_ = a->flags; } else { grib_context_log(act->context, GRIB_LOG_ERROR, "action_class_modify: %s: No accessor named %s to modify", diff --git a/src/action_class_noop.cc b/src/action_class_noop.cc index aa5196a46..2b7c1ab62 100644 --- a/src/action_class_noop.cc +++ b/src/action_class_noop.cc @@ -44,20 +44,17 @@ typedef struct grib_action_noop { static grib_action_class _grib_action_class_noop = { - 0, /* super */ - "action_class_noop", /* name */ - sizeof(grib_action_noop), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_noop", /* name */ + sizeof(grib_action_noop), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - 0, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + 0, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; diff --git a/src/action_class_print.cc b/src/action_class_print.cc index 0286c636f..366710458 100644 --- a/src/action_class_print.cc +++ b/src/action_class_print.cc @@ -18,6 +18,7 @@ START_CLASS_DEF CLASS = action IMPLEMENTS = destroy;execute + IMPLEMENTS = create_accessor MEMBERS = char *name MEMBERS = char *outname END_CLASS_DEF @@ -36,6 +37,7 @@ or edit "action.class" and rerun ./make_class.pl static void init_class (grib_action_class*); static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); static int execute(grib_action* a,grib_handle* h); @@ -48,20 +50,17 @@ typedef struct grib_action_print { static grib_action_class _grib_action_class_print = { - 0, /* super */ - "action_class_print", /* name */ - sizeof(grib_action_print), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_print", /* name */ + sizeof(grib_action_print), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - 0, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + 0, /* dump */ + 0, /* xref */ + &create_accessor, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; @@ -144,3 +143,21 @@ static void destroy(grib_context* context, grib_action* act) grib_context_free_persistent(context, act->name); grib_context_free_persistent(context, act->op); } + +static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) +{ + // ECC-1929: A print statement within the definitions does not + // actually create an accessor. So we just run it + grib_action_print* self = (grib_action_print*)act; + + const int err = execute(act, p->h); + if (err) + grib_context_log(act->context, GRIB_LOG_ERROR, "Print: '%s' (%s)", self->name, grib_get_error_message(err)); + return err; + + // We may want to be forgiving and ignore the error + // if (act->context->debug) { + // return err; + // } + // return GRIB_SUCCESS; +} diff --git a/src/action_class_remove.cc b/src/action_class_remove.cc index eff91cdce..479811381 100644 --- a/src/action_class_remove.cc +++ b/src/action_class_remove.cc @@ -49,20 +49,17 @@ typedef struct grib_action_remove { static grib_action_class _grib_action_class_remove = { - 0, /* super */ - "action_class_remove", /* name */ - sizeof(grib_action_remove), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_remove", /* name */ + sizeof(grib_action_remove), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - &create_accessor, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + &create_accessor, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ 0, /* execute */ }; @@ -96,10 +93,10 @@ static void remove_accessor(grib_accessor* a) if (!a || !a->previous_) return; - s = a->parent; + s = a->parent_; - if (grib_handle_of_accessor(a)->use_trie && *(a->all_names[0]) != '_') { - id = grib_hash_keys_get_id(a->context->keys, a->all_names[0]); + if (grib_handle_of_accessor(a)->use_trie && *(a->all_names_[0]) != '_') { + id = grib_hash_keys_get_id(a->context_->keys, a->all_names_[0]); grib_handle_of_accessor(a)->accessors[id] = NULL; } diff --git a/src/action_class_rename.cc b/src/action_class_rename.cc index 3fb65a704..247478554 100644 --- a/src/action_class_rename.cc +++ b/src/action_class_rename.cc @@ -51,20 +51,17 @@ typedef struct grib_action_rename { static grib_action_class _grib_action_class_rename = { - 0, /* super */ - "action_class_rename", /* name */ - sizeof(grib_action_rename), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_rename", /* name */ + sizeof(grib_action_rename), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - &create_accessor, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + &create_accessor, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ 0, /* execute */ }; @@ -95,17 +92,17 @@ grib_action* grib_action_create_rename(grib_context* context, char* the_old, cha static void rename_accessor(grib_accessor* a, char* name) { int id; - char* the_old = (char*)a->all_names[0]; + char* the_old = (char*)a->all_names_[0]; - if (grib_handle_of_accessor(a)->use_trie && *(a->all_names[0]) != '_') { - id = grib_hash_keys_get_id(a->context->keys, a->all_names[0]); + if (grib_handle_of_accessor(a)->use_trie && *(a->all_names_[0]) != '_') { + id = grib_hash_keys_get_id(a->context_->keys, a->all_names_[0]); grib_handle_of_accessor(a)->accessors[id] = NULL; - id = grib_hash_keys_get_id(a->context->keys, name); + id = grib_hash_keys_get_id(a->context_->keys, name); grib_handle_of_accessor(a)->accessors[id] = a; } - a->all_names[0] = grib_context_strdup_persistent(a->context, name); - a->name = a->all_names[0]; - grib_context_log(a->context, GRIB_LOG_DEBUG, "Renaming %s to %s", the_old, name); + a->all_names_[0] = grib_context_strdup_persistent(a->context_, name); + a->name_ = a->all_names_[0]; + grib_context_log(a->context_, GRIB_LOG_DEBUG, "Renaming %s to %s", the_old, name); /* grib_context_free(a->context,the_old); */ } @@ -127,12 +124,12 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) static void dump(grib_action* act, FILE* f, int lvl) { - // grib_action_rename* a = (grib_action_rename*)act; - // int i = 0; - // for (i = 0; i < lvl; i++) - // grib_context_print(act->context, f, " "); + grib_action_rename* a = (grib_action_rename*)act; + int i = 0; + for (i = 0; i < lvl; i++) + grib_context_print(act->context, f, " "); - // grib_context_print(act->context, f, "rename %s as %s in %s\n", a->the_old, act->name, a->the_new); + grib_context_print(act->context, f, "rename %s as %s in %s\n", a->the_old, act->name, a->the_new); } static void destroy(grib_context* context, grib_action* act) diff --git a/src/action_class_section.cc b/src/action_class_section.cc index 9dda3dc30..35d1e1bf5 100644 --- a/src/action_class_section.cc +++ b/src/action_class_section.cc @@ -44,20 +44,17 @@ typedef struct grib_action_section { static grib_action_class _grib_action_class_section = { - 0, /* super */ - "action_class_section", /* name */ - sizeof(grib_action_section), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_section", /* name */ + sizeof(grib_action_section), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ 0, /* destroy */ - - 0, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - ¬ify_change, /* notify_change */ + 0, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + ¬ify_change, /* notify_change */ 0, /* reparse */ 0, /* execute */ }; @@ -76,7 +73,7 @@ static void init_class(grib_action_class* c) // while(a) // { // Assert(grib_handle_of_accessor(a) == h); -// check_sections(a->sub_section,h); +// check_sections(a->sub_section_,h); // a = a->next; // } // } @@ -103,11 +100,11 @@ static int notify_change(grib_action* act, grib_accessor* notified, } grib_context_log(h->context, GRIB_LOG_DEBUG, "------------- SECTION action %s (%s) is triggered by [%s]%s", - act->name, notified->name, changed->name, debug_str); + act->name, notified->name_, changed->name_, debug_str); } la = grib_action_reparse(act, notified, &doit); - old_section = notified->sub_section; + old_section = notified->sub_section_; if (!old_section) return GRIB_INTERNAL_ERROR; Assert(old_section->h == h); @@ -123,14 +120,14 @@ static int notify_change(grib_action* act, grib_accessor* notified, if (!doit) { if (la != NULL || old_section->branch != NULL) if (la == old_section->branch) { - grib_context_log(h->context, GRIB_LOG_DEBUG, "IGNORING TRIGGER action %s (%s) is triggered %p", act->name, notified->name, (void*)la); + grib_context_log(h->context, GRIB_LOG_DEBUG, "IGNORING TRIGGER action %s (%s) is triggered %p", act->name, notified->name_, (void*)la); return GRIB_SUCCESS; } } loader.list_is_resized = (la == old_section->branch); - if (!strcmp(changed->name, "GRIBEditionNumber")) + if (!strcmp(changed->name_, "GRIBEditionNumber")) loader.changing_edition = 1; else loader.changing_edition = 0; @@ -159,7 +156,7 @@ static int notify_change(grib_action* act, grib_accessor* notified, h->kid = tmp_handle; /* printf("tmp_handle- main %p %p\n",(void*)tmp_handle,(void*)h); */ - grib_context_log(h->context, GRIB_LOG_DEBUG, "------------- CREATE TMP BLOCK act=%s notified=%s", act->name, notified->name); + grib_context_log(h->context, GRIB_LOG_DEBUG, "------------- CREATE TMP BLOCK act=%s notified=%s", act->name, notified->name_); tmp_handle->root = grib_section_create(tmp_handle, NULL); tmp_handle->use_trie = 1; @@ -198,7 +195,7 @@ static int notify_change(grib_action* act, grib_accessor* notified, Assert(tmp_handle->root->block->first != NULL); grib_swap_sections(old_section, - tmp_handle->root->block->first->sub_section); + tmp_handle->root->block->first->sub_section_); Assert(tmp_handle->dependencies == NULL); /* printf("grib_handle_delete %p\n",(void*)tmp_handle); */ diff --git a/src/action_class_set.cc b/src/action_class_set.cc index fee2ca406..799bd6be1 100644 --- a/src/action_class_set.cc +++ b/src/action_class_set.cc @@ -49,20 +49,17 @@ typedef struct grib_action_set { static grib_action_class _grib_action_class_set = { - 0, /* super */ - "action_class_set", /* name */ - sizeof(grib_action_set), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_set", /* name */ + sizeof(grib_action_set), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; diff --git a/src/action_class_set_darray.cc b/src/action_class_set_darray.cc index bbf36f1d6..366d6f335 100644 --- a/src/action_class_set_darray.cc +++ b/src/action_class_set_darray.cc @@ -47,20 +47,17 @@ typedef struct grib_action_set_darray { static grib_action_class _grib_action_class_set_darray = { - 0, /* super */ - "action_class_set_darray", /* name */ - sizeof(grib_action_set_darray), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_set_darray", /* name */ + sizeof(grib_action_set_darray), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; @@ -117,7 +114,7 @@ static void destroy(grib_context* context, grib_action* act) grib_action_set_darray* a = (grib_action_set_darray*)act; grib_context_free_persistent(context, a->name); - grib_darray_delete(context, a->darray); + grib_darray_delete(a->darray); grib_context_free_persistent(context, act->name); grib_context_free_persistent(context, act->op); } diff --git a/src/action_class_set_missing.cc b/src/action_class_set_missing.cc index 03bd4ffc3..413551547 100644 --- a/src/action_class_set_missing.cc +++ b/src/action_class_set_missing.cc @@ -14,7 +14,6 @@ START_CLASS_DEF CLASS = action - IMPLEMENTS = dump IMPLEMENTS = destroy;execute MEMBERS = char *name END_CLASS_DEF @@ -32,7 +31,6 @@ or edit "action.class" and rerun ./make_class.pl */ static void init_class (grib_action_class*); -static void dump (grib_action* d, FILE*,int); static void destroy (grib_context*,grib_action*); static int execute(grib_action* a,grib_handle* h); @@ -45,20 +43,17 @@ typedef struct grib_action_set_missing { static grib_action_class _grib_action_class_set_missing = { - 0, /* super */ - "action_class_set_missing", /* name */ - sizeof(grib_action_set_missing), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_set_missing", /* name */ + sizeof(grib_action_set_missing), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + 0, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; @@ -98,17 +93,6 @@ static int execute(grib_action* a, grib_handle* h) return grib_set_missing(h, self->name); } -static void dump(grib_action* act, FILE* f, int lvl) -{ - grib_context_log(act->context, GRIB_LOG_ERROR, "%s %s(): Not implemented", __FILE__, __func__); - // int i = 0; - // const grib_action_set_missing* self = (grib_action_set_missing*)act; - // for (i = 0; i < lvl; i++) - // grib_context_print(act->context, f, " "); - // grib_context_print(act->context, f, self->name); - // printf("\n"); -} - static void destroy(grib_context* context, grib_action* act) { grib_action_set_missing* a = (grib_action_set_missing*)act; diff --git a/src/action_class_set_sarray.cc b/src/action_class_set_sarray.cc index bc51c2475..56ed32276 100644 --- a/src/action_class_set_sarray.cc +++ b/src/action_class_set_sarray.cc @@ -47,20 +47,17 @@ typedef struct grib_action_set_sarray { static grib_action_class _grib_action_class_set_sarray = { - 0, /* super */ - "action_class_set_sarray", /* name */ - sizeof(grib_action_set_sarray), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_set_sarray", /* name */ + sizeof(grib_action_set_sarray), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; @@ -116,7 +113,7 @@ static void destroy(grib_context* context, grib_action* act) grib_action_set_sarray* a = (grib_action_set_sarray*)act; grib_context_free_persistent(context, a->name); - grib_sarray_delete(context, a->sarray); + grib_sarray_delete(a->sarray); grib_context_free_persistent(context, act->name); grib_context_free_persistent(context, act->op); } diff --git a/src/action_class_switch.cc b/src/action_class_switch.cc index fa58071ce..547149987 100644 --- a/src/action_class_switch.cc +++ b/src/action_class_switch.cc @@ -51,20 +51,17 @@ typedef struct grib_action_switch { extern grib_action_class* grib_action_class_section; static grib_action_class _grib_action_class_switch = { - &grib_action_class_section, /* super */ - "action_class_switch", /* name */ - sizeof(grib_action_switch), /* size */ - 0, /* inited */ + &grib_action_class_section, /* super */ + "action_class_switch", /* name */ + sizeof(grib_action_switch), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - 0, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + 0, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; diff --git a/src/action_class_template.cc b/src/action_class_template.cc index 79fd2aeaf..8858ab309 100644 --- a/src/action_class_template.cc +++ b/src/action_class_template.cc @@ -57,20 +57,17 @@ typedef struct grib_action_template { extern grib_action_class* grib_action_class_section; static grib_action_class _grib_action_class_template = { - &grib_action_class_section, /* super */ - "action_class_template", /* name */ - sizeof(grib_action_template), /* size */ - 0, /* inited */ + &grib_action_class_section, /* super */ + "action_class_template", /* name */ + sizeof(grib_action_template), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - &create_accessor, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + &create_accessor, /* create_accessor */ + 0, /* notify_change */ &reparse, /* reparse */ 0, /* execute */ }; @@ -161,8 +158,8 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) else la = grib_parse_file(p->h->context, fpath); } - as->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; - gs = as->sub_section; + as->flags_ |= GRIB_ACCESSOR_FLAG_HIDDEN; + gs = as->sub_section_; gs->branch = la; /* Will be used to prevent unnecessary reparse */ grib_push_accessor(as, p->block); @@ -195,9 +192,9 @@ static grib_action* reparse(grib_action* a, grib_accessor* acc, int* doit) char fname[1024]; grib_recompose_name(grib_handle_of_accessor(acc), NULL, self->arg, fname, 1); - if ((fpath = grib_context_full_defs_path(acc->context, fname)) == NULL) { + if ((fpath = grib_context_full_defs_path(acc->context_, fname)) == NULL) { if (!self->nofail) { - grib_context_log(acc->context, GRIB_LOG_ERROR, + grib_context_log(acc->context_, GRIB_LOG_ERROR, "Unable to find template %s from %s ", a->name, fname); return NULL; } @@ -205,7 +202,7 @@ static grib_action* reparse(grib_action* a, grib_accessor* acc, int* doit) } /* printf("REPARSE %s\n",fpath); */ - return grib_parse_file(acc->context, fpath); + return grib_parse_file(acc->context_, fpath); } return NULL; diff --git a/src/action_class_transient_darray.cc b/src/action_class_transient_darray.cc index 276dcf3fa..53fa77bac 100644 --- a/src/action_class_transient_darray.cc +++ b/src/action_class_transient_darray.cc @@ -52,20 +52,17 @@ typedef struct grib_action_transient_darray { extern grib_action_class* grib_action_class_gen; static grib_action_class _grib_action_class_transient_darray = { - &grib_action_class_gen, /* super */ - "action_class_transient_darray", /* name */ - sizeof(grib_action_transient_darray), /* size */ - 0, /* inited */ + &grib_action_class_gen, /* super */ + "action_class_transient_darray", /* name */ + sizeof(grib_action_transient_darray), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; @@ -114,7 +111,7 @@ static int execute(grib_action* act, grib_handle* h) grib_push_accessor(a, p->block); - if (a->flags & GRIB_ACCESSOR_FLAG_CONSTRAINT) + if (a->flags_ & GRIB_ACCESSOR_FLAG_CONSTRAINT) grib_dependency_observe_arguments(a, act->default_value); return a->pack_double(self->darray->v, &len); @@ -135,5 +132,5 @@ static void destroy(grib_context* context, grib_action* act) grib_action_transient_darray* a = (grib_action_transient_darray*)act; grib_context_free_persistent(context, a->name); - grib_darray_delete(context, a->darray); + grib_darray_delete(a->darray); } diff --git a/src/action_class_variable.cc b/src/action_class_variable.cc index 5b7e636ac..1ad93390c 100644 --- a/src/action_class_variable.cc +++ b/src/action_class_variable.cc @@ -48,20 +48,17 @@ typedef struct grib_action_variable { extern grib_action_class* grib_action_class_gen; static grib_action_class _grib_action_class_variable = { - &grib_action_class_gen, /* super */ - "action_class_variable", /* name */ - sizeof(grib_action_variable), /* size */ - 0, /* inited */ + &grib_action_class_gen, /* super */ + "action_class_variable", /* name */ + sizeof(grib_action_variable), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ 0, /* destroy */ - - 0, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + 0, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; diff --git a/src/action_class_when.cc b/src/action_class_when.cc index 359890f73..a2a770e7f 100644 --- a/src/action_class_when.cc +++ b/src/action_class_when.cc @@ -53,20 +53,17 @@ typedef struct grib_action_when { static grib_action_class _grib_action_class_when = { - 0, /* super */ - "action_class_when", /* name */ - sizeof(grib_action_when), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_when", /* name */ + sizeof(grib_action_when), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - &create_accessor, /* create_accessor*/ - - ¬ify_change, /* notify_change */ + &dump, /* dump */ + 0, /* xref */ + &create_accessor, /* create_accessor */ + ¬ify_change, /* notify_change */ 0, /* reparse */ 0, /* execute */ }; @@ -202,8 +199,8 @@ static int notify_change(grib_action* a, grib_accessor* observer, grib_accessor* if (hand->context->debug > 0) { grib_context_log(hand->context, GRIB_LOG_DEBUG, "------------- SECTION action %s is triggered by [%s] (%s)", - a->name, observed->name, a->debug_info ? a->debug_info : "no debug info"); - grib_expression_print(observed->context, self->expression, 0, stderr); + a->name, observed->name_, a->debug_info ? a->debug_info : "no debug info"); + grib_expression_print(observed->context_, self->expression, 0, stderr); fprintf(stderr, "\n"); } diff --git a/src/action_class_write.cc b/src/action_class_write.cc index 190264e9c..01d5d8a54 100644 --- a/src/action_class_write.cc +++ b/src/action_class_write.cc @@ -47,20 +47,17 @@ typedef struct grib_action_write { static grib_action_class _grib_action_class_write = { - 0, /* super */ - "action_class_write", /* name */ - sizeof(grib_action_write), /* size */ - 0, /* inited */ + 0, /* super */ + "action_class_write", /* name */ + sizeof(grib_action_write), /* size */ + 0, /* inited */ &init_class, /* init_class */ - 0, /* init */ + 0, /* init */ &destroy, /* destroy */ - - 0, /* dump */ - 0, /* xref */ - - 0, /* create_accessor*/ - - 0, /* notify_change */ + 0, /* dump */ + 0, /* xref */ + 0, /* create_accessor */ + 0, /* notify_change */ 0, /* reparse */ &execute, /* execute */ }; diff --git a/src/bufr_keys_iterator.cc b/src/bufr_keys_iterator.cc index d22b0349b..09cf69e66 100644 --- a/src/bufr_keys_iterator.cc +++ b/src/bufr_keys_iterator.cc @@ -91,15 +91,15 @@ int codes_bufr_keys_iterator_rewind(bufr_keys_iterator* ki) static int skip(bufr_keys_iterator* kiter) { - if (kiter->current->sub_section) + if (kiter->current->sub_section_) return 1; - if (kiter->current->flags & kiter->accessor_flags_skip) { + if (kiter->current->flags_ & kiter->accessor_flags_skip) { return 1; } - if (kiter->accessor_flags_only == (kiter->current->flags & kiter->accessor_flags_only)) { - mark_seen(kiter, kiter->current->name); + if (kiter->accessor_flags_only == (kiter->current->flags_ & kiter->accessor_flags_only)) { + mark_seen(kiter, kiter->current->name_); return 0; } else { @@ -114,24 +114,24 @@ static int next_attribute(bufr_keys_iterator* kiter) if (!kiter->current) return 0; if (!kiter->attributes) { - kiter->attributes = kiter->current->attributes; + kiter->attributes = kiter->current->attributes_; kiter->prefix = 0; kiter->i_curr_attribute = 0; } i_curr_attribute = kiter->i_curr_attribute - 1; while (kiter->i_curr_attribute < MAX_ACCESSOR_ATTRIBUTES && kiter->attributes[kiter->i_curr_attribute]) { - if ((kiter->attributes[kiter->i_curr_attribute]->flags & GRIB_ACCESSOR_FLAG_DUMP) != 0 && (kiter->attributes[kiter->i_curr_attribute]->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) == 0) + if ((kiter->attributes[kiter->i_curr_attribute]->flags_ & GRIB_ACCESSOR_FLAG_DUMP) != 0 && (kiter->attributes[kiter->i_curr_attribute]->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) == 0) break; kiter->i_curr_attribute++; } if (kiter->attributes[kiter->i_curr_attribute]) { if (!kiter->prefix) { - const size_t prefixLenMax = strlen(kiter->current->name) + 10; - kiter->prefix = (char*)grib_context_malloc_clear(kiter->current->context, prefixLenMax); - r = (int*)grib_trie_get(kiter->seen, kiter->current->name); - snprintf(kiter->prefix, prefixLenMax, "#%d#%s", *r, kiter->current->name); + const size_t prefixLenMax = strlen(kiter->current->name_) + 10; + kiter->prefix = (char*)grib_context_malloc_clear(kiter->current->context_, prefixLenMax); + r = (int*)grib_trie_get(kiter->seen, kiter->current->name_); + snprintf(kiter->prefix, prefixLenMax, "#%d#%s", *r, kiter->current->name_); } kiter->i_curr_attribute++; return 1; @@ -141,18 +141,18 @@ static int next_attribute(bufr_keys_iterator* kiter) if (!kiter->prefix) return 0; if (!kiter->attributes[i_curr_attribute]) { - grib_context_free(kiter->current->context, kiter->prefix); + grib_context_free(kiter->current->context_, kiter->prefix); kiter->prefix = 0; return 0; } - prefix = (char*)grib_context_malloc_clear(kiter->current->context, strlen(kiter->prefix) + strlen(kiter->attributes[i_curr_attribute]->name) + 3); + prefix = (char*)grib_context_malloc_clear(kiter->current->context_, strlen(kiter->prefix) + strlen(kiter->attributes[i_curr_attribute]->name_) + 3); /*sprintf(prefix,"%s->%s",kiter->prefix,kiter->attributes[i_curr_attribute]->name);*/ strcpy(prefix, kiter->prefix); /* strcpy and strcat here are much faster than sprintf */ strcat(prefix, "->"); - strcat(prefix, kiter->attributes[i_curr_attribute]->name); - grib_context_free(kiter->current->context, kiter->prefix); + strcat(prefix, kiter->attributes[i_curr_attribute]->name_); + grib_context_free(kiter->current->context_, kiter->prefix); kiter->prefix = prefix; - kiter->attributes = kiter->attributes[i_curr_attribute]->attributes; + kiter->attributes = kiter->attributes[i_curr_attribute]->attributes_; kiter->i_curr_attribute = 0; return next_attribute(kiter); } @@ -179,7 +179,7 @@ int codes_bufr_keys_iterator_next(bufr_keys_iterator* kiter) kiter->current = kiter->current->next_accessor(); kiter->attributes = 0; if (kiter->prefix) { - grib_context_free(kiter->current->context, kiter->prefix); + grib_context_free(kiter->current->context_, kiter->prefix); kiter->prefix = 0; } kiter->i_curr_attribute = 0; @@ -204,22 +204,22 @@ char* codes_bufr_keys_iterator_get_name(const bufr_keys_iterator* ckiter) if (kiter->prefix) { int iattribute = kiter->i_curr_attribute - 1; - ret = (char*)grib_context_malloc_clear(c, strlen(kiter->prefix) + strlen(kiter->attributes[iattribute]->name) + 10); + ret = (char*)grib_context_malloc_clear(c, strlen(kiter->prefix) + strlen(kiter->attributes[iattribute]->name_) + 10); /*sprintf(ret,"%s->%s",kiter->prefix,kiter->attributes[iattribute]->name);*/ strcpy(ret, kiter->prefix); /* strcpy and strcat here are much faster than sprintf */ strcat(ret, "->"); - strcat(ret, kiter->attributes[iattribute]->name); + strcat(ret, kiter->attributes[iattribute]->name_); } else { - const size_t retMaxLen = strlen(kiter->current->name) + 10; + const size_t retMaxLen = strlen(kiter->current->name_) + 10; ret = (char*)grib_context_malloc_clear(c, retMaxLen); - if (kiter->current->flags & GRIB_ACCESSOR_FLAG_BUFR_DATA) { - r = (int*)grib_trie_get(kiter->seen, kiter->current->name); - snprintf(ret, retMaxLen, "#%d#%s", *r, kiter->current->name); + if (kiter->current->flags_ & GRIB_ACCESSOR_FLAG_BUFR_DATA) { + r = (int*)grib_trie_get(kiter->seen, kiter->current->name_); + snprintf(ret, retMaxLen, "#%d#%s", *r, kiter->current->name_); } else { - strcpy(ret, kiter->current->name); + strcpy(ret, kiter->current->name_); } } diff --git a/src/bufr_util.cc b/src/bufr_util.cc index 56a4977c0..8ac3da975 100644 --- a/src/bufr_util.cc +++ b/src/bufr_util.cc @@ -73,7 +73,7 @@ char** codes_bufr_copy_data_return_copied_keys(grib_handle* hin, grib_handle* ho kiter = codes_bufr_data_section_keys_iterator_new(hin); if (!kiter) return NULL; - k = grib_sarray_new(hin->context, 50, 10); + k = grib_sarray_new(50, 10); while (codes_bufr_keys_iterator_next(kiter)) { char* name = codes_bufr_keys_iterator_get_name(kiter); @@ -85,12 +85,12 @@ char** codes_bufr_copy_data_return_copied_keys(grib_handle* hin, grib_handle* ho if (*err == 0) { // 'name' will be freed when we call codes_bufr_keys_iterator_delete so copy char* copied_name = strdup(name); - k = grib_sarray_push(hin->context, k, copied_name); + k = grib_sarray_push(k, copied_name); } } *nkeys = grib_sarray_used_size(k); - keys = grib_sarray_get_array(hin->context, k); - grib_sarray_delete(hin->context, k); + keys = grib_sarray_get_array(k); + grib_sarray_delete(k); if (*nkeys > 0) { // Do the pack if something was copied *err = grib_set_long(hout, "pack", 1); @@ -1113,7 +1113,7 @@ int codes_bufr_key_is_header(const grib_handle* h, const char* key, int* err) return 0; } *err = GRIB_SUCCESS; - return ((acc->flags & GRIB_ACCESSOR_FLAG_BUFR_DATA) == 0); + return ((acc->flags_ & GRIB_ACCESSOR_FLAG_BUFR_DATA) == 0); } // Returns 1 if the BUFR key is a coordinate descriptor @@ -1125,7 +1125,7 @@ int codes_bufr_key_is_coordinate(const grib_handle* h, const char* key, int* err return 0; } *err = GRIB_SUCCESS; - return ((acc->flags & GRIB_ACCESSOR_FLAG_BUFR_COORD) != 0); + return ((acc->flags_ & GRIB_ACCESSOR_FLAG_BUFR_COORD) != 0); } int codes_bufr_key_exclude_from_dump(const char* key) diff --git a/src/codes_util.cc b/src/codes_util.cc index 9e7507c23..bb705b335 100644 --- a/src/codes_util.cc +++ b/src/codes_util.cc @@ -9,6 +9,7 @@ */ #include "grib_api_internal.h" +#include "eccodes.h" // Input lon must be in degrees not radians // Not to be used for latitudes as they can be -ve @@ -279,7 +280,7 @@ long convert_to_minutes(long step, long stepUnits) return (long)result; } -bool is_sorted_ascending(double arr[], size_t n) +bool is_sorted_ascending(const double arr[], size_t n) { for (size_t i = 0; i < n-1; i++) { if (arr[i] > arr[i+1]) { @@ -289,7 +290,7 @@ bool is_sorted_ascending(double arr[], size_t n) return true; } -bool is_sorted_descending(double arr[], size_t n) +bool is_sorted_descending(const double arr[], size_t n) { for (size_t i = 0; i < n-1; i++) { if (arr[i] < arr[i+1]) { @@ -404,3 +405,143 @@ int compute_scaled_value_and_scale_factor( } return err; } + +static const char* known_features[] = { + "AEC", + "MEMFS", + "JPG", + "PNG", + "ECCODES_THREADS", + "ECCODES_OMP_THREADS", + "NETCDF", + "FORTRAN", + "GEOGRAPHY" +}; + +#define NUMBER(x) (sizeof(x) / sizeof(x[0])) +int codes_is_feature_enabled(const char* feature) +{ + int aec_enabled = 0; // or CCSDS + int memfs_enabled = 0; + int jpg_enabled = 0; // JasPer or OpenJPEG or both + int png_enabled = 0; + int posix_threads_enabled = 0; + int omp_threads_enabled = 0; + int netcdf_enabled = 0; + int fortran_enabled = 0; + int geography_enabled = 0; + + int found_feature = 0; + const size_t num = NUMBER(known_features); + for (size_t i = 0; i < num; ++i) { + if (STR_EQUAL(feature, known_features[i])) { + found_feature = 1; + break; + } + } + if (!found_feature) { + const grib_context* c = grib_context_get_default(); + grib_context_log(c, GRIB_LOG_ERROR, "Unknown feature '%s'. Select one of:", feature); + for (size_t i = 0; i < num; ++i) { + grib_context_log(c, GRIB_LOG_ERROR, "\t%s", known_features[i]); + } + return 0; + } + +#if defined(HAVE_LIBAEC) || defined(HAVE_AEC) + aec_enabled = 1; +#endif +#if HAVE_JPEG + #if HAVE_LIBJASPER + jpg_enabled = 1; + #endif + #if HAVE_LIBOPENJPEG + jpg_enabled = 1; + #endif +#endif +#if HAVE_LIBPNG + png_enabled = 1; +#endif +#if defined(HAVE_MEMFS) + memfs_enabled = 1; +#endif +#if GRIB_PTHREADS + posix_threads_enabled = 1; +#endif +#if GRIB_OMP_THREADS + omp_threads_enabled = 1; +#endif +#if defined(HAVE_NETCDF) + netcdf_enabled = 1; +#endif +#if defined(HAVE_FORTRAN) + fortran_enabled = 1; +#endif +#if defined(HAVE_GEOGRAPHY) + geography_enabled = 1; +#endif + + if (STR_EQUAL(feature, "AEC") || STR_EQUAL(feature, "CCSDS")) { + return aec_enabled; + } + if (STR_EQUAL(feature, "JPG") || STR_EQUAL(feature, "JPEG")) { + return jpg_enabled; + } + if (STR_EQUAL(feature, "PNG")) { + return png_enabled; + } + if (STR_EQUAL(feature, "MEMFS")) { + return memfs_enabled; + } + if (STR_EQUAL(feature, "ECCODES_THREADS")) { + return posix_threads_enabled; + } + if (STR_EQUAL(feature, "ECCODES_OMP_THREADS")) { + return omp_threads_enabled; + } + if (STR_EQUAL(feature, "NETCDF")) { + return netcdf_enabled; + } + if (STR_EQUAL(feature, "FORTRAN")) { + return fortran_enabled; + } + if (STR_EQUAL(feature, "GEOGRAPHY")) { + return geography_enabled; + } + + return 0; +} + +int codes_get_features(char* result, size_t* length, int select) +{ + Assert(select == CODES_FEATURES_ALL || select == CODES_FEATURES_ENABLED || select == CODES_FEATURES_DISABLED); + + const size_t num = NUMBER(known_features); + result[0] = '\0'; + for (size_t i = 0; i < num; ++i) { + if (select == CODES_FEATURES_ALL) { + strcat(result, known_features[i]); + strcat(result, " "); + } + else if (select == CODES_FEATURES_ENABLED) { + if (codes_is_feature_enabled(known_features[i])) { + strcat(result, known_features[i]); + strcat(result, " "); + } + } + else if (select == CODES_FEATURES_DISABLED) { + if (!codes_is_feature_enabled(known_features[i])) { + strcat(result, known_features[i]); + strcat(result, " "); + } + } + } + + const size_t actual_length = strlen(result); + if (result[actual_length - 1] == ' ') + result[actual_length - 1] = '\0'; + + Assert(*length >= actual_length); + *length = actual_length; + return GRIB_SUCCESS; +} diff --git a/src/deprecated/grib_accessor_class_gds_not_present_bitmap.h b/src/deprecated/grib_accessor_class_gds_not_present_bitmap.h index bf9c0c012..0894e410e 100644 --- a/src/deprecated/grib_accessor_class_gds_not_present_bitmap.h +++ b/src/deprecated/grib_accessor_class_gds_not_present_bitmap.h @@ -16,22 +16,19 @@ class grib_accessor_gds_not_present_bitmap_t : public grib_accessor_gen_t { public: - /* Members defined in gds_not_present_bitmap */ - const char* missing_value; - const char* number_of_values; - const char* number_of_points; - const char* latitude_of_first_point; - const char* ni; -}; - -class grib_accessor_class_gds_not_present_bitmap_t : public grib_accessor_class_gen_t -{ -public: - grib_accessor_class_gds_not_present_bitmap_t(const char* name) : grib_accessor_class_gen_t(name) {} + grib_accessor_gds_not_present_bitmap_t() : + grib_accessor_gen_t() { class_name_ = "gds_not_present_bitmap"; } grib_accessor* create_empty_accessor() override { return new grib_accessor_gds_not_present_bitmap_t{}; } - int get_native_type(grib_accessor*) override; - int pack_double(grib_accessor*, const double* val, size_t* len) override; - int unpack_double(grib_accessor*, double* val, size_t* len) override; - int value_count(grib_accessor*, long*) override; - void init(grib_accessor*, const long, grib_arguments*) override; + long get_native_type() override; + int pack_double(const double* val, size_t* len) override; + int unpack_double(double* val, size_t* len) override; + int value_count(long*) override; + void init(const long, grib_arguments*) override; + +private: + const char* missing_value_; + const char* number_of_values_; + const char* number_of_points_; + const char* latitude_of_first_point_; + const char* ni_; }; diff --git a/src/ecc_numeric_limits.h b/src/ecc_numeric_limits.h new file mode 100644 index 000000000..3f980dff2 --- /dev/null +++ b/src/ecc_numeric_limits.h @@ -0,0 +1,100 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include +#include // CHAR_BIT + +// NumericLimits is a class template that provides the minimum and maximum values for a given number of bits. +// The minimum and maximum values are calculated for both signed and unsigned integral types. + +template ::value, bool = std::is_integral::value> +struct NumericLimits +{ + static_assert(std::is_integral::value, "ValueType must be an integral type"); +}; + + +// Example: +// For a 16-bit signed integer, the minimum and maximum values are: +// nBits | min | max +// ----- | --- | --- +// 1 | -1 | 0 +// 2 | -2 | 1 +// 3 | -4 | 3 +// 4 | -8 | 7 +// ... +// 15 | -16384 | 16383 +// 16 | -32768 | 32767 + +template +struct NumericLimits +{ +private: + static constexpr std::size_t maxNBits = CHAR_BIT * sizeof(ValueType); + + static constexpr std::array max_ = []() { + std::array max{}; + using UnsignedValueType = std::make_unsigned_t; + constexpr UnsignedValueType ones = ~UnsignedValueType{ 0 }; + max[0] = 0; + for (std::size_t i = 1; i < maxNBits; ++i) { + max[i] = static_cast(ones >> (maxNBits - i)); + } + return max; + }(); + + static constexpr std::array min_ = []() { + std::array min{}; + for (std::size_t i = 0; i < maxNBits; ++i) { + min[i] = ~max_[i]; + } + return min; + }(); + +public: + static constexpr ValueType min(std::size_t nBits) { return min_[nBits - 1]; } + static constexpr ValueType max(std::size_t nBits) { return max_[nBits - 1]; } +}; + + +// Example: +// For a 16-bit unsigned integer, the minimum and maximum values are: +// nBits | min | max +// ----- | --- | --- +// 1 | 0 | 1 +// 2 | 0 | 3 +// 3 | 0 | 7 +// 4 | 0 | 15 +// ... +// 15 | 0 | 32767 +// 16 | 0 | 65535 + +template +struct NumericLimits +{ +private: + static constexpr std::size_t maxNBits = CHAR_BIT * sizeof(ValueType); + + static constexpr std::array max_ = []() { + std::array max{}; + constexpr ValueType ones = ~(static_cast(0)); + max[0] = 1; + for (std::size_t i = 1; i < maxNBits; ++i) { + max[i] = ones >> (maxNBits - i - 1); + } + return max; + }(); + +public: + static constexpr ValueType min(std::size_t nBits) { return 0; } + static constexpr ValueType max(std::size_t nBits) { return max_[nBits - 1]; } +}; diff --git a/src/eccodes.cc b/src/eccodes.cc index 4dc7868b9..d26644062 100644 --- a/src/eccodes.cc +++ b/src/eccodes.cc @@ -12,11 +12,11 @@ /* Generic functions */ /******************************************************************************/ -char* codes_samples_path(const grib_context* c) +char* codes_samples_path(const codes_context* c) { return grib_samples_path(c); } -char* codes_definition_path(const grib_context* c) +char* codes_definition_path(const codes_context* c) { return grib_definition_path(c); } @@ -41,16 +41,16 @@ void codes_print_api_version(FILE* out) { grib_print_api_version(out); } -int codes_count_in_file(grib_context* c, FILE* f, int* n) +int codes_count_in_file(codes_context* c, FILE* f, int* n) { return grib_count_in_file(c, f, n); } -int codes_count_in_filename(grib_context* c, const char* filename, int* n) +int codes_count_in_filename(codes_context* c, const char* filename, int* n) { return grib_count_in_filename(c, filename, n); } -grib_context* codes_context_get_default(void) +codes_context* codes_context_get_default(void) { return grib_context_get_default(); } @@ -74,7 +74,7 @@ void codes_check(const char* call, const char* file, int line, int e, const char /* Fieldsets */ /******************************************************************************/ -grib_fieldset* codes_fieldset_new_from_files(grib_context* c, const char* filenames[], int nfiles, const char** keys, int nkeys, const char* where_string, const char* order_by_string, int* err) +grib_fieldset* codes_fieldset_new_from_files(codes_context* c, const char* filenames[], int nfiles, const char** keys, int nkeys, const char* where_string, const char* order_by_string, int* err) { return grib_fieldset_new_from_files(c, filenames, nfiles, keys, nkeys, where_string, order_by_string, err); } @@ -101,11 +101,11 @@ int codes_fieldset_count(const grib_fieldset* set) /* Indexing */ /******************************************************************************/ -grib_index* codes_index_new_from_file(grib_context* c, const char* filename, const char* keys, int* err) +grib_index* codes_index_new_from_file(codes_context* c, const char* filename, const char* keys, int* err) { return grib_index_new_from_file(c, filename, keys, err); } -grib_index* codes_index_new(grib_context* c, const char* keys, int* err) +grib_index* codes_index_new(codes_context* c, const char* keys, int* err) { return grib_index_new(c, keys, err); } @@ -117,7 +117,7 @@ int codes_index_write(grib_index* index, const char* filename) { return grib_index_write(index, filename); } -grib_index* codes_index_read(grib_context* c, const char* filename, int* err) +grib_index* codes_index_read(codes_context* c, const char* filename, int* err) { return grib_index_read(c, filename, err); } @@ -164,15 +164,15 @@ int codes_write_message(const grib_handle* h, const char* file, const char* mode { return grib_write_message(h, file, mode); } -grib_handle* codes_handle_new_from_message(grib_context* c, const void* data, size_t data_len) +grib_handle* codes_handle_new_from_message(codes_context* c, const void* data, size_t data_len) { return grib_handle_new_from_message(c, data, data_len); } -grib_handle* codes_handle_new_from_message_copy(grib_context* c, const void* data, size_t data_len) +grib_handle* codes_handle_new_from_message_copy(codes_context* c, const void* data, size_t data_len) { return grib_handle_new_from_message_copy(c, data, data_len); } -grib_handle* codes_grib_handle_new_from_samples(grib_context* c, const char* sample_name) +grib_handle* codes_grib_handle_new_from_samples(codes_context* c, const char* sample_name) { return grib_handle_new_from_samples(c, sample_name); } @@ -189,11 +189,11 @@ int codes_handle_delete(grib_handle* h) { return grib_handle_delete(h); } -grib_handle* codes_handle_new_from_partial_message_copy(grib_context* c, const void* data, size_t size) +grib_handle* codes_handle_new_from_partial_message_copy(codes_context* c, const void* data, size_t size) { return grib_handle_new_from_partial_message_copy(c, data, size); } -grib_handle* codes_handle_new_from_partial_message(grib_context* c, const void* data, size_t buflen) +grib_handle* codes_handle_new_from_partial_message(codes_context* c, const void* data, size_t buflen) { return grib_handle_new_from_partial_message(c, data, buflen); } @@ -230,23 +230,23 @@ grib_string_list* codes_grib_util_get_mars_param(const char* param_id) { return grib_util_get_mars_param(param_id); } -void codes_grib_multi_support_on(grib_context* c) +void codes_grib_multi_support_on(codes_context* c) { grib_multi_support_on(c); } -void codes_grib_multi_support_off(grib_context* c) +void codes_grib_multi_support_off(codes_context* c) { grib_multi_support_off(c); } -void codes_grib_multi_support_reset_file(grib_context* c, FILE* f) +void codes_grib_multi_support_reset_file(codes_context* c, FILE* f) { grib_multi_support_reset_file(c, f); } -grib_handle* codes_grib_handle_new_from_multi_message(grib_context* c, void** data, size_t* data_len, int* error) +grib_handle* codes_grib_handle_new_from_multi_message(codes_context* c, void** data, size_t* data_len, int* error) { return grib_handle_new_from_multi_message(c, data, data_len, error); } -grib_multi_handle* codes_grib_multi_handle_new(grib_context* c) +grib_multi_handle* codes_grib_multi_handle_new(codes_context* c) { return grib_multi_handle_new(c); } @@ -467,24 +467,24 @@ void codes_dump_action_tree(codes_context* c, FILE* f) } /* GTS, GRIBEX */ /******************************************************************************/ -void codes_gts_header_off(grib_context* c) +void codes_gts_header_off(codes_context* c) { grib_gts_header_off(c); } -void codes_gts_header_on(grib_context* c) +void codes_gts_header_on(codes_context* c) { grib_gts_header_on(c); } -void codes_gribex_mode_on(grib_context* c) +void codes_gribex_mode_on(codes_context* c) { grib_gribex_mode_on(c); } -int codes_get_gribex_mode(grib_context* c) +int codes_get_gribex_mode(const codes_context* c) { return grib_get_gribex_mode(c); } -void codes_gribex_mode_off(grib_context* c) +void codes_gribex_mode_off(codes_context* c) { grib_gribex_mode_off(c); } @@ -577,41 +577,49 @@ void codes_get_reduced_row_p(long pl, double lon_first, double lon_last, long* n grib_get_reduced_row_p(pl, lon_first, lon_last, npoints, olon_first, olon_last); } -void codes_context_delete(grib_context* c) +void codes_context_delete(codes_context* c) { grib_context_delete(c); } -void codes_context_set_definitions_path(grib_context* c, const char* path) +void codes_context_set_definitions_path(codes_context* c, const char* path) { grib_context_set_definitions_path(c, path); } -void codes_context_set_samples_path(grib_context* c, const char* path) +void codes_context_set_samples_path(codes_context* c, const char* path) { grib_context_set_samples_path(c, path); } -void codes_context_set_debug(grib_context* c, int mode) +void codes_context_set_debug(codes_context* c, int mode) { grib_context_set_debug(c, mode); } - -void codes_context_set_memory_proc(grib_context* c, grib_malloc_proc p_malloc, grib_free_proc p_free, grib_realloc_proc p_realloc) +void codes_context_set_data_quality_checks(codes_context* c, int val) { + grib_context_set_data_quality_checks(c, val); +} + +void codes_context_set_memory_proc(codes_context* c, grib_malloc_proc p_malloc, grib_free_proc p_free, grib_realloc_proc p_realloc) +{ + // This function is deprecated and will later be removed grib_context_set_memory_proc(c, p_malloc, p_free, p_realloc); } -void codes_context_set_persistent_memory_proc(grib_context* c, grib_malloc_proc p_malloc, grib_free_proc p_free) +void codes_context_set_persistent_memory_proc(codes_context* c, grib_malloc_proc p_malloc, grib_free_proc p_free) { + // This function is deprecated and will later be removed grib_context_set_persistent_memory_proc(c, p_malloc, p_free); } -void codes_context_set_buffer_memory_proc(grib_context* c, grib_malloc_proc p_malloc, grib_free_proc p_free, grib_realloc_proc p_realloc) +void codes_context_set_buffer_memory_proc(codes_context* c, grib_malloc_proc p_malloc, grib_free_proc p_free, grib_realloc_proc p_realloc) { + // This function is deprecated and will later be removed grib_context_set_buffer_memory_proc(c, p_malloc, p_free, p_realloc); } -void codes_context_set_print_proc(grib_context* c, grib_print_proc p_print) + +void codes_context_set_print_proc(codes_context* c, grib_print_proc p_print) { grib_context_set_print_proc(c, p_print); } -void codes_context_set_logging_proc(grib_context* c, grib_log_proc p_log) +void codes_context_set_logging_proc(codes_context* c, grib_log_proc p_log) { grib_context_set_logging_proc(c, p_log); } diff --git a/src/eccodes.h b/src/eccodes.h index 2c5aff7e2..46a048d43 100644 --- a/src/eccodes.h +++ b/src/eccodes.h @@ -809,12 +809,12 @@ int codes_get_float_elements(const codes_handle* h, const char* key, const int* * * @param h : the handle to get the data from * @param key : the key to be searched - * @param mesg : the address of a string where the data will be retrieved + * @param value : the address of a string where the data will be retrieved * @param length : the address of a size_t that contains allocated length of the string on input, * and that contains the actual length of the string on output * @return 0 if OK, integer value on error */ -int codes_get_string(const codes_handle* h, const char* key, char* mesg, size_t* length); +int codes_get_string(const codes_handle* h, const char* key, char* value, size_t* length); /** * Get string array values from a key. If several keys of the same name are present, the last one is returned @@ -910,12 +910,12 @@ int codes_set_double(codes_handle* h, const char* key, double val); * * @param h : the handle to set the data to * @param key : the key to be searched - * @param mesg : the address of a string where the data will be read + * @param value : the address of a string where the data will be read * @param length : the address of a size_t that contains the length of the string on input, * and that contains the actual packed length of the string on output * @return 0 if OK, integer value on error */ -int codes_set_string(codes_handle* h, const char* key, const char* mesg, size_t* length); +int codes_set_string(codes_handle* h, const char* key, const char* value, size_t* length); /** * Set a bytes array from a key. If several keys of the same name are present, the last one is set @@ -1103,7 +1103,7 @@ typedef int (*codes_data_eof_proc)(const codes_context* c, void* stream); /** * Get the static default context * - * @return the default context, NULL it the context is not available + * @return the default context, NULL if the context is not available */ codes_context* codes_context_get_default(void); @@ -1143,7 +1143,7 @@ void codes_gribex_mode_on(codes_context* c); * * @param c : the context */ -int codes_get_gribex_mode(codes_context* c); +int codes_get_gribex_mode(const codes_context* c); /** * Set the GRIBEX mode off. @@ -1174,7 +1174,8 @@ void codes_context_set_definitions_path(codes_context* c, const char* path); */ void codes_context_set_samples_path(codes_context* c, const char* path); -void codes_context_set_debug(grib_context* c, int mode); +void codes_context_set_debug(codes_context* c, int mode); +void codes_context_set_data_quality_checks(codes_context* c, int val); /** * Sets memory procedures of the context @@ -1185,7 +1186,7 @@ void codes_context_set_debug(grib_context* c, int mode); * @param p_realloc : the memory reallocation procedure to be set @see codes_realloc_proc */ void codes_context_set_memory_proc(codes_context* c, codes_malloc_proc p_malloc, - codes_free_proc p_free, codes_realloc_proc p_realloc); + codes_free_proc p_free, codes_realloc_proc p_realloc) ECCODES_DEPRECATED; /** * Sets memory procedures of the context for persistent data @@ -1195,7 +1196,7 @@ void codes_context_set_memory_proc(codes_context* c, codes_malloc_proc p_malloc, * @param gribfree : the memory freeing procedure to be set @see codes_free_proc */ void codes_context_set_persistent_memory_proc(codes_context* c, codes_malloc_proc p_malloc, - codes_free_proc p_free); + codes_free_proc p_free) ECCODES_DEPRECATED; /** * Sets memory procedures of the context for large buffers @@ -1206,7 +1207,7 @@ void codes_context_set_persistent_memory_proc(codes_context* c, codes_malloc_pro * @param p_free : the memory reallocation procedure to be set @see codes_realloc_proc */ void codes_context_set_buffer_memory_proc(codes_context* c, codes_malloc_proc p_malloc, - codes_free_proc p_free, codes_realloc_proc p_realloc); + codes_free_proc p_free, codes_realloc_proc p_realloc) ECCODES_DEPRECATED; /** * Sets the context printing procedure used for user interaction @@ -1400,6 +1401,14 @@ int codes_get_product_kind(const codes_handle* h, ProductKind* product_kind); int codes_check_message_header(const void* bytes, size_t length, ProductKind product); int codes_check_message_footer(const void* bytes, size_t length, ProductKind product); +/* Features */ +#define CODES_FEATURES_ALL 0 +#define CODES_FEATURES_ENABLED 1 +#define CODES_FEATURES_DISABLED 2 +int codes_is_feature_enabled(const char* feature); +/* result is a space-separated list of features and + must be allocated by the caller (its length must be large enough) */ +int codes_get_features(char* result, size_t* length, int select); /* --------------------------------------- */ #define CODES_UTIL_GRID_SPEC_REGULAR_LL GRIB_UTIL_GRID_SPEC_REGULAR_LL diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index d7479e960..a32aa8749 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -86,7 +86,7 @@ grib_action* grib_action_create_write(grib_context* context, const char* name, i grib_action* grib_action_create_print(grib_context* context, const char* name, char* outname); /* action_class_close.cc */ -grib_action* grib_action_create_close(grib_context* context, char* filename); +grib_action* grib_action_create_close(grib_context* context, const char* filename); /* action_class_variable.cc */ grib_action* grib_action_create_variable(grib_context* context, const char* name, const char* op, const long len, grib_arguments* params, grib_arguments* default_value, int flags, const char* name_space); @@ -106,7 +106,7 @@ grib_concept_condition* grib_concept_condition_new(grib_context* c, const char* void grib_concept_condition_delete(grib_context* c, grib_concept_condition* v); /* grib_hash_array.cc */ -grib_hash_array_value* grib_integer_hash_array_value_new(grib_context* c, const char* name, grib_iarray* array); +grib_hash_array_value* grib_integer_hash_array_value_new(const char* name, grib_iarray* array); /* grib_bufr_descriptor.cc */ bufr_descriptor* grib_bufr_descriptor_new(grib_accessor* tables_accessor, int code, int silent, int* err); @@ -117,7 +117,7 @@ int grib_bufr_descriptor_can_be_missing(const bufr_descriptor* v); void grib_bufr_descriptor_delete(bufr_descriptor* v); /* grib_bufr_descriptors_array.cc */ -bufr_descriptors_array* grib_bufr_descriptors_array_new(grib_context* c, size_t size, size_t incsize); +bufr_descriptors_array* grib_bufr_descriptors_array_new(size_t size, size_t incsize); bufr_descriptor* grib_bufr_descriptors_array_pop_front(bufr_descriptors_array* a); bufr_descriptors_array* grib_bufr_descriptors_array_push(bufr_descriptors_array* v, bufr_descriptor* val); bufr_descriptors_array* grib_bufr_descriptors_array_append(bufr_descriptors_array* v, bufr_descriptors_array* ar); @@ -128,30 +128,30 @@ size_t grib_bufr_descriptors_array_used_size(bufr_descriptors_array* v); /* grib_darray.cc */ void grib_darray_print(const char* title, const grib_darray* darray); -grib_darray* grib_darray_new(grib_context* c, size_t size, size_t incsize); -grib_darray* grib_darray_push(grib_context* c, grib_darray* v, double val); -void grib_darray_delete(grib_context* c, grib_darray* v); +grib_darray* grib_darray_new(size_t size, size_t incsize); +grib_darray* grib_darray_push(grib_darray* v, double val); +void grib_darray_delete(grib_darray* v); int grib_darray_is_constant(grib_darray* v, double epsilon); size_t grib_darray_used_size(grib_darray* v); /* grib_sarray.cc */ void grib_sarray_print(const char* title, const grib_sarray* sarray); -grib_sarray* grib_sarray_new(grib_context* c, size_t size, size_t incsize); -grib_sarray* grib_sarray_push(grib_context* c, grib_sarray* v, char* val); -void grib_sarray_delete(grib_context* c, grib_sarray* v); -void grib_sarray_delete_content(grib_context* c, grib_sarray* v); -char** grib_sarray_get_array(grib_context* c, grib_sarray* v); +grib_sarray* grib_sarray_new(size_t size, size_t incsize); +grib_sarray* grib_sarray_push(grib_sarray* v, char* val); +void grib_sarray_delete(grib_sarray* v); +void grib_sarray_delete_content(grib_sarray* v); +char** grib_sarray_get_array(grib_sarray* v); size_t grib_sarray_used_size(grib_sarray* v); /* grib_oarray.cc */ -grib_oarray* grib_oarray_new(grib_context* c, size_t size, size_t incsize); -grib_oarray* grib_oarray_push(grib_context* c, grib_oarray* v, void* val); -void grib_oarray_delete(grib_context* c, grib_oarray* v); +grib_oarray* grib_oarray_new(size_t size, size_t incsize); +grib_oarray* grib_oarray_push(grib_oarray* v, void* val); +void grib_oarray_delete(grib_oarray* v); void* grib_oarray_get(grib_oarray* v, int i); /* grib_iarray.cc */ void grib_iarray_print(const char* title, const grib_iarray* iarray); -grib_iarray* grib_iarray_new(grib_context* c, size_t size, size_t incsize); +grib_iarray* grib_iarray_new(size_t size, size_t incsize); long grib_iarray_pop(grib_iarray* a); long grib_iarray_pop_front(grib_iarray* a); grib_iarray* grib_iarray_push(grib_iarray* v, long val); @@ -162,26 +162,26 @@ size_t grib_iarray_used_size(grib_iarray* v); /* grib_vdarray.cc */ void grib_vdarray_print(const char* title, const grib_vdarray* vdarray); -grib_vdarray* grib_vdarray_new(grib_context* c, size_t size, size_t incsize); -grib_vdarray* grib_vdarray_push(grib_context* c, grib_vdarray* v, grib_darray* val); -void grib_vdarray_delete(grib_context* c, grib_vdarray* v); -void grib_vdarray_delete_content(grib_context* c, grib_vdarray* v); +grib_vdarray* grib_vdarray_new(size_t size, size_t incsize); +grib_vdarray* grib_vdarray_push(grib_vdarray* v, grib_darray* val); +void grib_vdarray_delete(grib_vdarray* v); +void grib_vdarray_delete_content(grib_vdarray* v); size_t grib_vdarray_used_size(grib_vdarray* v); /* grib_vsarray.cc */ void grib_vsarray_print(const char* title, const grib_vsarray* vdarray); -grib_vsarray* grib_vsarray_new(grib_context* c, size_t size, size_t incsize); -grib_vsarray* grib_vsarray_push(grib_context* c, grib_vsarray* v, grib_sarray* val); -void grib_vsarray_delete(grib_context* c, grib_vsarray* v); -void grib_vsarray_delete_content(grib_context* c, grib_vsarray* v); +grib_vsarray* grib_vsarray_new(size_t size, size_t incsize); +grib_vsarray* grib_vsarray_push(grib_vsarray* v, grib_sarray* val); +void grib_vsarray_delete(grib_vsarray* v); +void grib_vsarray_delete_content(grib_vsarray* v); size_t grib_vsarray_used_size(grib_vsarray* v); /* grib_viarray.cc */ void grib_viarray_print(const char* title, const grib_viarray* viarray); -grib_viarray* grib_viarray_new(grib_context* c, size_t size, size_t incsize); -grib_viarray* grib_viarray_push(grib_context* c, grib_viarray* v, grib_iarray* val); -void grib_viarray_delete(grib_context* c, grib_viarray* v); -void grib_viarray_delete_content(grib_context* c, grib_viarray* v); +grib_viarray* grib_viarray_new(size_t size, size_t incsize); +grib_viarray* grib_viarray_push(grib_viarray* v, grib_iarray* val); +void grib_viarray_delete(grib_viarray* v); +void grib_viarray_delete_content(grib_viarray* v); /* grib_accessor_class_ascii.cc*/ @@ -196,15 +196,15 @@ void grib_viarray_delete_content(grib_context* c, grib_viarray* v); /* grib_accessor_class_bufr_data_array.cc*/ /* grib_accessor_class_bufr_data_element.cc */ -void accessor_bufr_data_element_set_index(grib_accessor* a, long index); -void accessor_bufr_data_element_set_type(grib_accessor* a, int type); -void accessor_bufr_data_element_set_numberOfSubsets(grib_accessor* a, long numberOfSubsets); -void accessor_bufr_data_element_set_subsetNumber(grib_accessor* a, long subsetNumber); -void accessor_bufr_data_element_set_compressedData(grib_accessor* a, int compressedData); -void accessor_bufr_data_element_set_descriptors(grib_accessor* a, bufr_descriptors_array* descriptors); -void accessor_bufr_data_element_set_numericValues(grib_accessor* a, grib_vdarray* numericValues); -void accessor_bufr_data_element_set_stringValues(grib_accessor* a, grib_vsarray* stringValues); -void accessor_bufr_data_element_set_elementsDescriptorsIndex(grib_accessor* a, grib_viarray* elementsDescriptorsIndex); +//void accessor_bufr_data_element_set_index(grib_accessor* a, long index); +//void accessor_bufr_data_element_set_type(grib_accessor* a, int type); +//void accessor_bufr_data_element_set_numberOfSubsets(grib_accessor* a, long numberOfSubsets); +//void accessor_bufr_data_element_set_subsetNumber(grib_accessor* a, long subsetNumber); +//void accessor_bufr_data_element_set_compressedData(grib_accessor* a, int compressedData); +//void accessor_bufr_data_element_set_descriptors(grib_accessor* a, bufr_descriptors_array* descriptors); +//void accessor_bufr_data_element_set_numericValues(grib_accessor* a, grib_vdarray* numericValues); +//void accessor_bufr_data_element_set_stringValues(grib_accessor* a, grib_vsarray* stringValues); +//void accessor_bufr_data_element_set_elementsDescriptorsIndex(grib_accessor* a, grib_viarray* elementsDescriptorsIndex); /* grib_accessor_class_bufr_elements_table.cc */ int bufr_descriptor_is_marker(bufr_descriptor* d); @@ -242,7 +242,7 @@ grib_nearest* grib_nearest_new(const grib_handle* h, int* error); int grib_get_g1_message_size(grib_handle* h, grib_accessor* tl, grib_accessor* s4, long* total_length, long* sec4_len); /* grib_accessor_class_variable.cc */ -void accessor_variable_set_type(grib_accessor* a, int type); +//void accessor_variable_set_type(grib_accessor* a, int type); /* grib_accessor_class_expanded_descriptors.cc */ int grib_accessor_class_expanded_descriptors_set_do_expand(grib_accessor* a, long do_expand); @@ -450,7 +450,7 @@ bufr_descriptors_array* grib_context_expanded_descriptors_list_get(grib_context* void grib_context_expanded_descriptors_list_push(grib_context* c, const char* key, bufr_descriptors_array* expanded, bufr_descriptors_array* unexpanded); void codes_set_codes_assertion_failed_proc(codes_assertion_failed_proc proc); void codes_assertion_failed(const char* message, const char* file, int line); -int grib_get_gribex_mode(grib_context* c); +int grib_get_gribex_mode(const grib_context* c); void grib_gribex_mode_on(grib_context* c); void grib_gribex_mode_off(grib_context* c); void grib_gts_header_on(grib_context* c); @@ -486,6 +486,7 @@ void grib_file_close(const char* filename, int force, int* err); void grib_file_close_all(int* err); grib_file* grib_get_file(const char* filename, int* err); void grib_file_delete(grib_file* file); +void grib_file_pool_print(const char* title, FILE* out); /* grib_geography.cc */ int grib_get_gaussian_latitudes(long trunc, double* lats); @@ -732,8 +733,9 @@ int grib_get_string_array(const grib_handle* h, const char* name, char** val, si int grib_get_long_array_internal(grib_handle* h, const char* name, long* val, size_t* length); int grib_get_long_array(const grib_handle* h, const char* name, long* val, size_t* length); int grib_set_values(grib_handle* h, grib_values* args, size_t count); +int grib_set_values_silent(grib_handle* h, grib_values* args, size_t count, int silent); int grib_get_nearest_smaller_value(grib_handle* h, const char* name, double val, double* nearest); -void grib_print_values(const char* title, grib_values* values, FILE* out); +void grib_print_values(const char* title, const grib_values* values, FILE* out, int count); int grib_values_check(grib_handle* h, grib_values* values, int count); int codes_copy_key(grib_handle* h1, grib_handle* h2, const char* key, int type); int codes_compare_key(grib_handle* h1, grib_handle* h2, const char* key, int compare_flags); @@ -811,15 +813,15 @@ grib_nearest* grib_nearest_factory(grib_handle* h, grib_arguments* args, int* er /* grib_iterator.cc */ int grib_get_data(const grib_handle* h, double* lats, double* lons, double* values); -int grib_iterator_next(grib_iterator* i, double* lat, double* lon, double* value); -int grib_iterator_has_next(grib_iterator* i); -int grib_iterator_previous(grib_iterator* i, double* lat, double* lon, double* value); -int grib_iterator_reset(grib_iterator* i); -int grib_iterator_init(grib_iterator* i, grib_handle* h, grib_arguments* args); -int grib_iterator_delete(grib_iterator* i); +//int grib_iterator_next(grib_iterator* i, double* lat, double* lon, double* value); +//int grib_iterator_has_next(grib_iterator* i); +//int grib_iterator_previous(grib_iterator* i, double* lat, double* lon, double* value); +//int grib_iterator_reset(grib_iterator* i); +//int grib_iterator_init(grib_iterator* i, grib_handle* h, grib_arguments* args); +//int grib_iterator_delete(grib_iterator* i); /* grib_iterator_class.cc */ -grib_iterator* grib_iterator_factory(grib_handle* h, grib_arguments* args, unsigned long flags, int* error); +eccodes::geo_iterator::Iterator* grib_iterator_factory(grib_handle* h, grib_arguments* args, unsigned long flags, int* error); /* grib_iterator_class_gen.cc */ int transform_iterator_data(grib_context* c, double* data, long iScansNegatively, long jScansPositively, long jPointsAreConsecutive, long alternativeRowScanning, size_t numPoints, long nx, long ny); @@ -854,9 +856,12 @@ int codes_flush_sync_close_file(FILE* f); int is_date_valid(long year, long month, long day, long hour, long minute, double second); int is_time_valid(long number); // number is HHMM long convert_to_minutes(long step, long stepUnits); -bool is_sorted_ascending(double arr[], size_t n); -bool is_sorted_descending(double arr[], size_t n); +bool is_sorted_ascending(const double arr[], size_t n); +bool is_sorted_descending(const double arr[], size_t n); int compute_scaled_value_and_scale_factor(double input, int64_t scaled_value_max, int64_t scale_factor_max, int64_t* ret_value, int64_t* ret_factor); +int codes_is_feature_enabled(const char* feature); +int codes_get_features(char* result, size_t* length, int select); + /* grib_util.cc */ grib_handle* grib_util_sections_copy(grib_handle* hfrom, grib_handle* hto, int what, int* err); diff --git a/src/expression.class b/src/expression.class index 64c9a2e70..0db380e7c 100644 --- a/src/expression.class +++ b/src/expression.class @@ -2,7 +2,7 @@ typedef const char* string; /* to keep make_class.pl happy */ static void init(grib_expression* e); static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static string get_name(grib_expression* e); static int native_type(grib_expression*,grib_handle*); @@ -18,12 +18,12 @@ typedef struct grib_expression_NAME{ extern grib_expression_class* SUPER; static grib_expression_class _grib_expression_class_NAME = { - &SUPER, /* super */ - "NAME", /* name */ - sizeof(grib_expression_NAME),/* size of instance */ + &SUPER, /* super */ + "NAME", /* name */ + sizeof(grib_expression_NAME),/* size of instance */ 0, /* inited */ - &init, /* constructor */ - &destroy, /* destructor */ + &init, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/geo_iterator/grib_iterator.cc b/src/geo_iterator/grib_iterator.cc new file mode 100644 index 000000000..5e4026943 --- /dev/null +++ b/src/geo_iterator/grib_iterator.cc @@ -0,0 +1,131 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + ***************************************************************************/ +#include "grib_iterator.h" +#include "accessor/grib_accessor_class_iterator.h" + +namespace eccodes::geo_iterator { + +int Iterator::init(grib_handle* h, grib_arguments* args) +{ + h_ = h; + return GRIB_SUCCESS; +} + +/* For this one, ALL destroy are called */ +int Iterator::destroy() +{ + delete this; + return GRIB_SUCCESS; +} + +eccodes::geo_iterator::Iterator* gribIteratorNew(const grib_handle* ch, unsigned long flags, int* error) +{ + *error = GRIB_NOT_IMPLEMENTED; + + grib_handle* h = (grib_handle*)ch; + grib_accessor* a = grib_find_accessor(h, "ITERATOR"); + grib_accessor_iterator_t* ita = (grib_accessor_iterator_t*)a; + + if (!a) + return NULL; + + eccodes::geo_iterator::Iterator* iter = grib_iterator_factory(h, ita->args_, flags, error); + + if (iter) + *error = GRIB_SUCCESS; + + return iter; +} + +int gribIteratorDelete(eccodes::geo_iterator::Iterator* i) +{ + if (i) + i->destroy(); + return GRIB_SUCCESS; +} + + +} // namespace eccodes::geo_iterator + + +/* + * C API Implementation + * codes_iterator_* wrappers are in eccodes.h and eccodes.cc + * grib_iterator_* declarations are in grib_api.h + */ + +int grib_iterator_reset(grib_iterator* i) +{ + return i->iterator->reset(); +} + +int grib_iterator_has_next(grib_iterator* i) +{ + return i->iterator->has_next(); +} + +int grib_iterator_next(grib_iterator* i, double* lat, double* lon, double* value) +{ + return i->iterator->next(lat, lon, value); +} + +int grib_iterator_previous(grib_iterator* i, double* lat, double* lon, double* value) +{ + return i->iterator->previous(lat, lon, value); +} + +int grib_iterator_destroy(grib_context* c, grib_iterator* i) +{ + return i->iterator->destroy(); +} + +#if defined(HAVE_GEOGRAPHY) +grib_iterator* grib_iterator_new(const grib_handle* ch, unsigned long flags, int* error) +{ + grib_iterator* i = (grib_iterator*)grib_context_malloc_clear(ch->context, sizeof(grib_iterator)); + i->iterator = eccodes::geo_iterator::gribIteratorNew(ch, flags, error); + if (!i->iterator) { + grib_context_free(ch->context, i); + return NULL; + } + return i; +} + +int grib_iterator_delete(grib_iterator* i) +{ + if (i) { + grib_context* c = grib_context_get_default(); + gribIteratorDelete(i->iterator); + grib_context_free(c, i); + } + return GRIB_SUCCESS; +} + +#else +grib_iterator* grib_iterator_new(const grib_handle* ch, unsigned long flags, int* error) +{ + *error = GRIB_FUNCTIONALITY_NOT_ENABLED; + grib_context_log(ch->context, GRIB_LOG_ERROR, + "Geoiterator functionality not enabled. Please rebuild with -DENABLE_GEOGRAPHY=ON"); + + return NULL; +} + +int grib_iterator_delete(grib_iterator* i) +{ + grib_context_log(ch->context, GRIB_LOG_ERROR, + "Geoiterator functionality not enabled. Please rebuild with -DENABLE_GEOGRAPHY=ON"); + return GRIB_FUNCTIONALITY_NOT_ENABLED; +} +#endif diff --git a/src/geo_iterator/grib_iterator.h b/src/geo_iterator/grib_iterator.h new file mode 100644 index 000000000..4905c39ae --- /dev/null +++ b/src/geo_iterator/grib_iterator.h @@ -0,0 +1,44 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include "grib_api_internal.h" + +// GRIB geoiterator, class supporting geographic iteration of values on a GRIB message + +namespace eccodes::geo_iterator { + +class Iterator +{ +public: + virtual ~Iterator() {} + virtual int init(grib_handle*, grib_arguments*) = 0; + virtual int next(double*, double*, double*) const = 0; + virtual int previous(double*, double*, double*) const = 0; + virtual int reset() = 0; + virtual int destroy() = 0; + virtual bool has_next() const = 0; + virtual Iterator* create() const = 0; + + unsigned long flags_ = 0; + +protected: + grib_handle* h_ = nullptr; + double* data_ = nullptr; // data values + mutable long e_ = 0; // current element + size_t nv_ = 0; // number of values + const char* class_name_ = nullptr; +}; + +eccodes::geo_iterator::Iterator* gribIteratorNew(const grib_handle*, unsigned long, int*); +int gribIteratorDelete(eccodes::geo_iterator::Iterator*); + +} // namespace eccodes::geo_iterator diff --git a/src/grib_iterator_class_gaussian.cc b/src/geo_iterator/grib_iterator_class_gaussian.cc similarity index 58% rename from src/grib_iterator_class_gaussian.cc rename to src/geo_iterator/grib_iterator_class_gaussian.cc index 714aa4d35..da50560ef 100644 --- a/src/grib_iterator_class_gaussian.cc +++ b/src/geo_iterator/grib_iterator_class_gaussian.cc @@ -8,105 +8,35 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -#include "grib_api_internal.h" -#include +#include "grib_iterator_class_gaussian.h" -/* - This is used by make_class.pl +eccodes::geo_iterator::Gaussian _grib_iterator_gaussian{}; +eccodes::geo_iterator::Iterator* grib_iterator_gaussian = &_grib_iterator_gaussian; - START_CLASS_DEF - CLASS = iterator - SUPER = grib_iterator_class_regular - IMPLEMENTS = init - END_CLASS_DEF - - */ - -/* START_CLASS_IMP */ - -/* - -Don't edit anything between START_CLASS_IMP and END_CLASS_IMP -Instead edit values between START_CLASS_DEF and END_CLASS_DEF -or edit "iterator.class" and rerun ./make_class.pl - -*/ - - -static void init_class (grib_iterator_class*); - -static int init (grib_iterator* i,grib_handle*,grib_arguments*); - - -typedef struct grib_iterator_gaussian{ - grib_iterator it; - /* Members defined in gen */ - int carg; - const char* missingValue; - /* Members defined in regular */ - double *las; - double *los; - long Ni; - long Nj; - long iScansNegatively; - long isRotated; - double angleOfRotation; - double southPoleLat; - double southPoleLon; - long jPointsAreConsecutive; - long disableUnrotate; - /* Members defined in gaussian */ -} grib_iterator_gaussian; - -extern grib_iterator_class* grib_iterator_class_regular; - -static grib_iterator_class _grib_iterator_class_gaussian = { - &grib_iterator_class_regular, /* super */ - "gaussian", /* name */ - sizeof(grib_iterator_gaussian),/* size of instance */ - 0, /* inited */ - &init_class, /* init_class */ - &init, /* constructor */ - 0, /* destructor */ - 0, /* Next Value */ - 0, /* Previous Value */ - 0, /* Reset the counter */ - 0, /* has next values */ -}; - -grib_iterator_class* grib_iterator_class_gaussian = &_grib_iterator_class_gaussian; - - -static void init_class(grib_iterator_class* c) -{ - c->next = (*(c->super))->next; - c->previous = (*(c->super))->previous; - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; -} -/* END_CLASS_IMP */ +namespace eccodes::geo_iterator { static void binary_search_gaussian_latitudes(const double xx[], const unsigned long n, double x, long* j); -static int init(grib_iterator* i, grib_handle* h, grib_arguments* args) +int Gaussian::init(grib_handle* h, grib_arguments* args) { - grib_iterator_gaussian* self = (grib_iterator_gaussian*)i; + int ret = GRIB_SUCCESS; + if ((ret = Regular::init(h, args)) != GRIB_SUCCESS) + return ret; double* lats; double laf; /* latitude of first point in degrees */ double lal; /* latitude of last point in degrees */ long trunc; /* number of parallels between a pole and the equator */ - long lai = 0; + long lai = 0; long jScansPositively = 0; - int size = 0; + int size = 0; double start; long istart = 0; - int ret = GRIB_SUCCESS; - const char* latofirst = grib_arguments_get_name(h, args, self->carg++); - const char* latoflast = grib_arguments_get_name(h, args, self->carg++); - const char* numtrunc = grib_arguments_get_name(h, args, self->carg++); - const char* s_jScansPositively = grib_arguments_get_name(h, args, self->carg++); + const char* latofirst = grib_arguments_get_name(h, args, carg_++); + const char* latoflast = grib_arguments_get_name(h, args, carg_++); + const char* numtrunc = grib_arguments_get_name(h, args, carg_++); + const char* s_jScansPositively = grib_arguments_get_name(h, args, carg_++); if ((ret = grib_get_double_internal(h, latofirst, &laf))) return ret; @@ -137,22 +67,22 @@ static int init(grib_iterator* i, grib_handle* h, grib_arguments* args) } */ - binary_search_gaussian_latitudes(lats, size-1, start, &istart); + binary_search_gaussian_latitudes(lats, size - 1, start, &istart); if (istart < 0 || istart >= size) { grib_context_log(h->context, GRIB_LOG_ERROR, "Failed to find index for latitude=%g", start); return GRIB_GEOCALCULUS_PROBLEM; } if (jScansPositively) { - for (lai = 0; lai < self->Nj; lai++) { + for (lai = 0; lai < Nj_; lai++) { DEBUG_ASSERT(istart >= 0); - self->las[lai] = lats[istart--]; - if (istart<0) istart=size-1; + lats_[lai] = lats[istart--]; + if (istart < 0) istart = size - 1; } } else { - for (lai = 0; lai < self->Nj; lai++) { - self->las[lai] = lats[istart++]; + for (lai = 0; lai < Nj_; lai++) { + lats_[lai] = lats[istart++]; if (istart > size - 1) istart = 0; } @@ -167,7 +97,7 @@ static int init(grib_iterator* i, grib_handle* h, grib_arguments* args) /* Note: the argument 'n' is NOT the size of the 'xx' array but its LAST index i.e. size of xx - 1 */ static void binary_search_gaussian_latitudes(const double array[], const unsigned long n, double x, long* j) { - unsigned long low = 0; + unsigned long low = 0; unsigned long high = n; unsigned long mid; const int descending = (array[n] < array[0]); @@ -216,3 +146,5 @@ static void binary_search_gaussian_latitudes(const double array[], const unsigne // } // *j = jl; // } + +} // namespace eccodes::geo_iterator diff --git a/src/grib_emoslib.h b/src/geo_iterator/grib_iterator_class_gaussian.h similarity index 52% rename from src/grib_emoslib.h rename to src/geo_iterator/grib_iterator_class_gaussian.h index 0b15aef3a..5c0696f13 100644 --- a/src/grib_emoslib.h +++ b/src/geo_iterator/grib_iterator_class_gaussian.h @@ -8,6 +8,21 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -int igglat_(long* KLAT, float* PGAUSS, long* KPR, long* KERR); -void gribex_(long* KSEC0, long* KSEC1, long* KSEC2, double* PSEC2, long* KSEC3, double* PSEC3, long* KSEC4, - double* PSEC4, long* KLENP, void* KGRIB, long* KLENG, long* KWORD, char* HOPER, long* KRET); +#pragma once + +#include "grib_iterator_class_regular.h" + +namespace eccodes::geo_iterator { + +class Gaussian : public Regular +{ +public: + Gaussian() : + Regular() { class_name_ = "gaussian"; } + Iterator* create() const override { return new Gaussian(); } + + int init(grib_handle*, grib_arguments*) override; +}; + +} // namespace eccodes::geo_iterator + diff --git a/src/grib_iterator_class_gaussian_reduced.cc b/src/geo_iterator/grib_iterator_class_gaussian_reduced.cc similarity index 57% rename from src/grib_iterator_class_gaussian_reduced.cc rename to src/geo_iterator/grib_iterator_class_gaussian_reduced.cc index b21f680b1..cb06386e7 100644 --- a/src/grib_iterator_class_gaussian_reduced.cc +++ b/src/geo_iterator/grib_iterator_class_gaussian_reduced.cc @@ -8,111 +8,34 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -#include "grib_api_internal.h" +#include "grib_iterator_class_gaussian_reduced.h" #include -/* - This is used by make_class.pl +eccodes::geo_iterator::GaussianReduced _grib_iterator_gaussian_reduced{}; +eccodes::geo_iterator::Iterator* grib_iterator_gaussian_reduced = &_grib_iterator_gaussian_reduced; - START_CLASS_DEF - CLASS = iterator - SUPER = grib_iterator_class_gen - IMPLEMENTS = destroy - IMPLEMENTS = init;next - MEMBERS = double *las - MEMBERS = double *los - MEMBERS = long Nj - MEMBERS = long isRotated - MEMBERS = double angleOfRotation - MEMBERS = double southPoleLat - MEMBERS = double southPoleLon - MEMBERS = long disableUnrotate - END_CLASS_DEF - - */ - -/* START_CLASS_IMP */ - -/* - -Don't edit anything between START_CLASS_IMP and END_CLASS_IMP -Instead edit values between START_CLASS_DEF and END_CLASS_DEF -or edit "iterator.class" and rerun ./make_class.pl - -*/ - - -static void init_class (grib_iterator_class*); - -static int init (grib_iterator* i,grib_handle*,grib_arguments*); -static int next (grib_iterator* i, double *lat, double *lon, double *val); -static int destroy (grib_iterator* i); - - -typedef struct grib_iterator_gaussian_reduced{ - grib_iterator it; - /* Members defined in gen */ - int carg; - const char* missingValue; - /* Members defined in gaussian_reduced */ - double *las; - double *los; - long Nj; - long isRotated; - double angleOfRotation; - double southPoleLat; - double southPoleLon; - long disableUnrotate; -} grib_iterator_gaussian_reduced; - -extern grib_iterator_class* grib_iterator_class_gen; - -static grib_iterator_class _grib_iterator_class_gaussian_reduced = { - &grib_iterator_class_gen, /* super */ - "gaussian_reduced", /* name */ - sizeof(grib_iterator_gaussian_reduced),/* size of instance */ - 0, /* inited */ - &init_class, /* init_class */ - &init, /* constructor */ - &destroy, /* destructor */ - &next, /* Next Value */ - 0, /* Previous Value */ - 0, /* Reset the counter */ - 0, /* has next values */ -}; - -grib_iterator_class* grib_iterator_class_gaussian_reduced = &_grib_iterator_class_gaussian_reduced; - - -static void init_class(grib_iterator_class* c) -{ - c->previous = (*(c->super))->previous; - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; -} -/* END_CLASS_IMP */ +namespace eccodes::geo_iterator { #define ITER "Reduced Gaussian grid Geoiterator" -static int next(grib_iterator* iter, double* lat, double* lon, double* val) +int GaussianReduced::next(double* lat, double* lon, double* val) const { - grib_iterator_gaussian_reduced* self = (grib_iterator_gaussian_reduced*)iter; - double ret_lat=0, ret_lon=0; + double ret_lat = 0, ret_lon = 0; - if (iter->e >= (long)(iter->nv - 1)) + if (e_ >= (long)(nv_ - 1)) return 0; - iter->e++; + e_++; - ret_lat = self->las[iter->e]; - ret_lon = self->los[iter->e]; - if (val && iter->data) { - *val = iter->data[iter->e]; + ret_lat = lats_[e_]; + ret_lon = lons_[e_]; + if (val && data_) { + *val = data_[e_]; } - if (self->isRotated && !self->disableUnrotate) { + if (isRotated_ && !disableUnrotate_) { double new_lat = 0, new_lon = 0; unrotate(ret_lat, ret_lon, - self->angleOfRotation, self->southPoleLat, self->southPoleLon, + angleOfRotation_, southPoleLat_, southPoleLon_, &new_lat, &new_lon); ret_lat = new_lat; ret_lon = new_lon; @@ -172,10 +95,10 @@ static void binary_search(const double xx[], const unsigned long n, double x, lo } /* Use legacy way to compute the iterator latitude/longitude values */ -static int iterate_reduced_gaussian_subarea_legacy(grib_iterator* iter, grib_handle* h, - double lat_first, double lon_first, - double lat_last, double lon_last, - double* lats, long* pl, size_t plsize) +int GaussianReduced::iterate_reduced_gaussian_subarea_legacy(grib_handle* h, + double lat_first, double lon_first, + double lat_last, double lon_last, + double* lats, long* pl, size_t plsize) { int err = 0; int l = 0; @@ -183,9 +106,8 @@ static int iterate_reduced_gaussian_subarea_legacy(grib_iterator* iter, grib_han long row_count = 0; double d = 0; long ilon_first, ilon_last, i; - grib_iterator_gaussian_reduced* self = (grib_iterator_gaussian_reduced*)iter; /*get_reduced_row_proc get_reduced_row = &grib_get_reduced_row;*/ - get_reduced_row_proc get_reduced_row = &grib_get_reduced_row_legacy; /* legacy algorithm */ + get_reduced_row_proc get_reduced_row = &grib_get_reduced_row_legacy; /* legacy algorithm */ if (h->context->debug) { const size_t np = count_subarea_points(h, get_reduced_row, pl, plsize, lon_first, lon_last); @@ -198,7 +120,7 @@ static int iterate_reduced_gaussian_subarea_legacy(grib_iterator* iter, grib_han l++; } - iter->e = 0; + e_ = 0; for (j = 0; j < plsize; j++) { long k = 0; row_count = 0; @@ -207,16 +129,16 @@ static int iterate_reduced_gaussian_subarea_legacy(grib_iterator* iter, grib_han if (ilon_first > ilon_last) ilon_first -= pl[j]; for (i = ilon_first; i <= ilon_last; i++) { - if (iter->e >= iter->nv) { + if (e_ >= nv_) { size_t np = count_subarea_points(h, get_reduced_row, pl, plsize, lon_first, lon_last); grib_context_log(h->context, GRIB_LOG_ERROR, - "%s (sub-area legacy). Num points=%zu, size(values)=%zu", ITER, np, iter->nv); + "%s (sub-area legacy). Num points=%zu, size(values)=%zu", ITER, np, nv_); return GRIB_WRONG_GRID; } - self->los[iter->e] = ((i)*360.0) / pl[j]; - self->las[iter->e] = lats[j + l]; - iter->e++; + lons_[e_] = ((i) * 360.0) / pl[j]; + lats_[e_] = lats[j + l]; + e_++; k++; if (k >= row_count) { /* Ensure we exit the loop and only process 'row_count' points */ @@ -235,17 +157,16 @@ static int iterate_reduced_gaussian_subarea_legacy(grib_iterator* iter, grib_han // err = iterate_reduced_gaussian_subarea_algorithm2(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize); // } // return err; -static int iterate_reduced_gaussian_subarea(grib_iterator* iter, grib_handle* h, - double lat_first, double lon_first, - double lat_last, double lon_last, - double* lats, long* pl, size_t plsize, size_t numlats) +int GaussianReduced::iterate_reduced_gaussian_subarea(grib_handle* h, + double lat_first, double lon_first, + double lat_last, double lon_last, + double* lats, long* pl, size_t plsize, size_t numlats) { int err = 0; long l = 0; size_t j = 0; long row_count = 0, i = 0; double olon_first, olon_last; - grib_iterator_gaussian_reduced* self = (grib_iterator_gaussian_reduced*)iter; get_reduced_row_proc get_reduced_row = &grib_get_reduced_row; if (h->context->debug) { @@ -257,41 +178,41 @@ static int iterate_reduced_gaussian_subarea(grib_iterator* iter, grib_handle* h, binary_search(lats, numlats - 1, lat_first, &l); Assert(l < numlats); -// for(il=0; ile = 0; + e_ = 0; for (j = 0; j < plsize; j++) { const double delta = 360.0 / pl[j]; row_count = 0; grib_get_reduced_row_p(pl[j], lon_first, lon_last, &row_count, &olon_first, &olon_last); for (i = 0; i < row_count; ++i) { double lon2 = olon_first + i * delta; - if (iter->e >= iter->nv) { + if (e_ >= nv_) { /* Only print error message on the second pass */ size_t np = count_subarea_points(h, get_reduced_row, pl, plsize, lon_first, lon_last); grib_context_log(h->context, GRIB_LOG_ERROR, - "%s (sub-area). Num points=%zu, size(values)=%zu", ITER, np, iter->nv); + "%s (sub-area). Num points=%zu, size(values)=%zu", ITER, np, nv_); return GRIB_WRONG_GRID; } - self->los[iter->e] = lon2; + lons_[e_] = lon2; DEBUG_ASSERT(j + l < numlats); - self->las[iter->e] = lats[j + l]; - iter->e++; + lats_[e_] = lats[j + l]; + e_++; } } - if (iter->e != iter->nv) { + if (e_ != nv_) { /* Fewer counted points in the sub-area than the number of data values */ const size_t legacy_count = count_subarea_points(h, grib_get_reduced_row_legacy, pl, plsize, lon_first, lon_last); - if (iter->nv == legacy_count) { + if (nv_ == legacy_count) { /* Legacy (produced by PRODGEN/LIBEMOS) */ - return iterate_reduced_gaussian_subarea_legacy(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize); + return iterate_reduced_gaussian_subarea_legacy(h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize); } else { /* TODO: A gap exists! Not all values can be mapped. Inconsistent grid or error in calculating num. points! */ @@ -300,9 +221,13 @@ static int iterate_reduced_gaussian_subarea(grib_iterator* iter, grib_handle* h, return err; } -static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) +int GaussianReduced::init(grib_handle* h, grib_arguments* args) { - int ret = GRIB_SUCCESS, j, is_global = 0; + int ret = GRIB_SUCCESS; + if ((ret = Gen::init(h, args)) != GRIB_SUCCESS) + return ret; + + int j, is_global = 0; double lat_first = 0, lon_first = 0, lat_last = 0, lon_last = 0; double angular_precision = 1.0 / 1000000.0; double* lats; @@ -311,31 +236,30 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) long* pl; long max_pl = 0; long nj = 0, order = 0, i; - long row_count = 0; + long row_count = 0; long angleSubdivisions = 0; - const grib_context* c = h->context; - grib_iterator_gaussian_reduced* self = (grib_iterator_gaussian_reduced*)iter; - const char* slat_first = grib_arguments_get_name(h, args, self->carg++); - const char* slon_first = grib_arguments_get_name(h, args, self->carg++); - const char* slat_last = grib_arguments_get_name(h, args, self->carg++); - const char* slon_last = grib_arguments_get_name(h, args, self->carg++); - const char* sorder = grib_arguments_get_name(h, args, self->carg++); - const char* spl = grib_arguments_get_name(h, args, self->carg++); - const char* snj = grib_arguments_get_name(h, args, self->carg++); + const grib_context* c = h->context; + const char* slat_first = grib_arguments_get_name(h, args, carg_++); + const char* slon_first = grib_arguments_get_name(h, args, carg_++); + const char* slat_last = grib_arguments_get_name(h, args, carg_++); + const char* slon_last = grib_arguments_get_name(h, args, carg_++); + const char* sorder = grib_arguments_get_name(h, args, carg_++); + const char* spl = grib_arguments_get_name(h, args, carg_++); + const char* snj = grib_arguments_get_name(h, args, carg_++); - self->angleOfRotation = 0; - self->isRotated = 0; - self->southPoleLat = 0; - self->southPoleLon = 0; - self->disableUnrotate = 0; /* unrotate enabled by default */ + angleOfRotation_ = 0; + isRotated_ = 0; + southPoleLat_ = 0; + southPoleLon_ = 0; + disableUnrotate_ = 0; /* unrotate enabled by default */ - ret = grib_get_long(h, "isRotatedGrid", &self->isRotated); - if (ret == GRIB_SUCCESS && self->isRotated) { - if ((ret = grib_get_double_internal(h, "angleOfRotation", &self->angleOfRotation))) + ret = grib_get_long(h, "isRotatedGrid", &isRotated_); + if (ret == GRIB_SUCCESS && isRotated_) { + if ((ret = grib_get_double_internal(h, "angleOfRotation", &angleOfRotation_))) return ret; - if ((ret = grib_get_double_internal(h, "latitudeOfSouthernPoleInDegrees", &self->southPoleLat))) + if ((ret = grib_get_double_internal(h, "latitudeOfSouthernPoleInDegrees", &southPoleLat_))) return ret; - if ((ret = grib_get_double_internal(h, "longitudeOfSouthernPoleInDegrees", &self->southPoleLon))) + if ((ret = grib_get_double_internal(h, "longitudeOfSouthernPoleInDegrees", &southPoleLon_))) return ret; } @@ -379,11 +303,11 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) grib_get_long_array_internal(h, spl, pl, &plsize); - self->las = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); - if (!self->las) + lats_ = (double*)grib_context_malloc(h->context, nv_ * sizeof(double)); + if (!lats_) return GRIB_OUT_OF_MEMORY; - self->los = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); - if (!self->los) + lons_ = (double*)grib_context_malloc(h->context, nv_ * sizeof(double)); + if (!lons_) return GRIB_OUT_OF_MEMORY; while (lon_last < 0) @@ -402,11 +326,11 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) is_global = is_gaussian_global(lat_first, lat_last, lon_first, lon_last, max_pl, lats, angular_precision); if (!is_global) { /*sub area*/ - ret = iterate_reduced_gaussian_subarea(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize, numlats); + ret = iterate_reduced_gaussian_subarea(h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize, numlats); } else { /*global*/ - iter->e = 0; + e_ = 0; if (h->context->debug) { const size_t np = count_global_points(pl, plsize); fprintf(stderr, "ECCODES DEBUG grib_iterator_class_gaussian_reduced: global num points=%zu\n", np); @@ -415,37 +339,39 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) for (j = 0; j < plsize; j++) { row_count = pl[j]; for (i = 0; i < row_count; i++) { - if (iter->e >= iter->nv) { + if (e_ >= nv_) { /*grib_context_log(h->context,GRIB_LOG_ERROR, "Failed to initialise reduced Gaussian iterator (global)");*/ /*return GRIB_WRONG_GRID;*/ /*Try now as NON-global*/ - ret = iterate_reduced_gaussian_subarea(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize, numlats); + ret = iterate_reduced_gaussian_subarea(h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize, numlats); if (ret != GRIB_SUCCESS) grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Failed to initialise iterator (global)", ITER); goto finalise; } - self->los[iter->e] = (i * 360.0) / row_count; - self->las[iter->e] = lats[j]; - iter->e++; + lons_[e_] = (i * 360.0) / row_count; + lats_[e_] = lats[j]; + e_++; } } } finalise: - iter->e = -1; + e_ = -1; grib_context_free(h->context, lats); grib_context_free(h->context, pl); return ret; } -static int destroy(grib_iterator* iter) +int GaussianReduced::destroy() { - grib_iterator_gaussian_reduced* self = (grib_iterator_gaussian_reduced*)iter; - const grib_context* c = iter->h->context; + DEBUG_ASSERT(h_); + const grib_context* c = h_->context; + grib_context_free(c, lats_); + grib_context_free(c, lons_); - grib_context_free(c, self->las); - grib_context_free(c, self->los); - return GRIB_SUCCESS; + return Gen::destroy(); } + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_gaussian_reduced.h b/src/geo_iterator/grib_iterator_class_gaussian_reduced.h new file mode 100644 index 000000000..815a3a4be --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_gaussian_reduced.h @@ -0,0 +1,46 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include "grib_iterator_class_gen.h" + +namespace eccodes::geo_iterator { + +class GaussianReduced : public Gen +{ +public: + GaussianReduced() : + Gen() { class_name_ = "gaussian_reduced"; } + Iterator* create() const override { return new GaussianReduced(); } + + int init(grib_handle*, grib_arguments*) override; + int next(double*, double*, double*) const override; + int destroy() override; + +private: + long isRotated_ = 0; + double angleOfRotation_ = 0.; + double southPoleLat_ = 0.; + double southPoleLon_ = 0.; + long disableUnrotate_ = 0; + + int iterate_reduced_gaussian_subarea_legacy(grib_handle*, + double, double, + double, double, + double*, long*, size_t); + + int iterate_reduced_gaussian_subarea(grib_handle*, + double, double, + double, double, + double*, long*, size_t, size_t); +}; + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_gen.cc b/src/geo_iterator/grib_iterator_class_gen.cc new file mode 100644 index 000000000..1e14b9e37 --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_gen.cc @@ -0,0 +1,122 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#include "grib_iterator_class_gen.h" + +namespace eccodes::geo_iterator { + +int Gen::init(grib_handle* h, grib_arguments* args) +{ + int err = GRIB_SUCCESS; + lats_ = lons_ = data_ = NULL; + + if ((err = Iterator::init(h, args)) != GRIB_SUCCESS) + return err; + + // Skip the 1st argument which is the name of the iterator itself + // e.g., latlon, gaussian_reduced etc + carg_ = 1; // start from 1 and not 0 + + const char* s_numPoints = grib_arguments_get_name(h, args, carg_++); + // The missingValue argument is not currently used. Skip it + carg_++; //const char* s_missingValue = grib_arguments_get_name(h, args, carg_++); + const char* s_rawData = grib_arguments_get_name(h, args, carg_++); + + size_t dli = 0; + if ((err = grib_get_size(h, s_rawData, &dli)) != GRIB_SUCCESS) + return err; + + long numberOfPoints = 0; + if ((err = grib_get_long_internal(h, s_numPoints, &numberOfPoints)) != GRIB_SUCCESS) + return err; + + // See ECC-1792. If we don't want to decode the Data Section, we should not do a check + // to see if it is consistent with the Grid Section + if (flags_ & GRIB_GEOITERATOR_NO_VALUES) { + // Iterator's number of values taken from the Grid Section + nv_ = numberOfPoints; + } + else { + // Check for consistency between the Grid and Data Sections + if (numberOfPoints != dli) { + grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator: %s != size(%s) (%ld!=%ld)", + s_numPoints, s_rawData, numberOfPoints, dli); + return GRIB_WRONG_GRID; + } + nv_ = dli; + } + + if (nv_ == 0) { + grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator: size(%s) is %ld", s_rawData, dli); + return GRIB_WRONG_GRID; + } + + if ((flags_ & GRIB_GEOITERATOR_NO_VALUES) == 0) { + // ECC-1525 + // When the NO_VALUES flag is unset, decode the values and store them in the iterator. + // By default (and legacy) flags==0, so we decode + data_ = (double*)grib_context_malloc(h->context, (nv_) * sizeof(double)); + + if ((err = grib_get_double_array_internal(h, s_rawData, data_, &(nv_)))) { + return err; + } + } + e_ = -1; + + return err; +} + +int Gen::reset() +{ + e_ = -1; + return 0; +} + +int Gen::destroy() +{ + const grib_context* c = h_->context; + grib_context_free(c, data_); + + return Iterator::destroy(); +} + +bool Gen::has_next() const +{ + if (flags_ == 0 && data_ == NULL) + return false; + if (e_ >= (long)(nv_ - 1)) + return false; + return true; +} + +int Gen::previous(double*, double*, double*) const +{ + return GRIB_NOT_IMPLEMENTED; +} + +int Gen::next(double*, double*, double*) const +{ + return GRIB_NOT_IMPLEMENTED; +} + +// int Gen::get(double* lat, double* lon, double* val) +//{ +// if (e_ >= (long)(nv_ - 1)) +// return GRIB_END_OF_ITERATION; + +// e_++; +// if (lat) *lat = 0; +// if (lon) *lon = 0; +// if (val) *val = 0; + +// return 1; +//} + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_gen.h b/src/geo_iterator/grib_iterator_class_gen.h new file mode 100644 index 000000000..385f6bd16 --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_gen.h @@ -0,0 +1,40 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include "grib_iterator.h" + +namespace eccodes::geo_iterator { + +class Gen : public Iterator +{ +public: + Gen() : + Iterator() { class_name_ = "gen"; } + // Iterator* create() const override { return new Gen(); } + + int init(grib_handle*, grib_arguments*) override; + int next(double*, double*, double*) const override; + int previous(double*, double*, double*) const override; + int reset() override; + int destroy() override; + bool has_next() const override; + +protected: + int carg_ = 0; + double* lats_ = nullptr; + double* lons_ = nullptr; + +private: + //int get(double*, double*, double*); +}; + +} // namespace eccodes::geo_iterator diff --git a/src/grib_iterator_class_healpix.cc b/src/geo_iterator/grib_iterator_class_healpix.cc similarity index 70% rename from src/grib_iterator_class_healpix.cc rename to src/geo_iterator/grib_iterator_class_healpix.cc index 6a545b6c5..7b4ac56ef 100644 --- a/src/grib_iterator_class_healpix.cc +++ b/src/geo_iterator/grib_iterator_class_healpix.cc @@ -8,93 +8,22 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -#include "grib_api_internal.h" +#include "grib_iterator_class_healpix.h" #include #include #include #include -#include #include -/* - This is used by make_class.pl +eccodes::geo_iterator::Healpix _grib_iterator_healpix; +eccodes::geo_iterator::Iterator* grib_iterator_healpix = &_grib_iterator_healpix; - START_CLASS_DEF - CLASS = iterator - SUPER = grib_iterator_class_gen - IMPLEMENTS = destroy - IMPLEMENTS = init;next - MEMBERS = double *lats - MEMBERS = double *lons - MEMBERS = long Nsides - MEMBERS = bool nested - END_CLASS_DEF -*/ - -/* START_CLASS_IMP */ - -/* - -Don't edit anything between START_CLASS_IMP and END_CLASS_IMP -Instead edit values between START_CLASS_DEF and END_CLASS_DEF -or edit "iterator.class" and rerun ./make_class.pl - -*/ - - -static void init_class (grib_iterator_class*); - -static int init (grib_iterator* i,grib_handle*,grib_arguments*); -static int next (grib_iterator* i, double *lat, double *lon, double *val); -static int destroy (grib_iterator* i); - - -typedef struct grib_iterator_healpix{ - grib_iterator it; - /* Members defined in gen */ - int carg; - const char* missingValue; - /* Members defined in healpix */ - double *lats; - double *lons; - long Nsides; - bool nested; -} grib_iterator_healpix; - -extern grib_iterator_class* grib_iterator_class_gen; - -static grib_iterator_class _grib_iterator_class_healpix = { - &grib_iterator_class_gen, /* super */ - "healpix", /* name */ - sizeof(grib_iterator_healpix),/* size of instance */ - 0, /* inited */ - &init_class, /* init_class */ - &init, /* constructor */ - &destroy, /* destructor */ - &next, /* Next Value */ - 0, /* Previous Value */ - 0, /* Reset the counter */ - 0, /* has next values */ -}; - -grib_iterator_class* grib_iterator_class_healpix = &_grib_iterator_class_healpix; - - -static void init_class(grib_iterator_class* c) -{ - c->previous = (*(c->super))->previous; - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; -} -/* END_CLASS_IMP */ +namespace eccodes::geo_iterator { #define ITER "HEALPix Geoiterator" constexpr double RAD2DEG = 57.29577951308232087684; // 180 over pi -namespace -{ - struct CodecFijNest { static constexpr uint64_t __masks[] = { 0x00000000ffffffff, 0x0000ffff0000ffff, 0x00ff00ff00ff00ff, @@ -211,7 +140,7 @@ static std::vector HEALPix_longitudes(size_t N, size_t i) return longitudes; } -static int iterate_healpix(grib_iterator_healpix* self, long N) +int Healpix::iterate_healpix(long N) { size_t Ny = 4 * static_cast(N) - 1; auto Nd = static_cast(N); @@ -241,7 +170,7 @@ static int iterate_healpix(grib_iterator_healpix* self, long N) // Equator latitudes[2 * N - 1] = 0.0; - if (self->nested) { + if (nested_) { if (!is_power_of_2(N)) { grib_context* c = grib_context_get_default(); grib_context_log(c, GRIB_LOG_ERROR, "%s: For nested ordering, Nside must be a power of 2", ITER); @@ -309,21 +238,22 @@ static int iterate_healpix(grib_iterator_healpix* self, long N) ring_to_nest[r] = to_nest(f, ring, Nside, phi, ring & 1); } - for (size_t i = 0, j=0; i < Ny; i++) { - // Compute the longitudes at a given latitude - for (double longitude : HEALPix_longitudes(N, i)) { - Assert( ring_to_nest.at(j) < Npix ); - self->lons[ring_to_nest.at(j)] = longitude; - self->lats[ring_to_nest.at(j)] = latitudes[i]; - ++j; - } - } - } else { for (size_t i = 0, j = 0; i < Ny; i++) { // Compute the longitudes at a given latitude for (double longitude : HEALPix_longitudes(N, i)) { - self->lons[j] = longitude; - self->lats[j] = latitudes[i]; + Assert(ring_to_nest.at(j) < Npix); + lons_[ring_to_nest.at(j)] = longitude; + lats_[ring_to_nest.at(j)] = latitudes[i]; + ++j; + } + } + } + else { + for (size_t i = 0, j = 0; i < Ny; i++) { + // Compute the longitudes at a given latitude + for (double longitude : HEALPix_longitudes(N, i)) { + lons_[j] = longitude; + lats_[j] = latitudes[i]; ++j; } } @@ -332,15 +262,14 @@ static int iterate_healpix(grib_iterator_healpix* self, long N) return GRIB_SUCCESS; } -} // anonymous namespace - -static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) +int Healpix::init(grib_handle* h, grib_arguments* args) { - int err = 0; - grib_iterator_healpix* self = (grib_iterator_healpix*)iter; + int err = GRIB_SUCCESS; + if ((err = Gen::init(h, args)) != GRIB_SUCCESS) + return err; - const char* snside = grib_arguments_get_name(h, args, self->carg++); - const char* sorder = grib_arguments_get_name(h, args, self->carg++); + const char* snside = grib_arguments_get_name(h, args, carg_++); + const char* sorder = grib_arguments_get_name(h, args, carg_++); long N = 0; if ((err = grib_get_long_internal(h, snside, &N)) != GRIB_SUCCESS) { @@ -357,12 +286,12 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) return err; } - self->nested = STR_EQUAL(ordering, "nested"); - if (!STR_EQUAL(ordering, "ring") && !self->nested) { + nested_ = STR_EQUAL(ordering, "nested"); + if (!STR_EQUAL(ordering, "ring") && !nested_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Only orderingConvention=(ring|nested) are supported", ITER); return GRIB_GEOCALCULUS_PROBLEM; } - // if (self->nested && N == 1) { + // if (nested && N == 1) { // grib_context_log(h->context, GRIB_LOG_ERROR, "%s: For orderingConvention=nested, N must be greater than 1", ITER); // return GRIB_GEOCALCULUS_PROBLEM; // } @@ -372,58 +301,58 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) return GRIB_WRONG_GRID; } - if (iter->nv != 12 * N * N) { + if (nv_ != 12 * N * N) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=12x%ldx%ld)", - ITER, iter->nv, N, N); + ITER, nv_, N, N); return GRIB_WRONG_GRID; } - self->lats = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); - if (self->lats == nullptr) { + lats_ = (double*)grib_context_malloc(h->context, nv_ * sizeof(double)); + if (lats_ == nullptr) { return GRIB_OUT_OF_MEMORY; } - self->lons = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); - if (self->lons == nullptr) { + lons_ = (double*)grib_context_malloc(h->context, nv_ * sizeof(double)); + if (lons_ == nullptr) { return GRIB_OUT_OF_MEMORY; } try { - err = iterate_healpix(self, N); + err = iterate_healpix(N); } catch (...) { return GRIB_INTERNAL_ERROR; } - iter->e = -1; + e_ = -1; return err; } -static int next(grib_iterator* iter, double* lat, double* lon, double* val) +int Healpix::next(double* lat, double* lon, double* val) const { - auto* self = (grib_iterator_healpix*)iter; - - if (iter->e >= static_cast(iter->nv - 1)) { + if (e_ >= static_cast(nv_ - 1)) { return 0; } - iter->e++; + e_++; - *lat = self->lats[iter->e]; - *lon = self->lons[iter->e]; - if (val != nullptr && iter->data != nullptr) { - *val = iter->data[iter->e]; + *lat = lats_[e_]; + *lon = lons_[e_]; + if (val != nullptr && data_ != nullptr) { + *val = data_[e_]; } return 1; } -static int destroy(grib_iterator* iter) +int Healpix::destroy() { - auto* self = (grib_iterator_healpix*)iter; - const auto* c = iter->h->context; + DEBUG_ASSERT(h_); + const grib_context* c = h_->context; + grib_context_free(c, lats_); + grib_context_free(c, lons_); - grib_context_free(c, self->lats); - grib_context_free(c, self->lons); - return GRIB_SUCCESS; + return Gen::destroy(); } + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_healpix.h b/src/geo_iterator/grib_iterator_class_healpix.h new file mode 100644 index 000000000..851dbb472 --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_healpix.h @@ -0,0 +1,35 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include "grib_iterator_class_gen.h" + +namespace eccodes::geo_iterator { + +class Healpix : public Gen +{ +public: + Healpix() : + Gen() { class_name_ = "healpix"; } + Iterator* create() const override { return new Healpix(); } + + int init(grib_handle*, grib_arguments*) override; + int next(double*, double*, double*) const override; + int destroy() override; + +private: + // long Nsides_ = 0; + bool nested_ = false; + + int iterate_healpix(long N); +}; + +} // namespace eccodes::geo_iterator diff --git a/src/grib_iterator_class_lambert_azimuthal_equal_area.cc b/src/geo_iterator/grib_iterator_class_lambert_azimuthal_equal_area.cc similarity index 73% rename from src/grib_iterator_class_lambert_azimuthal_equal_area.cc rename to src/geo_iterator/grib_iterator_class_lambert_azimuthal_equal_area.cc index 24dba1877..9db20fe81 100644 --- a/src/grib_iterator_class_lambert_azimuthal_equal_area.cc +++ b/src/geo_iterator/grib_iterator_class_lambert_azimuthal_equal_area.cc @@ -8,107 +8,39 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -#include "grib_api_internal.h" -#include +#include "grib_iterator_class_lambert_azimuthal_equal_area.h" -/* - This is used by make_class.pl +eccodes::geo_iterator::LambertAzimuthalEqualArea _grib_iterator_lambert_azimuthal_equal_area{}; +eccodes::geo_iterator::Iterator* grib_iterator_lambert_azimuthal_equal_area = &_grib_iterator_lambert_azimuthal_equal_area; - START_CLASS_DEF - CLASS = iterator - SUPER = grib_iterator_class_gen - IMPLEMENTS = destroy - IMPLEMENTS = init;next - MEMBERS = double *lats - MEMBERS = double *lons - MEMBERS = long Nj - END_CLASS_DEF -*/ - -/* START_CLASS_IMP */ - -/* - -Don't edit anything between START_CLASS_IMP and END_CLASS_IMP -Instead edit values between START_CLASS_DEF and END_CLASS_DEF -or edit "iterator.class" and rerun ./make_class.pl - -*/ - - -static void init_class (grib_iterator_class*); - -static int init (grib_iterator* i,grib_handle*,grib_arguments*); -static int next (grib_iterator* i, double *lat, double *lon, double *val); -static int destroy (grib_iterator* i); - - -typedef struct grib_iterator_lambert_azimuthal_equal_area{ - grib_iterator it; - /* Members defined in gen */ - int carg; - const char* missingValue; - /* Members defined in lambert_azimuthal_equal_area */ - double *lats; - double *lons; - long Nj; -} grib_iterator_lambert_azimuthal_equal_area; - -extern grib_iterator_class* grib_iterator_class_gen; - -static grib_iterator_class _grib_iterator_class_lambert_azimuthal_equal_area = { - &grib_iterator_class_gen, /* super */ - "lambert_azimuthal_equal_area", /* name */ - sizeof(grib_iterator_lambert_azimuthal_equal_area),/* size of instance */ - 0, /* inited */ - &init_class, /* init_class */ - &init, /* constructor */ - &destroy, /* destructor */ - &next, /* Next Value */ - 0, /* Previous Value */ - 0, /* Reset the counter */ - 0, /* has next values */ -}; - -grib_iterator_class* grib_iterator_class_lambert_azimuthal_equal_area = &_grib_iterator_class_lambert_azimuthal_equal_area; - - -static void init_class(grib_iterator_class* c) -{ - c->previous = (*(c->super))->previous; - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; -} -/* END_CLASS_IMP */ +namespace eccodes::geo_iterator { #define ITER "Lambert azimuthal equal area Geoiterator" -static int next(grib_iterator* iter, double* lat, double* lon, double* val) +int LambertAzimuthalEqualArea::next(double* lat, double* lon, double* val) const { - grib_iterator_lambert_azimuthal_equal_area* self = (grib_iterator_lambert_azimuthal_equal_area*)iter; - - if ((long)iter->e >= (long)(iter->nv - 1)) + if ((long)e_ >= (long)(nv_ - 1)) return 0; - iter->e++; + e_++; - *lat = self->lats[iter->e]; - *lon = self->lons[iter->e]; - if (val && iter->data) { - *val = iter->data[iter->e]; + *lat = lats_[e_]; + *lon = lons_[e_]; + if (val && data_) { + *val = data_[e_]; } return 1; } #ifndef M_PI -#define M_PI 3.14159265358979323846 /* Whole pie */ + #define M_PI 3.14159265358979323846 /* Whole pie */ #endif #ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 /* Half a pie */ + #define M_PI_2 1.57079632679489661923 /* Half a pie */ #endif #ifndef M_PI_4 -#define M_PI_4 0.78539816339744830962 /* Quarter of a pie */ + #define M_PI_4 0.78539816339744830962 /* Quarter of a pie */ #endif #define RAD2DEG 57.29577951308232087684 /* 180 over pi */ @@ -160,8 +92,7 @@ static double pj_qsfn(double sinphi, double e, double one_es) } #define EPS10 1.e-10 -static int init_oblate(grib_handle* h, - grib_iterator_lambert_azimuthal_equal_area* self, +int LambertAzimuthalEqualArea::init_oblate(grib_handle* h, size_t nv, long nx, long ny, double Dx, double Dy, double earthMinorAxisInMetres, double earthMajorAxisInMetres, double latFirstInRadians, double lonFirstInRadians, @@ -175,7 +106,9 @@ static int init_oblate(grib_handle* h, double Q__qp = 0, Q__rq = 0, Q__cosb1, Q__sinb1, Q__dd, Q__xmf, Q__ymf, t; /* double Q__mmf = 0; */ double e, es, temp, one_es; - double APA[3] = {0,}; + double APA[3] = { + 0, + }; double xFirst, yFirst; Dx = iScansNegatively == 0 ? Dx / 1000 : -Dx / 1000; @@ -202,7 +135,7 @@ static int init_oblate(grib_handle* h, else Q->mode = OBLIQ; */ - Q__qp = pj_qsfn(1.0, e, one_es); + Q__qp = pj_qsfn(1.0, e, one_es); /* Q__mmf = 0.5 / one_es; ---- TODO(masn): do I need this? */ pj_authset(es, APA); /* sets up APA array */ Q__rq = sqrt(0.5 * Q__qp); @@ -211,10 +144,11 @@ static int init_oblate(grib_handle* h, Q__cosb1 = sqrt(1.0 - Q__sinb1 * Q__sinb1); if (Q__cosb1 == 0) { Q__dd = 1.0; - } else { + } + else { Q__dd = cos(standardParallelInRadians) / (sqrt(1. - es * sinphi_ * sinphi_) * Q__rq * Q__cosb1); } - Q__ymf = (Q__xmf = Q__rq) / Q__dd; + Q__ymf = (Q__xmf = Q__rq) / Q__dd; Q__xmf *= Q__dd; sinb = q / Q__qp; @@ -231,18 +165,18 @@ static int init_oblate(grib_handle* h, x0 = Q__xmf * b * cosb * sinlam; /* Allocate latitude and longitude arrays */ - self->lats = (double*)grib_context_malloc(h->context, nv * sizeof(double)); - if (!self->lats) { + lats_ = (double*)grib_context_malloc(h->context, nv * sizeof(double)); + if (!lats_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } - self->lons = (double*)grib_context_malloc(h->context, nv * sizeof(double)); - if (!self->lats) { + lons_ = (double*)grib_context_malloc(h->context, nv * sizeof(double)); + if (!lons_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } - lats = self->lats; - lons = self->lons; + lats = lats_; + lons = lons_; /* Populate the lat and lon arrays */ { @@ -291,8 +225,7 @@ static int init_oblate(grib_handle* h, return GRIB_SUCCESS; } -static int init_sphere(grib_handle* h, - grib_iterator_lambert_azimuthal_equal_area* self, +int LambertAzimuthalEqualArea::init_sphere(grib_handle* h, size_t nv, long nx, long ny, double Dx, double Dy, double radius, double latFirstInRadians, double lonFirstInRadians, @@ -315,20 +248,20 @@ static int init_sphere(grib_handle* h, cosphi1 = cos(phi1); sinphi1 = sin(phi1); - Dx = iScansNegatively == 0 ? Dx / 1000 : -Dx / 1000; - Dy = jScansPositively == 1 ? Dy / 1000 : -Dy / 1000; - self->lats = (double*)grib_context_malloc(h->context, nv * sizeof(double)); - if (!self->lats) { + Dx = iScansNegatively == 0 ? Dx / 1000 : -Dx / 1000; + Dy = jScansPositively == 1 ? Dy / 1000 : -Dy / 1000; + lats_ = (double*)grib_context_malloc(h->context, nv * sizeof(double)); + if (!lats_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } - self->lons = (double*)grib_context_malloc(h->context, nv * sizeof(double)); - if (!self->lats) { + lons_ = (double*)grib_context_malloc(h->context, nv * sizeof(double)); + if (!lons_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } - lats = self->lats; - lons = self->lons; + lats = lats_; + lons = lons_; /* compute xFirst,yFirst in metres */ sinphi = sin(latFirstInRadians); @@ -398,9 +331,12 @@ static int init_sphere(grib_handle* h, return GRIB_SUCCESS; } -static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) +int LambertAzimuthalEqualArea::init(grib_handle* h, grib_arguments* args) { - int err = 0; + int err = 0; + if ((err = Gen::init(h, args)) != GRIB_SUCCESS) + return err; + int is_oblate = 0; double lonFirstInDegrees, latFirstInDegrees, lonFirstInRadians, latFirstInRadians, radius = 0; long nx, ny; @@ -411,22 +347,19 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) long jScansPositively, jPointsAreConsecutive; double earthMajorAxisInMetres = 0, earthMinorAxisInMetres = 0; - grib_iterator_lambert_azimuthal_equal_area* self = - (grib_iterator_lambert_azimuthal_equal_area*)iter; - - const char* sradius = grib_arguments_get_name(h, args, self->carg++); - const char* snx = grib_arguments_get_name(h, args, self->carg++); - const char* sny = grib_arguments_get_name(h, args, self->carg++); - const char* slatFirstInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* slonFirstInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sstandardParallel = grib_arguments_get_name(h, args, self->carg++); - const char* scentralLongitude = grib_arguments_get_name(h, args, self->carg++); - const char* sDx = grib_arguments_get_name(h, args, self->carg++); - const char* sDy = grib_arguments_get_name(h, args, self->carg++); - const char* siScansNegatively = grib_arguments_get_name(h, args, self->carg++); - const char* sjScansPositively = grib_arguments_get_name(h, args, self->carg++); - const char* sjPointsAreConsecutive = grib_arguments_get_name(h, args, self->carg++); - const char* salternativeRowScanning = grib_arguments_get_name(h, args, self->carg++); + const char* sradius = grib_arguments_get_name(h, args, carg_++); + const char* snx = grib_arguments_get_name(h, args, carg_++); + const char* sny = grib_arguments_get_name(h, args, carg_++); + const char* slatFirstInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* slonFirstInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* sstandardParallel = grib_arguments_get_name(h, args, carg_++); + const char* scentralLongitude = grib_arguments_get_name(h, args, carg_++); + const char* sDx = grib_arguments_get_name(h, args, carg_++); + const char* sDy = grib_arguments_get_name(h, args, carg_++); + const char* siScansNegatively = grib_arguments_get_name(h, args, carg_++); + const char* sjScansPositively = grib_arguments_get_name(h, args, carg_++); + const char* sjPointsAreConsecutive = grib_arguments_get_name(h, args, carg_++); + const char* salternativeRowScanning = grib_arguments_get_name(h, args, carg_++); const double d2r = acos(0.0) / 90.0; is_oblate = grib_is_earth_oblate(h); @@ -443,8 +376,8 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) if ((err = grib_get_long_internal(h, sny, &ny)) != GRIB_SUCCESS) return err; - if (iter->nv != nx * ny) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, iter->nv, nx, ny); + if (nv_ != nx * ny) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, nv_, nx, ny); return GRIB_WRONG_GRID; } if ((err = grib_get_double_internal(h, slatFirstInDegrees, &latFirstInDegrees)) != GRIB_SUCCESS) @@ -474,14 +407,14 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) standardParallelInRadians = standardParallelInDegrees * d2r; if (is_oblate) { - err = init_oblate(h, self, iter->nv, nx, ny, + err = init_oblate(h, nv_, nx, ny, Dx, Dy, earthMinorAxisInMetres, earthMajorAxisInMetres, latFirstInRadians, lonFirstInRadians, centralLongitudeInRadians, standardParallelInRadians, iScansNegatively, jScansPositively, jPointsAreConsecutive); } else { - err = init_sphere(h, self, iter->nv, nx, ny, + err = init_sphere(h, nv_, nx, ny, Dx, Dy, radius, latFirstInRadians, lonFirstInRadians, centralLongitudeInRadians, standardParallelInRadians, @@ -489,17 +422,19 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) } if (err) return err; - iter->e = -1; + e_ = -1; return GRIB_SUCCESS; } -static int destroy(grib_iterator* iter) +int LambertAzimuthalEqualArea::destroy() { - grib_iterator_lambert_azimuthal_equal_area* self = (grib_iterator_lambert_azimuthal_equal_area*)iter; - const grib_context* c = iter->h->context; + DEBUG_ASSERT(h_); + const grib_context* c = h_->context; + grib_context_free(c, lats_); + grib_context_free(c, lons_); - grib_context_free(c, self->lats); - grib_context_free(c, self->lons); - return GRIB_SUCCESS; + return Gen::destroy(); } + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_lambert_azimuthal_equal_area.h b/src/geo_iterator/grib_iterator_class_lambert_azimuthal_equal_area.h new file mode 100644 index 000000000..9b5da776c --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_lambert_azimuthal_equal_area.h @@ -0,0 +1,44 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include "grib_iterator_class_gen.h" + +namespace eccodes::geo_iterator { + +class LambertAzimuthalEqualArea : public Gen +{ +public: + LambertAzimuthalEqualArea() : + Gen() { class_name_ = "lambert_azimuthal_equal_area"; } + Iterator* create() const override { return new LambertAzimuthalEqualArea(); } + + int init(grib_handle*, grib_arguments*) override; + int next(double*, double*, double*) const override; + int destroy() override; + +private: + int init_sphere(grib_handle*, + size_t, long, long, + double, double, double, + double, double, + double, double, + long, long, long); + + int init_oblate(grib_handle*, + size_t, long, long, + double, double, double, double, + double, double, + double, double, + long, long, long); +}; + +} // namespace eccodes::geo_iterator diff --git a/src/grib_iterator_class_lambert_conformal.cc b/src/geo_iterator/grib_iterator_class_lambert_conformal.cc similarity index 63% rename from src/grib_iterator_class_lambert_conformal.cc rename to src/geo_iterator/grib_iterator_class_lambert_conformal.cc index fe261b5be..13162da77 100644 --- a/src/grib_iterator_class_lambert_conformal.cc +++ b/src/geo_iterator/grib_iterator_class_lambert_conformal.cc @@ -8,101 +8,36 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -#include "grib_api_internal.h" +#include "grib_iterator_class_lambert_conformal.h" #include -/* - This is used by make_class.pl +eccodes::geo_iterator::LambertConformal _grib_iterator_lambert_conformal{}; +eccodes::geo_iterator::Iterator* grib_iterator_lambert_conformal = &_grib_iterator_lambert_conformal; - START_CLASS_DEF - CLASS = iterator - SUPER = grib_iterator_class_gen - IMPLEMENTS = destroy - IMPLEMENTS = init;next - MEMBERS = double *lats - MEMBERS = double *lons - MEMBERS = long Nj - END_CLASS_DEF -*/ +namespace eccodes::geo_iterator { -/* START_CLASS_IMP */ - -/* - -Don't edit anything between START_CLASS_IMP and END_CLASS_IMP -Instead edit values between START_CLASS_DEF and END_CLASS_DEF -or edit "iterator.class" and rerun ./make_class.pl - -*/ - - -static void init_class (grib_iterator_class*); - -static int init (grib_iterator* i,grib_handle*,grib_arguments*); -static int next (grib_iterator* i, double *lat, double *lon, double *val); -static int destroy (grib_iterator* i); - - -typedef struct grib_iterator_lambert_conformal{ - grib_iterator it; - /* Members defined in gen */ - int carg; - const char* missingValue; - /* Members defined in lambert_conformal */ - double *lats; - double *lons; - long Nj; -} grib_iterator_lambert_conformal; - -extern grib_iterator_class* grib_iterator_class_gen; - -static grib_iterator_class _grib_iterator_class_lambert_conformal = { - &grib_iterator_class_gen, /* super */ - "lambert_conformal", /* name */ - sizeof(grib_iterator_lambert_conformal),/* size of instance */ - 0, /* inited */ - &init_class, /* init_class */ - &init, /* constructor */ - &destroy, /* destructor */ - &next, /* Next Value */ - 0, /* Previous Value */ - 0, /* Reset the counter */ - 0, /* has next values */ -}; - -grib_iterator_class* grib_iterator_class_lambert_conformal = &_grib_iterator_class_lambert_conformal; - - -static void init_class(grib_iterator_class* c) -{ - c->previous = (*(c->super))->previous; - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; -} -/* END_CLASS_IMP */ - -#define ITER "Lambert conformal Geoiterator" +#define ITER "Lambert conformal Geoiterator" #define EPSILON 1.0e-10 #ifndef M_PI -#define M_PI 3.14159265358979323846 // Whole pie + #define M_PI 3.14159265358979323846 // Whole pie #endif #ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 // Half a pie + #define M_PI_2 1.57079632679489661923 // Half a pie #endif #ifndef M_PI_4 -#define M_PI_4 0.78539816339744830962 // Quarter of a pie + #define M_PI_4 0.78539816339744830962 // Quarter of a pie #endif -#define RAD2DEG 57.29577951308232087684 // 180 over pi -#define DEG2RAD 0.01745329251994329576 // pi over 180 +#define RAD2DEG 57.29577951308232087684 // 180 over pi +#define DEG2RAD 0.01745329251994329576 // pi over 180 // Adjust longitude (in radians) to range -180 to 180 static double adjust_lon_radians(double lon) { - if (lon > M_PI) lon -= 2 * M_PI; + if (lon > M_PI) lon -= 2 * M_PI; if (lon < -M_PI) lon += 2 * M_PI; return lon; } @@ -114,8 +49,8 @@ static double adjust_lon_radians(double lon) // calculate phi on the left side. Substitute the calculated phi) into the right side, // calculate a new phi, etc., until phi does not change significantly from the preceding trial value of phi static double compute_phi( - double eccent, // Spheroid eccentricity - double ts, // Constant value t + double eccent, // Spheroid eccentricity + double ts, // Constant value t int* error) { double eccnth, phi, con, dphi, sinpi; @@ -145,9 +80,9 @@ static double compute_m(double eccent, double sinphi, double cosphi) // Compute the constant small t for use in the forward computations static double compute_t( - double eccent, // Eccentricity of the spheroid - double phi, // Latitude phi - double sinphi) // Sine of the latitude + double eccent, // Eccentricity of the spheroid + double phi, // Latitude phi + double sinphi) // Sine of the latitude { double con = eccent * sinphi; double com = 0.5 * eccent; @@ -162,25 +97,25 @@ static double calculate_eccentricity(double minor, double major) } static void xy2lonlat(double radius, double n, double f, double rho0_bare, double LoVInRadians, - double x, double y, - double* lonDeg, double* latDeg) + double x, double y, + double* lonDeg, double* latDeg) { DEBUG_ASSERT(radius > 0); DEBUG_ASSERT(n != 0.0); x /= radius; y /= radius; - y = rho0_bare - y; + y = rho0_bare - y; double rho = hypot(x, y); if (rho != 0.0) { if (n < 0.0) { rho = -rho; - x = -x; - y = -y; + x = -x; + y = -y; } - double latRadians = 2. * atan(pow(f / rho, 1.0/n)) - M_PI_2; + double latRadians = 2. * atan(pow(f / rho, 1.0 / n)) - M_PI_2; double lonRadians = atan2(x, y) / n; - *lonDeg = (lonRadians + LoVInRadians) * RAD2DEG; - *latDeg = latRadians * RAD2DEG; + *lonDeg = (lonRadians + LoVInRadians) * RAD2DEG; + *latDeg = latRadians * RAD2DEG; } else { *lonDeg = 0.0; @@ -188,29 +123,29 @@ static void xy2lonlat(double radius, double n, double f, double rho0_bare, doubl } } -static int init_sphere(const grib_handle* h, - grib_iterator_lambert_conformal* self, - size_t nv, long nx, long ny, - double LoVInDegrees, - double Dx, double Dy, double radius, - double latFirstInRadians, double lonFirstInRadians, - double LoVInRadians, double Latin1InRadians, double Latin2InRadians, - double LaDInRadians) +int LambertConformal::init_sphere(const grib_handle* h, + size_t nv, long nx, long ny, + double LoVInDegrees, + double Dx, double Dy, double radius, + double latFirstInRadians, double lonFirstInRadians, + double LoVInRadians, double Latin1InRadians, double Latin2InRadians, + double LaDInRadians) { double n, x, y; if (fabs(Latin1InRadians - Latin2InRadians) < 1E-09) { n = sin(Latin1InRadians); - } else { + } + else { n = log(cos(Latin1InRadians) / cos(Latin2InRadians)) / log(tan(M_PI_4 + Latin2InRadians / 2.0) / tan(M_PI_4 + Latin1InRadians / 2.0)); } - double f = (cos(Latin1InRadians) * pow(tan(M_PI_4 + Latin1InRadians / 2.0), n)) / n; - double rho = radius * f * pow(tan(M_PI_4 + latFirstInRadians / 2.0), -n); + double f = (cos(Latin1InRadians) * pow(tan(M_PI_4 + Latin1InRadians / 2.0), n)) / n; + double rho = radius * f * pow(tan(M_PI_4 + latFirstInRadians / 2.0), -n); double rho0_bare = f * pow(tan(M_PI_4 + LaDInRadians / 2.0), -n); - double rho0 = radius * rho0_bare; // scaled - double lonDiff = lonFirstInRadians - LoVInRadians; + double rho0 = radius * rho0_bare; // scaled + double lonDiff = lonFirstInRadians - LoVInRadians; // Adjust longitude to range -180 to 180 if (lonDiff > M_PI) @@ -225,13 +160,13 @@ static int init_sphere(const grib_handle* h, // Dy = jScansPositively == 1 ? Dy : -Dy; // Allocate latitude and longitude arrays - self->lats = (double*)grib_context_malloc(h->context, nv * sizeof(double)); - if (!self->lats) { + lats_ = (double*)grib_context_malloc(h->context, nv * sizeof(double)); + if (!lats_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } - self->lons = (double*)grib_context_malloc(h->context, nv * sizeof(double)); - if (!self->lats) { + lons_ = (double*)grib_context_malloc(h->context, nv * sizeof(double)); + if (!lons_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } @@ -241,11 +176,11 @@ static int init_sphere(const grib_handle* h, y = y0 + j * Dy; for (long i = 0; i < nx; i++) { const long index = i + j * nx; - x = x0 + i * Dx; + x = x0 + i * Dx; xy2lonlat(radius, n, f, rho0_bare, LoVInRadians, x, y, &lonDeg, &latDeg); - lonDeg = normalise_longitude_in_degrees(lonDeg); - self->lons[index] = lonDeg; - self->lats[index] = latDeg; + lonDeg = normalise_longitude_in_degrees(lonDeg); + lons_[index] = lonDeg; + lats_[index] = latDeg; } } @@ -269,8 +204,8 @@ static int init_sphere(const grib_handle* h, lonDeg = LoVInDegrees + (angle / n) * RAD2DEG; latDeg = (2.0 * atan(pow(radius * f / rho, 1.0 / n)) - M_PI_2) * RAD2DEG; lonDeg = normalise_longitude_in_degrees(lonDeg); - self->lons[index] = lonDeg; - self->lats[index] = latDeg; + lons_[index] = lonDeg; + lats_[index] = latDeg; } } #endif @@ -278,32 +213,31 @@ static int init_sphere(const grib_handle* h, } // Oblate spheroid -static int init_oblate(const grib_handle* h, - grib_iterator_lambert_conformal* self, - size_t nv, long nx, long ny, - double LoVInDegrees, - double Dx, double Dy, - double earthMinorAxisInMetres, double earthMajorAxisInMetres, - double latFirstInRadians, double lonFirstInRadians, - double LoVInRadians, double Latin1InRadians, double Latin2InRadians, - double LaDInRadians) +int LambertConformal::init_oblate(const grib_handle* h, + size_t nv, long nx, long ny, + double LoVInDegrees, + double Dx, double Dy, + double earthMinorAxisInMetres, double earthMajorAxisInMetres, + double latFirstInRadians, double lonFirstInRadians, + double LoVInRadians, double Latin1InRadians, double Latin2InRadians, + double LaDInRadians) { int i, j, err = 0; double x0, y0, x, y, latRad, lonRad, latDeg, lonDeg, sinphi, ts, rh1, theta; - double false_easting; // x offset in meters - double false_northing; // y offset in meters + double false_easting; // x offset in meters + double false_northing; // y offset in meters - double ns; // ratio of angle between meridian - double F; // flattening of ellipsoid - double rh; // height above ellipsoid - double sin_po; // sin value - double cos_po; // cos value - double con; // temporary variable - double ms1; // small m 1 - double ms2; // small m 2 - double ts0; // small t 0 - double ts1; // small t 1 - double ts2; // small t 2 + double ns; // ratio of angle between meridian + double F; // flattening of ellipsoid + double rh; // height above ellipsoid + double sin_po; // sin value + double cos_po; // cos value + double con; // temporary variable + double ms1; // small m 1 + double ms2; // small m 2 + double ts0; // small t 0 + double ts1; // small t 1 + double ts2; // small t 2 double e = calculate_eccentricity(earthMinorAxisInMetres, earthMajorAxisInMetres); @@ -322,10 +256,11 @@ static int init_oblate(const grib_handle* h, if (fabs(Latin1InRadians - Latin2InRadians) > EPSILON) { ns = log(ms1 / ms2) / log(ts1 / ts2); - } else { + } + else { ns = con; } - F = ms1 / (ns * pow(ts1, ns)); + F = ms1 / (ns * pow(ts1, ns)); rh = earthMajorAxisInMetres * F * pow(ts0, ns); // Forward projection: convert lat,lon to x,y @@ -334,7 +269,8 @@ static int init_oblate(const grib_handle* h, sinphi = sin(latFirstInRadians); ts = compute_t(e, latFirstInRadians, sinphi); rh1 = earthMajorAxisInMetres * F * pow(ts, ns); - } else { + } + else { con = latFirstInRadians * ns; if (con <= 0) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Point cannot be projected: latFirstInRadians=%g", ITER, latFirstInRadians); @@ -349,13 +285,13 @@ static int init_oblate(const grib_handle* h, y0 = -y0; // Allocate latitude and longitude arrays - self->lats = (double*)grib_context_malloc(h->context, nv * sizeof(double)); - if (!self->lats) { + lats_ = (double*)grib_context_malloc(h->context, nv * sizeof(double)); + if (!lats_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } - self->lons = (double*)grib_context_malloc(h->context, nv * sizeof(double)); - if (!self->lats) { + lons_ = (double*)grib_context_malloc(h->context, nv * sizeof(double)); + if (!lons_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } @@ -370,8 +306,8 @@ static int init_oblate(const grib_handle* h, double _x, _y; x = i * Dx; // Inverse projection to convert from x,y to lat,lon - _x = x - false_easting; - _y = rh - y + false_northing; + _x = x - false_easting; + _y = rh - y + false_northing; rh1 = sqrt(_x * _x + _y * _y); con = 1.0; if (ns <= 0) { @@ -388,54 +324,57 @@ static int init_oblate(const grib_handle* h, if (err) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Failed to compute the latitude angle, phi2, for the inverse", ITER); - grib_context_free(h->context, self->lats); - grib_context_free(h->context, self->lons); + grib_context_free(h->context, lats_); + grib_context_free(h->context, lons_); return err; } - } else { + } + else { latRad = -M_PI_2; } lonRad = adjust_lon_radians(theta / ns + LoVInRadians); if (i == 0 && j == 0) { DEBUG_ASSERT(fabs(latFirstInRadians - latRad) <= EPSILON); } - latDeg = latRad * RAD2DEG; // Convert to degrees - lonDeg = normalise_longitude_in_degrees(lonRad * RAD2DEG); - self->lons[index] = lonDeg; - self->lats[index] = latDeg; + latDeg = latRad * RAD2DEG; // Convert to degrees + lonDeg = normalise_longitude_in_degrees(lonRad * RAD2DEG); + lons_[index] = lonDeg; + lats_[index] = latDeg; } } return GRIB_SUCCESS; } -static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) +int LambertConformal::init(grib_handle* h, grib_arguments* args) { - int err = 0, is_oblate = 0; + int err = GRIB_SUCCESS; + if ((err = Gen::init(h, args)) != GRIB_SUCCESS) + return err; + + int is_oblate = 0; long nx, ny, iScansNegatively, jScansPositively, jPointsAreConsecutive, alternativeRowScanning; double LoVInDegrees, LaDInDegrees, Latin1InDegrees, Latin2InDegrees, latFirstInDegrees, lonFirstInDegrees, Dx, Dy, radius = 0; double latFirstInRadians, lonFirstInRadians, LoVInRadians, Latin1InRadians, Latin2InRadians, LaDInRadians; - double earthMajorAxisInMetres=0, earthMinorAxisInMetres=0; + double earthMajorAxisInMetres = 0, earthMinorAxisInMetres = 0; - grib_iterator_lambert_conformal* self = (grib_iterator_lambert_conformal*)iter; - - const char* sradius = grib_arguments_get_name(h, args, self->carg++); - const char* snx = grib_arguments_get_name(h, args, self->carg++); - const char* sny = grib_arguments_get_name(h, args, self->carg++); - const char* sLoVInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sLaDInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sLatin1InDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sLatin2InDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* slatFirstInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* slonFirstInDegrees = grib_arguments_get_name(h, args, self->carg++); + const char* sradius = grib_arguments_get_name(h, args, carg_++); + const char* snx = grib_arguments_get_name(h, args, carg_++); + const char* sny = grib_arguments_get_name(h, args, carg_++); + const char* sLoVInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* sLaDInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* sLatin1InDegrees = grib_arguments_get_name(h, args, carg_++); + const char* sLatin2InDegrees = grib_arguments_get_name(h, args, carg_++); + const char* slatFirstInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* slonFirstInDegrees = grib_arguments_get_name(h, args, carg_++); // Dx and Dy are in Metres - const char* sDx = grib_arguments_get_name(h, args, self->carg++); - const char* sDy = grib_arguments_get_name(h, args, self->carg++); - const char* siScansNegatively = grib_arguments_get_name(h, args, self->carg++); - const char* sjScansPositively = grib_arguments_get_name(h, args, self->carg++); - const char* sjPointsAreConsecutive = grib_arguments_get_name(h, args, self->carg++); - const char* salternativeRowScanning = grib_arguments_get_name(h, args, self->carg++); + const char* sDx = grib_arguments_get_name(h, args, carg_++); + const char* sDy = grib_arguments_get_name(h, args, carg_++); + const char* siScansNegatively = grib_arguments_get_name(h, args, carg_++); + const char* sjScansPositively = grib_arguments_get_name(h, args, carg_++); + const char* sjPointsAreConsecutive = grib_arguments_get_name(h, args, carg_++); + const char* salternativeRowScanning = grib_arguments_get_name(h, args, carg_++); if ((err = grib_get_long_internal(h, snx, &nx)) != GRIB_SUCCESS) return err; if ((err = grib_get_long_internal(h, sny, &ny)) != GRIB_SUCCESS) return err; @@ -445,12 +384,13 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) if (is_oblate) { if ((err = grib_get_double_internal(h, "earthMinorAxisInMetres", &earthMinorAxisInMetres)) != GRIB_SUCCESS) return err; if ((err = grib_get_double_internal(h, "earthMajorAxisInMetres", &earthMajorAxisInMetres)) != GRIB_SUCCESS) return err; - } else { + } + else { if ((err = grib_get_double_internal(h, sradius, &radius)) != GRIB_SUCCESS) return err; } - if (iter->nv != nx * ny) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, iter->nv, nx, ny); + if (nv_ != nx * ny) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, nv_, nx, ny); return GRIB_WRONG_GRID; } @@ -497,14 +437,15 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) LoVInRadians = LoVInDegrees * DEG2RAD; if (is_oblate) { - err = init_oblate(h, self, iter->nv, nx, ny, + err = init_oblate(h, nv_, nx, ny, LoVInDegrees, Dx, Dy, earthMinorAxisInMetres, earthMajorAxisInMetres, latFirstInRadians, lonFirstInRadians, LoVInRadians, Latin1InRadians, Latin2InRadians, LaDInRadians); - } else { - err = init_sphere(h, self, iter->nv, nx, ny, + } + else { + err = init_sphere(h, nv_, nx, ny, LoVInDegrees, Dx, Dy, radius, latFirstInRadians, lonFirstInRadians, @@ -512,37 +453,37 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) } if (err) return err; - iter->e = -1; + e_ = -1; // Apply the scanning mode flags which may require data array to be transformed - err = transform_iterator_data(h->context, iter->data, + err = transform_iterator_data(h->context, data_, iScansNegatively, jScansPositively, jPointsAreConsecutive, alternativeRowScanning, - iter->nv, nx, ny); + nv_, nx, ny); return err; } -static int next(grib_iterator* iter, double* lat, double* lon, double* val) +int LambertConformal::next(double* lat, double* lon, double* val) const { - grib_iterator_lambert_conformal* self = (grib_iterator_lambert_conformal*)iter; - - if ((long)iter->e >= (long)(iter->nv - 1)) + if ((long)e_ >= (long)(nv_ - 1)) return 0; - iter->e++; + e_++; - *lat = self->lats[iter->e]; - *lon = self->lons[iter->e]; - if (val && iter->data) { - *val = iter->data[iter->e]; + *lat = lats_[e_]; + *lon = lons_[e_]; + if (val && data_) { + *val = data_[e_]; } return 1; } -static int destroy(grib_iterator* i) +int LambertConformal::destroy() { - grib_iterator_lambert_conformal* self = (grib_iterator_lambert_conformal*)i; - const grib_context* c = i->h->context; + DEBUG_ASSERT(h_); + const grib_context* c = h_->context; + grib_context_free(c, lats_); + grib_context_free(c, lons_); - grib_context_free(c, self->lats); - grib_context_free(c, self->lons); - return GRIB_SUCCESS; + return Gen::destroy(); } + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_lambert_conformal.h b/src/geo_iterator/grib_iterator_class_lambert_conformal.h new file mode 100644 index 000000000..07e8e09e5 --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_lambert_conformal.h @@ -0,0 +1,47 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include "grib_iterator_class_gen.h" + +namespace eccodes::geo_iterator { + +class LambertConformal : public Gen +{ +public: + LambertConformal() : + Gen() { class_name_ = "lambert_conformal"; } + Iterator* create() const override { return new LambertConformal(); } + + int init(grib_handle*, grib_arguments*) override; + int next(double*, double*, double*) const override; + int destroy() override; + +private: + int init_sphere(const grib_handle*, + size_t, long, long, + double, + double, double, double, + double, double, + double, double, double, + double); + + int init_oblate(const grib_handle*, + size_t, long, long, + double, + double, double, + double, double, + double, double, + double, double, double, + double); +}; + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_latlon.cc b/src/geo_iterator/grib_iterator_class_latlon.cc new file mode 100644 index 000000000..603640130 --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_latlon.cc @@ -0,0 +1,157 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#include "grib_iterator_class_latlon.h" + +eccodes::geo_iterator::Latlon _grib_iterator_latlon{}; +eccodes::geo_iterator::Iterator* grib_iterator_latlon = &_grib_iterator_latlon; + +namespace eccodes::geo_iterator { + +int Latlon::next(double* lat, double* lon, double* val) const +{ + /* GRIB-238: Support rotated lat/lon grids */ + double ret_lat, ret_lon, ret_val = 0; + if ((long)e_ >= (long)(nv_ - 1)) + return 0; + + e_++; + + /* Assumptions: + * All rows scan in the same direction (alternativeRowScanning==0) + */ + if (!jPointsAreConsecutive_) { + /* Adjacent points in i (x) direction are consecutive */ + ret_lat = lats_[(long)floor(e_ / Ni_)]; + ret_lon = lons_[(long)e_ % Ni_]; + if (data_) + ret_val = data_[e_]; + } + else { + /* Adjacent points in j (y) direction is consecutive */ + ret_lon = lons_[(long)e_ / Nj_]; + ret_lat = lats_[(long)floor(e_ % Nj_)]; + if (data_) + ret_val = data_[e_]; + } + + /* See ECC-808: Some users want to disable the unrotate */ + if (isRotated_ && !disableUnrotate_) { + double new_lat = 0, new_lon = 0; + unrotate(ret_lat, ret_lon, + angleOfRotation_, southPoleLat_, southPoleLon_, + &new_lat, &new_lon); + ret_lat = new_lat; + ret_lon = new_lon; + } + + *lat = ret_lat; + *lon = ret_lon; + if (val && data_) { + *val = ret_val; + } + return 1; +} + +int Latlon::init(grib_handle* h, grib_arguments* args) +{ + int err = 0; + if ((err = Regular::init(h, args)) != GRIB_SUCCESS) + return err; + + double jdir; + double lat1 = 0, lat2 = 0, north = 0, south = 0; + long jScansPositively; + long lai; + + const char* s_lat1 = grib_arguments_get_name(h, args, carg_++); + const char* s_jdir = grib_arguments_get_name(h, args, carg_++); + const char* s_jScansPos = grib_arguments_get_name(h, args, carg_++); + const char* s_jPtsConsec = grib_arguments_get_name(h, args, carg_++); + const char* s_isRotatedGrid = grib_arguments_get_name(h, args, carg_++); + const char* s_angleOfRotation = grib_arguments_get_name(h, args, carg_++); + const char* s_latSouthernPole = grib_arguments_get_name(h, args, carg_++); + const char* s_lonSouthernPole = grib_arguments_get_name(h, args, carg_++); + + angleOfRotation_ = 0; + isRotated_ = 0; + southPoleLat_ = 0; + southPoleLon_ = 0; + disableUnrotate_ = 0; /* unrotate enabled by default */ + + if ((err = grib_get_long(h, s_isRotatedGrid, &isRotated_))) + return err; + if (isRotated_) { + if ((err = grib_get_double_internal(h, s_angleOfRotation, &angleOfRotation_))) + return err; + if ((err = grib_get_double_internal(h, s_latSouthernPole, &southPoleLat_))) + return err; + if ((err = grib_get_double_internal(h, s_lonSouthernPole, &southPoleLon_))) + return err; + } + + if ((err = grib_get_double_internal(h, s_lat1, &lat1))) + return err; + if ((err = grib_get_double_internal(h, "latitudeLastInDegrees", &lat2))) + return err; + if ((err = grib_get_double_internal(h, s_jdir, &jdir))) // can be GRIB_MISSING_DOUBLE + return err; + if ((err = grib_get_long_internal(h, s_jScansPos, &jScansPositively))) + return err; + if ((err = grib_get_long_internal(h, s_jPtsConsec, &jPointsAreConsecutive_))) + return err; + if ((err = grib_get_long(h, "iteratorDisableUnrotate", &disableUnrotate_))) + return err; + + /* ECC-984: If jDirectionIncrement is missing, then we cannot use it (See jDirectionIncrementGiven) */ + /* So try to compute the increment */ + if ((grib_is_missing(h, s_jdir, &err) && err == GRIB_SUCCESS) || (jdir == GRIB_MISSING_DOUBLE)) { + const long Nj = Nj_; + Assert(Nj > 1); + if (lat1 > lat2) { + jdir = (lat1 - lat2) / (Nj - 1); + } + else { + jdir = (lat2 - lat1) / (Nj - 1); + } + grib_context_log(h->context, GRIB_LOG_DEBUG, + "Cannot use jDirectionIncrement. Using value of %.6f obtained from La1, La2 and Nj", jdir); + } + + if (jScansPositively) { + north = lat2; + south = lat1; + jdir = -jdir; + } + else { + north = lat1; + south = lat2; + } + if (south > north) { + grib_context_log(h->context, GRIB_LOG_ERROR, + "Lat/Lon Geoiterator: First and last latitudes are inconsistent with scanning order: lat1=%g, lat2=%g jScansPositively=%ld", + lat1, lat2, jScansPositively); + return GRIB_WRONG_GRID; + } + + for (lai = 0; lai < Nj_; lai++) { + lats_[lai] = lat1; + lat1 -= jdir; + } + /* ECC-1406: Due to rounding, errors can accumulate. + * So we ensure the last latitude is latitudeOfLastGridPointInDegrees + */ + lats_[Nj_ - 1] = lat2; + + e_ = -1; + return err; +} + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_latlon.h b/src/geo_iterator/grib_iterator_class_latlon.h new file mode 100644 index 000000000..8d2f5ef90 --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_latlon.h @@ -0,0 +1,28 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include "grib_iterator_class_regular.h" + +namespace eccodes::geo_iterator { + +class Latlon : public Regular +{ +public: + Latlon() : + Regular() { class_name_ = "latlon"; } + Iterator* create() const override { return new Latlon(); } + + int init(grib_handle*, grib_arguments*) override; + int next(double*, double*, double*) const override; +}; + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_latlon_reduced.cc b/src/geo_iterator/grib_iterator_class_latlon_reduced.cc new file mode 100644 index 000000000..784320d99 --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_latlon_reduced.cc @@ -0,0 +1,141 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#include "grib_iterator_class_latlon_reduced.h" + +eccodes::geo_iterator::LatlonReduced _grib_iterator_latlon_reduced{}; +eccodes::geo_iterator::Iterator* grib_iterator_latlon_reduced = &_grib_iterator_latlon_reduced; + +namespace eccodes::geo_iterator { + +int LatlonReduced::next(double* lat, double* lon, double* val) const +{ + if ((long)e_ >= (long)(nv_ - 1)) + return 0; + e_++; + + *lat = lats_[e_]; + *lon = lons_[e_]; + if (val && data_) { + *val = data_[e_]; + } + return 1; +} + +int LatlonReduced::init(grib_handle* h, grib_arguments* args) +{ + int ret = GRIB_SUCCESS; + if ((ret = Gen::init(h, args)) != GRIB_SUCCESS) + return ret; + + double laf; + double lal; + long nlats; + double lof, tlof; + double lol, dimin; + long* pl; + size_t plsize = 0; + long k, j, ii; + long nlons, plmax; + double jdirinc = 0; + double idirinc = 0; + double dlon = 0; + int islocal = 0; + long nlons2 = 0; /* adjusted num of longitudes */ + + const char* latofirst = grib_arguments_get_name(h, args, carg_++); + const char* longoffirst = grib_arguments_get_name(h, args, carg_++); + const char* latoflast = grib_arguments_get_name(h, args, carg_++); + const char* longoflast = grib_arguments_get_name(h, args, carg_++); + const char* nlats_name = grib_arguments_get_name(h, args, carg_++); + const char* jdirec = grib_arguments_get_name(h, args, carg_++); + const char* plac = grib_arguments_get_name(h, args, carg_++); + + if ((ret = grib_get_double_internal(h, latofirst, &laf))) + return ret; + if ((ret = grib_get_double_internal(h, longoffirst, &lof))) + return ret; + + if ((ret = grib_get_double_internal(h, latoflast, &lal))) + return ret; + if ((ret = grib_get_double_internal(h, longoflast, &lol))) + return ret; + + if ((ret = grib_get_long_internal(h, nlats_name, &nlats))) + return ret; + + if ((ret = grib_get_double_internal(h, jdirec, &jdirinc))) + return ret; + + plsize = nlats; + pl = (long*)grib_context_malloc(h->context, plsize * sizeof(long)); + grib_get_long_array_internal(h, plac, pl, &plsize); + + lats_ = (double*)grib_context_malloc(h->context, nv_ * sizeof(double)); + lons_ = (double*)grib_context_malloc(h->context, nv_ * sizeof(double)); + + plmax = pl[0]; + for (j = 0; j < nlats; j++) + if (plmax < pl[j]) + plmax = pl[j]; + dimin = 360.0 / plmax; + + if (360 - fabs(lol - lof) < 2 * dimin) { + dlon = 360; + islocal = 0; + } + else if (lol < lof) { + /* handle something like 150 to -120 to treat as 150 to 240 */ + /* so that dlon is 90 (not -270) */ + dlon = lol + 360.0 - lof; + islocal = 1; + } + else { + dlon = lol - lof; + islocal = 1; + } + + if (laf > lal) + jdirinc = -jdirinc; + k = 0; + for (j = 0; j < nlats; j++) { + nlons = pl[j]; + tlof = lof; + nlons2 = nlons - islocal; + /*Sometimes there are no points on a latitude! Protect against div by zero*/ + if (nlons2 < 1) + nlons2 = 1; + idirinc = dlon / nlons2; + for (ii = 0; ii < nlons; ii++) { + lats_[k] = laf; + lons_[k] = tlof; + tlof += idirinc; + k++; + } + laf += jdirinc; + } + + e_ = -1; + grib_context_free(h->context, pl); + + return ret; +} + +int LatlonReduced::destroy() +{ + DEBUG_ASSERT(h_); + const grib_context* c = h_->context; + grib_context_free(c, lats_); + grib_context_free(c, lons_); + + return Gen::destroy(); +} + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_latlon_reduced.h b/src/geo_iterator/grib_iterator_class_latlon_reduced.h new file mode 100644 index 000000000..cbfdefd4f --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_latlon_reduced.h @@ -0,0 +1,29 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include "grib_iterator_class_gen.h" + +namespace eccodes::geo_iterator { + +class LatlonReduced : public Gen +{ +public: + LatlonReduced() : + Gen() { class_name_ = "latlon_reduced"; } + Iterator* create() const override { return new LatlonReduced(); } + + int init(grib_handle*, grib_arguments*) override; + int next(double*, double*, double*) const override; + int destroy() override; +}; + +} // namespace eccodes::geo_iterator diff --git a/src/grib_iterator_class_mercator.cc b/src/geo_iterator/grib_iterator_class_mercator.cc similarity index 65% rename from src/grib_iterator_class_mercator.cc rename to src/geo_iterator/grib_iterator_class_mercator.cc index c4f668186..248ba7872 100644 --- a/src/grib_iterator_class_mercator.cc +++ b/src/geo_iterator/grib_iterator_class_mercator.cc @@ -8,92 +8,26 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -#include "grib_api_internal.h" -#include +#include "grib_iterator_class_mercator.h" -/* - This is used by make_class.pl +eccodes::geo_iterator::Mercator _grib_iterator_mercator{}; +eccodes::geo_iterator::Iterator* grib_iterator_mercator = &_grib_iterator_mercator; - START_CLASS_DEF - CLASS = iterator - SUPER = grib_iterator_class_gen - IMPLEMENTS = destroy - IMPLEMENTS = init;next - MEMBERS = double *lats - MEMBERS = double *lons - MEMBERS = long Nj - END_CLASS_DEF -*/ +namespace eccodes::geo_iterator { -/* START_CLASS_IMP */ - -/* - -Don't edit anything between START_CLASS_IMP and END_CLASS_IMP -Instead edit values between START_CLASS_DEF and END_CLASS_DEF -or edit "iterator.class" and rerun ./make_class.pl - -*/ - - -static void init_class (grib_iterator_class*); - -static int init (grib_iterator* i,grib_handle*,grib_arguments*); -static int next (grib_iterator* i, double *lat, double *lon, double *val); -static int destroy (grib_iterator* i); - - -typedef struct grib_iterator_mercator{ - grib_iterator it; - /* Members defined in gen */ - int carg; - const char* missingValue; - /* Members defined in mercator */ - double *lats; - double *lons; - long Nj; -} grib_iterator_mercator; - -extern grib_iterator_class* grib_iterator_class_gen; - -static grib_iterator_class _grib_iterator_class_mercator = { - &grib_iterator_class_gen, /* super */ - "mercator", /* name */ - sizeof(grib_iterator_mercator),/* size of instance */ - 0, /* inited */ - &init_class, /* init_class */ - &init, /* constructor */ - &destroy, /* destructor */ - &next, /* Next Value */ - 0, /* Previous Value */ - 0, /* Reset the counter */ - 0, /* has next values */ -}; - -grib_iterator_class* grib_iterator_class_mercator = &_grib_iterator_class_mercator; - - -static void init_class(grib_iterator_class* c) -{ - c->previous = (*(c->super))->previous; - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; -} -/* END_CLASS_IMP */ - -#define ITER "Mercator Geoiterator" +#define ITER "Mercator Geoiterator" #define EPSILON 1.0e-10 #ifndef M_PI -#define M_PI 3.14159265358979323846 /* Whole pie */ + #define M_PI 3.14159265358979323846 /* Whole pie */ #endif #ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 /* Half a pie */ + #define M_PI_2 1.57079632679489661923 /* Half a pie */ #endif #ifndef M_PI_4 -#define M_PI_4 0.78539816339744830962 /* Quarter of a pie */ + #define M_PI_4 0.78539816339744830962 /* Quarter of a pie */ #endif #define RAD2DEG 57.29577951308232087684 /* 180 over pi */ @@ -102,7 +36,7 @@ static void init_class(grib_iterator_class* c) /* Adjust longitude (in radians) to range -180 to 180 */ static double adjust_lon_radians(double lon) { - if (lon > M_PI) lon -= 2 * M_PI; + if (lon > M_PI) lon -= 2 * M_PI; if (lon < -M_PI) lon += 2 * M_PI; return lon; } @@ -148,14 +82,13 @@ static double compute_t( return (tan(0.5 * (M_PI_2 - phi)) / con); } -static int init_mercator(grib_handle* h, - grib_iterator_mercator* self, - size_t nv, long nx, long ny, - double DiInMetres, double DjInMetres, - double earthMinorAxisInMetres, double earthMajorAxisInMetres, - double latFirstInRadians, double lonFirstInRadians, - double latLastInRadians, double lonLastInRadians, - double LaDInRadians, double orientationInRadians) +int Mercator::init_mercator(grib_handle* h, + size_t nv, long nx, long ny, + double DiInMetres, double DjInMetres, + double earthMinorAxisInMetres, double earthMajorAxisInMetres, + double latFirstInRadians, double lonFirstInRadians, + double latLastInRadians, double lonLastInRadians, + double LaDInRadians, double orientationInRadians) { int i, j, err = 0; double x0, y0, x, y, latRad, lonRad, latDeg, lonDeg, sinphi, ts; @@ -184,13 +117,13 @@ static int init_mercator(grib_handle* h, y0 = -y0; /* Allocate latitude and longitude arrays */ - self->lats = (double*)grib_context_malloc(h->context, nv * sizeof(double)); - if (!self->lats) { + lats_ = (double*)grib_context_malloc(h->context, nv * sizeof(double)); + if (!lats_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } - self->lons = (double*)grib_context_malloc(h->context, nv * sizeof(double)); - if (!self->lats) { + lons_ = (double*)grib_context_malloc(h->context, nv * sizeof(double)); + if (!lons_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } @@ -211,26 +144,29 @@ static int init_mercator(grib_handle* h, latRad = compute_phi(e, ts, &err); if (err) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Failed to compute the latitude angle, phi2, for the inverse", ITER); - grib_context_free(h->context, self->lats); - grib_context_free(h->context, self->lons); + grib_context_free(h->context, lats_); + grib_context_free(h->context, lons_); return err; } lonRad = adjust_lon_radians(orientationInRadians + _x / (earthMajorAxisInMetres * m1)); if (i == 0 && j == 0) { DEBUG_ASSERT(fabs(latFirstInRadians - latRad) <= EPSILON); } - latDeg = latRad * RAD2DEG; /* Convert to degrees */ - lonDeg = normalise_longitude_in_degrees(lonRad * RAD2DEG); - self->lons[index] = lonDeg; - self->lats[index] = latDeg; + latDeg = latRad * RAD2DEG; /* Convert to degrees */ + lonDeg = normalise_longitude_in_degrees(lonRad * RAD2DEG); + lons_[index] = lonDeg; + lats_[index] = latDeg; } } return GRIB_SUCCESS; } -static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) +int Mercator::init(grib_handle* h, grib_arguments* args) { - int err = 0; + int err = GRIB_SUCCESS; + if ((err = Gen::init(h, args)) != GRIB_SUCCESS) + return err; + long ni, nj, iScansNegatively, jScansPositively, jPointsAreConsecutive, alternativeRowScanning; double latFirstInDegrees, lonFirstInDegrees, LaDInDegrees; double latLastInDegrees, lonLastInDegrees, orientationInDegrees, DiInMetres, DjInMetres, radius = 0; @@ -238,24 +174,22 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) LaDInRadians, orientationInRadians; double earthMajorAxisInMetres = 0, earthMinorAxisInMetres = 0; - grib_iterator_mercator* self = (grib_iterator_mercator*)iter; - - const char* sRadius = grib_arguments_get_name(h, args, self->carg++); - const char* sNi = grib_arguments_get_name(h, args, self->carg++); - const char* sNj = grib_arguments_get_name(h, args, self->carg++); - const char* sLatFirstInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sLonFirstInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sLaDInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sLatLastInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sLonLastInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sOrientationInDegrees = grib_arguments_get_name(h, args, self->carg++); + const char* sRadius = grib_arguments_get_name(h, args, carg_++); + const char* sNi = grib_arguments_get_name(h, args, carg_++); + const char* sNj = grib_arguments_get_name(h, args, carg_++); + const char* sLatFirstInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* sLonFirstInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* sLaDInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* sLatLastInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* sLonLastInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* sOrientationInDegrees = grib_arguments_get_name(h, args, carg_++); /* Dx and Dy are in Metres */ - const char* sDi = grib_arguments_get_name(h, args, self->carg++); - const char* sDj = grib_arguments_get_name(h, args, self->carg++); - const char* siScansNegatively = grib_arguments_get_name(h, args, self->carg++); - const char* sjScansPositively = grib_arguments_get_name(h, args, self->carg++); - const char* sjPointsAreConsecutive = grib_arguments_get_name(h, args, self->carg++); - const char* sAlternativeRowScanning = grib_arguments_get_name(h, args, self->carg++); + const char* sDi = grib_arguments_get_name(h, args, carg_++); + const char* sDj = grib_arguments_get_name(h, args, carg_++); + const char* siScansNegatively = grib_arguments_get_name(h, args, carg_++); + const char* sjScansPositively = grib_arguments_get_name(h, args, carg_++); + const char* sjPointsAreConsecutive = grib_arguments_get_name(h, args, carg_++); + const char* sAlternativeRowScanning = grib_arguments_get_name(h, args, carg_++); if ((err = grib_get_long_internal(h, sNi, &ni)) != GRIB_SUCCESS) return err; if ((err = grib_get_long_internal(h, sNj, &nj)) != GRIB_SUCCESS) return err; @@ -269,8 +203,8 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) earthMinorAxisInMetres = earthMajorAxisInMetres = radius; } - if (iter->nv != ni * nj) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, iter->nv, ni, nj); + if (nv_ != ni * nj) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, nv_, ni, nj); return GRIB_WRONG_GRID; } @@ -307,44 +241,44 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) LaDInRadians = LaDInDegrees * DEG2RAD; orientationInRadians = orientationInDegrees * DEG2RAD; - err = init_mercator(h, self, iter->nv, ni, nj, + err = init_mercator(h, nv_, ni, nj, DiInMetres, DjInMetres, earthMinorAxisInMetres, earthMajorAxisInMetres, latFirstInRadians, lonFirstInRadians, latLastInRadians, lonLastInRadians, LaDInRadians, orientationInRadians); if (err) return err; - iter->e = -1; + e_ = -1; /* Apply the scanning mode flags which may require data array to be transformed */ - err = transform_iterator_data(h->context, iter->data, + err = transform_iterator_data(h->context, data_, iScansNegatively, jScansPositively, jPointsAreConsecutive, alternativeRowScanning, - iter->nv, ni, nj); + nv_, ni, nj); return err; } -static int next(grib_iterator* iter, double* lat, double* lon, double* val) +int Mercator::next(double* lat, double* lon, double* val) const { - grib_iterator_mercator* self = (grib_iterator_mercator*)iter; - - if ((long)iter->e >= (long)(iter->nv - 1)) + if ((long)e_ >= (long)(nv_ - 1)) return 0; - iter->e++; + e_++; - *lat = self->lats[iter->e]; - *lon = self->lons[iter->e]; - if (val && iter->data) { - *val = iter->data[iter->e]; + *lat = lats_[e_]; + *lon = lons_[e_]; + if (val && data_) { + *val = data_[e_]; } return 1; } -static int destroy(grib_iterator* iter) +int Mercator::destroy() { - grib_iterator_mercator* self = (grib_iterator_mercator*)iter; - const grib_context* c = iter->h->context; + DEBUG_ASSERT(h_); + const grib_context* c = h_->context; + grib_context_free(c, lats_); + grib_context_free(c, lons_); - grib_context_free(c, self->lats); - grib_context_free(c, self->lons); - return GRIB_SUCCESS; + return Gen::destroy(); } + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_mercator.h b/src/geo_iterator/grib_iterator_class_mercator.h new file mode 100644 index 000000000..ae845f8af --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_mercator.h @@ -0,0 +1,37 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include "grib_iterator_class_gen.h" + +namespace eccodes::geo_iterator { + +class Mercator : public Gen +{ +public: + Mercator() { class_name_ = "mercator"; } + Iterator* create() const override { return new Mercator(); } + + int init(grib_handle*, grib_arguments*) override; + int next(double*, double*, double*) const override; + int destroy() override; + +private: + int init_mercator(grib_handle*, + size_t, long, long, + double, double, + double, double, + double, double, + double, double, + double, double); +}; + +} // namespace eccodes::geo_iterator diff --git a/src/grib_iterator_class_polar_stereographic.cc b/src/geo_iterator/grib_iterator_class_polar_stereographic.cc similarity index 56% rename from src/grib_iterator_class_polar_stereographic.cc rename to src/geo_iterator/grib_iterator_class_polar_stereographic.cc index 1f0c59d69..beff11bd6 100644 --- a/src/grib_iterator_class_polar_stereographic.cc +++ b/src/geo_iterator/grib_iterator_class_polar_stereographic.cc @@ -8,93 +8,25 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -#include "grib_api_internal.h" -#include +#include "grib_iterator_class_polar_stereographic.h" -/* - This is used by make_class.pl +eccodes::geo_iterator::PolarStereographic _grib_iterator_polar_stereographic{}; +eccodes::geo_iterator::Iterator* grib_iterator_polar_stereographic = &_grib_iterator_polar_stereographic; - START_CLASS_DEF - CLASS = iterator - SUPER = grib_iterator_class_gen - IMPLEMENTS = destroy - IMPLEMENTS = init;next - MEMBERS = double *lats - MEMBERS = double *lons - MEMBERS = long Nj - END_CLASS_DEF -*/ - -/* START_CLASS_IMP */ - -/* - -Don't edit anything between START_CLASS_IMP and END_CLASS_IMP -Instead edit values between START_CLASS_DEF and END_CLASS_DEF -or edit "iterator.class" and rerun ./make_class.pl - -*/ - - -static void init_class (grib_iterator_class*); - -static int init (grib_iterator* i,grib_handle*,grib_arguments*); -static int next (grib_iterator* i, double *lat, double *lon, double *val); -static int destroy (grib_iterator* i); - - -typedef struct grib_iterator_polar_stereographic{ - grib_iterator it; - /* Members defined in gen */ - int carg; - const char* missingValue; - /* Members defined in polar_stereographic */ - double *lats; - double *lons; - long Nj; -} grib_iterator_polar_stereographic; - -extern grib_iterator_class* grib_iterator_class_gen; - -static grib_iterator_class _grib_iterator_class_polar_stereographic = { - &grib_iterator_class_gen, /* super */ - "polar_stereographic", /* name */ - sizeof(grib_iterator_polar_stereographic),/* size of instance */ - 0, /* inited */ - &init_class, /* init_class */ - &init, /* constructor */ - &destroy, /* destructor */ - &next, /* Next Value */ - 0, /* Previous Value */ - 0, /* Reset the counter */ - 0, /* has next values */ -}; - -grib_iterator_class* grib_iterator_class_polar_stereographic = &_grib_iterator_class_polar_stereographic; - - -static void init_class(grib_iterator_class* c) -{ - c->previous = (*(c->super))->previous; - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; -} -/* END_CLASS_IMP */ +namespace eccodes::geo_iterator { #define ITER "Polar stereographic Geoiterator" -static int next(grib_iterator* iter, double* lat, double* lon, double* val) +int PolarStereographic::next(double* lat, double* lon, double* val) const { - grib_iterator_polar_stereographic* self = (grib_iterator_polar_stereographic*)iter; - - if ((long)iter->e >= (long)(iter->nv - 1)) + if ((long)e_ >= (long)(nv_ - 1)) return 0; - iter->e++; + e_++; - *lat = self->lats[iter->e]; - *lon = self->lons[iter->e]; - if (val && iter->data) { - *val = iter->data[iter->e]; + *lat = lats_[e_]; + *lon = lons_[e_]; + if (val && data_) { + *val = data_[e_]; } return 1; } @@ -112,14 +44,17 @@ typedef struct proj_data_t double false_easting; /* x offset in meters */ } proj_data_t; -#define RAD2DEG 57.29577951308232087684 /* 180 over pi */ -#define DEG2RAD 0.01745329251994329576 /* pi over 180 */ -#define PI_OVER_2 1.5707963267948966 /* half pi */ -#define EPSILON 1.0e-10 +#define RAD2DEG 57.29577951308232087684 /* 180 over pi */ +#define DEG2RAD 0.01745329251994329576 /* pi over 180 */ +#define PI_OVER_2 1.5707963267948966 /* half pi */ +#define EPSILON 1.0e-10 -static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) +int PolarStereographic::init(grib_handle* h, grib_arguments* args) { - int ret = 0; + int ret = GRIB_SUCCESS; + if ((ret = Gen::init(h, args)) != GRIB_SUCCESS) + return ret; + double *lats, *lons; /* arrays for latitudes and longitudes */ double lonFirstInDegrees, latFirstInDegrees, radius; double x, y, Dx, Dy; @@ -132,25 +67,27 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) double ts; /* value of small t */ double height; /* height above ellipsoid */ double x0, y0, lonFirst, latFirst; - proj_data_t fwd_proj_data = {0,}; - proj_data_t inv_proj_data = {0,}; + proj_data_t fwd_proj_data = { + 0, + }; + proj_data_t inv_proj_data = { + 0, + }; - grib_iterator_polar_stereographic* self = (grib_iterator_polar_stereographic*)iter; - - const char* s_radius = grib_arguments_get_name(h, args, self->carg++); - const char* s_nx = grib_arguments_get_name(h, args, self->carg++); - const char* s_ny = grib_arguments_get_name(h, args, self->carg++); - const char* s_latFirstInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* s_lonFirstInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* s_southPoleOnPlane = grib_arguments_get_name(h, args, self->carg++); - const char* s_centralLongitude = grib_arguments_get_name(h, args, self->carg++); - const char* s_centralLatitude = grib_arguments_get_name(h, args, self->carg++); - const char* s_Dx = grib_arguments_get_name(h, args, self->carg++); - const char* s_Dy = grib_arguments_get_name(h, args, self->carg++); - const char* s_iScansNegatively = grib_arguments_get_name(h, args, self->carg++); - const char* s_jScansPositively = grib_arguments_get_name(h, args, self->carg++); - const char* s_jPointsAreConsecutive = grib_arguments_get_name(h, args, self->carg++); - const char* s_alternativeRowScanning = grib_arguments_get_name(h, args, self->carg++); + const char* s_radius = grib_arguments_get_name(h, args, carg_++); + const char* s_nx = grib_arguments_get_name(h, args, carg_++); + const char* s_ny = grib_arguments_get_name(h, args, carg_++); + const char* s_latFirstInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* s_lonFirstInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* s_southPoleOnPlane = grib_arguments_get_name(h, args, carg_++); + const char* s_centralLongitude = grib_arguments_get_name(h, args, carg_++); + const char* s_centralLatitude = grib_arguments_get_name(h, args, carg_++); + const char* s_Dx = grib_arguments_get_name(h, args, carg_++); + const char* s_Dy = grib_arguments_get_name(h, args, carg_++); + const char* s_iScansNegatively = grib_arguments_get_name(h, args, carg_++); + const char* s_jScansPositively = grib_arguments_get_name(h, args, carg_++); + const char* s_jPointsAreConsecutive = grib_arguments_get_name(h, args, carg_++); + const char* s_alternativeRowScanning = grib_arguments_get_name(h, args, carg_++); if (grib_is_earth_oblate(h)) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Only supported for spherical earth.", ITER); @@ -164,8 +101,8 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) if ((ret = grib_get_long_internal(h, s_ny, &ny)) != GRIB_SUCCESS) return ret; - if (iter->nv != nx * ny) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, iter->nv, nx, ny); + if (nv_ != nx * ny) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, nv_, nx, ny); return GRIB_WRONG_GRID; } if ((ret = grib_get_double_internal(h, s_latFirstInDegrees, &latFirstInDegrees)) != GRIB_SUCCESS) @@ -243,18 +180,18 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) inv_proj_data.mcs = cos(con1); inv_proj_data.tcs = tan(0.5 * (PI_OVER_2 - con1)); } - self->lats = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); - if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, iter->nv * sizeof(double)); + lats_ = (double*)grib_context_malloc(h->context, nv_ * sizeof(double)); + if (!lats_) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv_ * sizeof(double)); return GRIB_OUT_OF_MEMORY; } - self->lons = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); - if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, iter->nv * sizeof(double)); + lons_ = (double*)grib_context_malloc(h->context, nv_ * sizeof(double)); + if (!lons_) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv_ * sizeof(double)); return GRIB_OUT_OF_MEMORY; } - lats = self->lats; - lons = self->lons; + lats = lats_; + lons = lons_; /* These will be processed later in transform_iterator_data() */ /* Dx = iScansNegatively == 0 ? Dx : -Dx; */ /* Dy = jScansPositively == 1 ? Dy : -Dy; */ @@ -294,81 +231,83 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) y += Dy; } -// /*standardParallel = (southPoleOnPlane == 1) ? -90 : +90;*/ -// if (jPointsAreConsecutive) -// { -// x=xFirst; -// for (i=0;i360) *lons -= 360; -// lons++; -// lats++; -// y+=Dy; -// } -// x+=Dx; -// } -// } -// else -// { -// y=yFirst; -// for (j=0;j360) *lons -= 360; -// lons++; -// lats++; -// x+=Dx; -// } -// y+=Dy; -// } -// } + // /*standardParallel = (southPoleOnPlane == 1) ? -90 : +90;*/ + // if (jPointsAreConsecutive) + // { + // x=xFirst; + // for (i=0;i360) *lons -= 360; + // lons++; + // lats++; + // y+=Dy; + // } + // x+=Dx; + // } + // } + // else + // { + // y=yFirst; + // for (j=0;j360) *lons -= 360; + // lons++; + // lats++; + // x+=Dx; + // } + // y+=Dy; + // } + // } - iter->e = -1; + e_ = -1; /* Apply the scanning mode flags which may require data array to be transformed */ - ret = transform_iterator_data(h->context, iter->data, + ret = transform_iterator_data(h->context, data_, iScansNegatively, jScansPositively, jPointsAreConsecutive, alternativeRowScanning, - iter->nv, nx, ny); + nv_, nx, ny); return ret; } -static int destroy(grib_iterator* i) +int PolarStereographic::destroy() { - grib_iterator_polar_stereographic* self = (grib_iterator_polar_stereographic*)i; - const grib_context* c = i->h->context; + DEBUG_ASSERT(h_); + const grib_context* c = h_->context; + grib_context_free(c, lats_); + grib_context_free(c, lons_); - grib_context_free(c, self->lats); - grib_context_free(c, self->lons); - return GRIB_SUCCESS; + return Gen::destroy(); } + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_polar_stereographic.h b/src/geo_iterator/grib_iterator_class_polar_stereographic.h new file mode 100644 index 000000000..e2824408a --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_polar_stereographic.h @@ -0,0 +1,29 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include "grib_iterator_class_gen.h" + +namespace eccodes::geo_iterator { + +class PolarStereographic : public Gen +{ +public: + PolarStereographic() : + Gen() { class_name_ = "polar_stereographic"; } + Iterator* create() const override { return new PolarStereographic(); } + + int init(grib_handle*, grib_arguments*) override; + int next(double*, double*, double*) const override; + int destroy() override; +}; + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_regular.cc b/src/geo_iterator/grib_iterator_class_regular.cc new file mode 100644 index 000000000..11d32ff03 --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_regular.cc @@ -0,0 +1,163 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#include "grib_iterator_class_regular.h" + +eccodes::geo_iterator::Regular _grib_iterator_regular{}; +eccodes::geo_iterator::Iterator* grib_iterator_regular = &_grib_iterator_regular; + +namespace eccodes::geo_iterator { + +#define ITER "Regular grid Geoiterator" + +int Regular::next(double* lat, double* lon, double* val) const +{ + if ((long)e_ >= (long)(nv_ - 1)) + return 0; + + e_++; + + *lat = lats_[(long)floor(e_ / Ni_)]; + *lon = lons_[(long)e_ % Ni_]; + if (val && data_) { + *val = data_[e_]; + } + return 1; +} + +int Regular::previous(double* lat, double* lon, double* val) const +{ + if (e_ < 0) + return 0; + *lat = lats_[(long)floor(e_ / Ni_)]; + *lon = lons_[e_ % Ni_]; + if (val && data_) { + *val = data_[e_]; + } + e_--; + + return 1; +} + +int Regular::destroy() +{ + DEBUG_ASSERT(h_); + const grib_context* c = h_->context; + grib_context_free(c, lats_); + grib_context_free(c, lons_); + lats_ = lons_ = NULL; + + return Gen::destroy(); +} + +int Regular::init(grib_handle* h, grib_arguments* args) +{ + int ret = Gen::init(h, args); + if (ret != GRIB_SUCCESS) return ret; + + long Ni; /* Number of points along a parallel = Nx */ + long Nj; /* Number of points along a meridian = Ny */ + double idir, idir_coded, lon1, lon2; + long loi; + + const char* s_lon1 = grib_arguments_get_name(h, args, carg_++); + const char* s_idir = grib_arguments_get_name(h, args, carg_++); + const char* s_Ni = grib_arguments_get_name(h, args, carg_++); + const char* s_Nj = grib_arguments_get_name(h, args, carg_++); + const char* s_iScansNeg = grib_arguments_get_name(h, args, carg_++); + + if ((ret = grib_get_double_internal(h, s_lon1, &lon1))) + return ret; + if ((ret = grib_get_double_internal(h, "longitudeOfLastGridPointInDegrees", &lon2))) + return ret; + if ((ret = grib_get_double_internal(h, s_idir, &idir))) // can be GRIB_MISSING_DOUBLE + return ret; + idir_coded = idir; + if ((ret = grib_get_long_internal(h, s_Ni, &Ni))) + return ret; + if (grib_is_missing(h, s_Ni, &ret) && ret == GRIB_SUCCESS) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Key %s cannot be 'missing' for a regular grid!", ITER, s_Ni); + return GRIB_WRONG_GRID; + } + + if ((ret = grib_get_long_internal(h, s_Nj, &Nj))) + return ret; + if (grib_is_missing(h, s_Nj, &ret) && ret == GRIB_SUCCESS) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Key %s cannot be 'missing' for a regular grid!", ITER, s_Nj); + return GRIB_WRONG_GRID; + } + + if (Ni * Nj != nv_) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Ni*Nj!=numberOfDataPoints (%ld*%ld!=%zu)", ITER, Ni, Nj, nv_); + return GRIB_WRONG_GRID; + } + + if ((ret = grib_get_long_internal(h, s_iScansNeg, &iScansNegatively_))) + return ret; + + /* GRIB-801: Careful of case with a single point! Ni==1 */ + if (Ni > 1) { + /* Note: If first and last longitudes are equal I assume you wanna go round the globe */ + if (iScansNegatively_) { + if (lon1 > lon2) { + idir = (lon1 - lon2) / (Ni - 1); + } + else { + idir = (lon1 + 360.0 - lon2) / (Ni - 1); + } + } + else { + if (lon2 > lon1) { + idir = (lon2 - lon1) / (Ni - 1); + } + else { + idir = (lon2 + 360.0 - lon1) / (Ni - 1); + } + } + } + if (iScansNegatively_) { + idir = -idir; + } + else { + if (lon1 + (Ni - 2) * idir > 360) + lon1 -= 360; + /*See ECC-704, GRIB-396*/ + /*else if ( (lon1+(Ni-1)*idir)-360 > epsilon ){ + idir=360.0/(float)Ni; + }*/ + } + + Ni_ = Ni; + Nj_ = Nj; + + lats_ = (double*)grib_context_malloc(h->context, Nj * sizeof(double)); + lons_ = (double*)grib_context_malloc(h->context, Ni * sizeof(double)); + + if (idir != idir_coded) { + grib_context_log(h->context, GRIB_LOG_DEBUG, "%s: Using idir=%g (coded value=%g)", ITER, idir, idir_coded); + } + + for (loi = 0; loi < Ni; loi++) { + lons_[loi] = lon1; + lon1 += idir; + } + + // ECC-1406: Due to rounding, errors can accumulate. + // So we ensure the last longitude is longitudeOfLastGridPointInDegrees + // Also see ECC-1671, ECC-1708 + if (lon2 > 0) { + lon2 = normalise_longitude_in_degrees(lon2); + } + lons_[Ni - 1] = lon2; + + return ret; +} + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_regular.h b/src/geo_iterator/grib_iterator_class_regular.h new file mode 100644 index 000000000..428397b42 --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_regular.h @@ -0,0 +1,40 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include "grib_iterator_class_gen.h" + +namespace eccodes::geo_iterator { + +class Regular : public Gen +{ +public: + Regular() { class_name_ = "regular"; } + Iterator* create() const override { return new Regular(); } + + int init(grib_handle*, grib_arguments*) override; + int next(double*, double*, double*) const override; + int previous(double*, double*, double*) const override; + int destroy() override; + +protected: + long Ni_ = 0; + long Nj_ = 0; + long iScansNegatively_ = 0; + long isRotated_ = 0; + double angleOfRotation_ = 0.; + double southPoleLat_ = 0.; + double southPoleLon_ = 0.; + long jPointsAreConsecutive_ = 0; + long disableUnrotate_ = 0; +}; + +} // namespace eccodes::geo_iterator diff --git a/src/grib_iterator_class_space_view.cc b/src/geo_iterator/grib_iterator_class_space_view.cc similarity index 73% rename from src/grib_iterator_class_space_view.cc rename to src/geo_iterator/grib_iterator_class_space_view.cc index 1622f94a5..d3085dd81 100644 --- a/src/grib_iterator_class_space_view.cc +++ b/src/geo_iterator/grib_iterator_class_space_view.cc @@ -8,93 +8,25 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -#include "grib_api_internal.h" -#include +#include "grib_iterator_class_space_view.h" -/* - This is used by make_class.pl +eccodes::geo_iterator::SpaceView _grib_iterator_space_view{}; +eccodes::geo_iterator::Iterator* grib_iterator_space_view = &_grib_iterator_space_view; - START_CLASS_DEF - CLASS = iterator - SUPER = grib_iterator_class_gen - IMPLEMENTS = destroy - IMPLEMENTS = init;next - MEMBERS = double *lats - MEMBERS = double *lons - MEMBERS = long Nj - END_CLASS_DEF -*/ - -/* START_CLASS_IMP */ - -/* - -Don't edit anything between START_CLASS_IMP and END_CLASS_IMP -Instead edit values between START_CLASS_DEF and END_CLASS_DEF -or edit "iterator.class" and rerun ./make_class.pl - -*/ - - -static void init_class (grib_iterator_class*); - -static int init (grib_iterator* i,grib_handle*,grib_arguments*); -static int next (grib_iterator* i, double *lat, double *lon, double *val); -static int destroy (grib_iterator* i); - - -typedef struct grib_iterator_space_view{ - grib_iterator it; - /* Members defined in gen */ - int carg; - const char* missingValue; - /* Members defined in space_view */ - double *lats; - double *lons; - long Nj; -} grib_iterator_space_view; - -extern grib_iterator_class* grib_iterator_class_gen; - -static grib_iterator_class _grib_iterator_class_space_view = { - &grib_iterator_class_gen, /* super */ - "space_view", /* name */ - sizeof(grib_iterator_space_view),/* size of instance */ - 0, /* inited */ - &init_class, /* init_class */ - &init, /* constructor */ - &destroy, /* destructor */ - &next, /* Next Value */ - 0, /* Previous Value */ - 0, /* Reset the counter */ - 0, /* has next values */ -}; - -grib_iterator_class* grib_iterator_class_space_view = &_grib_iterator_class_space_view; - - -static void init_class(grib_iterator_class* c) -{ - c->previous = (*(c->super))->previous; - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; -} -/* END_CLASS_IMP */ +namespace eccodes::geo_iterator { #define ITER "Space view Geoiterator" -static int next(grib_iterator* iter, double* lat, double* lon, double* val) +int SpaceView::next(double* lat, double* lon, double* val) const { - grib_iterator_space_view* self = (grib_iterator_space_view*)iter; - - if ((long)iter->e >= (long)(iter->nv - 1)) + if ((long)e_ >= (long)(nv_ - 1)) return 0; - iter->e++; + e_++; - *lat = self->lats[iter->e]; - *lon = self->lons[iter->e]; - if (val && iter->data) { - *val = iter->data[iter->e]; + *lat = lats_[e_]; + *lon = lons_[e_]; + if (val && data_) { + *val = data_[e_]; } return 1; } @@ -142,12 +74,15 @@ static int next(grib_iterator* iter, double* lat, double* lon, double* val) #define RAD2DEG 57.29577951308232087684 /* 180 over pi */ #define DEG2RAD 0.01745329251994329576 /* pi over 180 */ -static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) +int SpaceView::init(grib_handle* h, grib_arguments* args) { - /* REFERENCE: - * LRIT/HRIT Global Specification (CGMS 03, Issue 2.6, 12.08.1999) - */ int ret = GRIB_SUCCESS; + if ((ret = Gen::init(h, args)) != GRIB_SUCCESS) + return ret; + + /* REFERENCE: + * LRIT/HRIT Global Specification (CGMS 03, Issue 2.6, 12.08.1999) + */ double *lats, *lons; /* arrays of latitudes and longitudes */ double latOfSubSatellitePointInDegrees, lonOfSubSatellitePointInDegrees; double orientationInDegrees, nrInRadiusOfEarth; @@ -163,31 +98,29 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) double factor_1, factor_2, tmp1, Sd, Sn, Sxy, S1, S2, S3; int x0, y0, ix, iy; double *s_x, *c_x; /* arrays storing sin and cos values */ - size_t array_size = (iter->nv * sizeof(double)); + size_t array_size = (nv_ * sizeof(double)); - grib_iterator_space_view* self = (grib_iterator_space_view*)iter; + const char* sradius = grib_arguments_get_name(h, args, carg_++); + const char* sEarthIsOblate = grib_arguments_get_name(h, args, carg_++); + const char* sMajorAxisInMetres = grib_arguments_get_name(h, args, carg_++); + const char* sMinorAxisInMetres = grib_arguments_get_name(h, args, carg_++); + const char* snx = grib_arguments_get_name(h, args, carg_++); + const char* sny = grib_arguments_get_name(h, args, carg_++); + const char* sLatOfSubSatellitePointInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* sLonOfSubSatellitePointInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* sDx = grib_arguments_get_name(h, args, carg_++); + const char* sDy = grib_arguments_get_name(h, args, carg_++); + const char* sXpInGridLengths = grib_arguments_get_name(h, args, carg_++); + const char* sYpInGridLengths = grib_arguments_get_name(h, args, carg_++); + const char* sOrientationInDegrees = grib_arguments_get_name(h, args, carg_++); + const char* sNrInRadiusOfEarthScaled = grib_arguments_get_name(h, args, carg_++); + const char* sXo = grib_arguments_get_name(h, args, carg_++); + const char* sYo = grib_arguments_get_name(h, args, carg_++); - const char* sradius = grib_arguments_get_name(h, args, self->carg++); - const char* sEarthIsOblate = grib_arguments_get_name(h, args, self->carg++); - const char* sMajorAxisInMetres = grib_arguments_get_name(h, args, self->carg++); - const char* sMinorAxisInMetres = grib_arguments_get_name(h, args, self->carg++); - const char* snx = grib_arguments_get_name(h, args, self->carg++); - const char* sny = grib_arguments_get_name(h, args, self->carg++); - const char* sLatOfSubSatellitePointInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sLonOfSubSatellitePointInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sDx = grib_arguments_get_name(h, args, self->carg++); - const char* sDy = grib_arguments_get_name(h, args, self->carg++); - const char* sXpInGridLengths = grib_arguments_get_name(h, args, self->carg++); - const char* sYpInGridLengths = grib_arguments_get_name(h, args, self->carg++); - const char* sOrientationInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sNrInRadiusOfEarthScaled = grib_arguments_get_name(h, args, self->carg++); - const char* sXo = grib_arguments_get_name(h, args, self->carg++); - const char* sYo = grib_arguments_get_name(h, args, self->carg++); - - const char* siScansNegatively = grib_arguments_get_name(h, args, self->carg++); - const char* sjScansPositively = grib_arguments_get_name(h, args, self->carg++); - const char* sjPointsAreConsecutive = grib_arguments_get_name(h, args, self->carg++); - const char* sAlternativeRowScanning = grib_arguments_get_name(h, args, self->carg++); + const char* siScansNegatively = grib_arguments_get_name(h, args, carg_++); + const char* sjScansPositively = grib_arguments_get_name(h, args, carg_++); + const char* sjPointsAreConsecutive = grib_arguments_get_name(h, args, carg_++); + const char* sAlternativeRowScanning = grib_arguments_get_name(h, args, carg_++); if ((ret = grib_get_long_internal(h, snx, &nx)) != GRIB_SUCCESS) return ret; @@ -207,8 +140,8 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) return ret; } - if (iter->nv != nx * ny) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, iter->nv, nx, ny); + if (nv_ != nx * ny) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, nv_, nx, ny); return GRIB_WRONG_GRID; } if ((ret = grib_get_double_internal(h, sLatOfSubSatellitePointInDegrees, &latOfSubSatellitePointInDegrees)) != GRIB_SUCCESS) @@ -288,18 +221,18 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) rx = angular_size / dx; ry = (r_pol / r_eq) * angular_size / dy; - self->lats = (double*)grib_context_malloc(h->context, array_size); - if (!self->lats) { + lats_ = (double*)grib_context_malloc(h->context, array_size); + if (!lats_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, array_size); return GRIB_OUT_OF_MEMORY; } - self->lons = (double*)grib_context_malloc(h->context, array_size); - if (!self->lats) { + lons_ = (double*)grib_context_malloc(h->context, array_size); + if (!lons_) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, array_size); return GRIB_OUT_OF_MEMORY; } - lats = self->lats; - lons = self->lons; + lats = lats_; + lons = lons_; if (!iScansNegatively) { xp = xp - x0; @@ -373,17 +306,19 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) } grib_context_free(h->context, s_x); grib_context_free(h->context, c_x); - iter->e = -1; + e_ = -1; return ret; } -static int destroy(grib_iterator* iter) +int SpaceView::destroy() { - grib_iterator_space_view* self = (grib_iterator_space_view*)iter; - const grib_context* c = iter->h->context; + DEBUG_ASSERT(h_); + const grib_context* c = h_->context; + grib_context_free(c, lats_); + grib_context_free(c, lons_); - grib_context_free(c, self->lats); - grib_context_free(c, self->lons); - return GRIB_SUCCESS; + return Gen::destroy(); } + +} // namespace eccodes::geo_iterator diff --git a/src/geo_iterator/grib_iterator_class_space_view.h b/src/geo_iterator/grib_iterator_class_space_view.h new file mode 100644 index 000000000..ec958615c --- /dev/null +++ b/src/geo_iterator/grib_iterator_class_space_view.h @@ -0,0 +1,28 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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. + */ + +#pragma once + +#include "grib_iterator_class_gen.h" + +namespace eccodes::geo_iterator { + +class SpaceView : public Gen +{ +public: + SpaceView() { class_name_ = "space_view"; } + Iterator* create() const override { return new SpaceView(); } + + int init(grib_handle*, grib_arguments*) override; + int next(double*, double*, double*) const override; + int destroy() override; +}; + +} // namespace eccodes::geo_iterator diff --git a/src/grib_accessor.cc b/src/grib_accessor.cc deleted file mode 100644 index a684b9e1d..000000000 --- a/src/grib_accessor.cc +++ /dev/null @@ -1,877 +0,0 @@ -/* - * (C) Copyright 2005- ECMWF. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - * - * 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. - */ - -/*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 - ***************************************************************************/ - -#include "grib_accessor.h" - -// Note: A fast cut-down version of strcmp which does NOT return -1 -// 0 means input strings are equal and 1 means not equal -GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b) -{ - if (*a != *b) - return 1; - while ((*a != 0 && *b != 0) && *(a) == *(b)) { - a++; - b++; - } - return (*a == 0 && *b == 0) ? 0 : 1; -} - -void grib_accessor_dump(grib_accessor* a, grib_dumper* f) -{ - grib_accessor_class* c = a->cclass; - while (c) { - if (c->dump) { - c->dump(a, f); - return; - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); -} - -int grib_pack_missing(grib_accessor* a) -{ - grib_accessor_class* c = a->cclass; - //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); - while (c) { - if (c->pack_missing) { - return c->pack_missing(a); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -// int grib_pack_zero(grib_accessor* a) -// { -// grib_accessor_class* c = a->cclass; -// while (c) { -// if (c->clear) { -// return c->clear(a); -// } -// c = c->super ? *(c->super) : NULL; -// } -// DEBUG_ASSERT(0); -// return 0; -// } - -int grib_is_missing_internal(grib_accessor* a) -{ - grib_accessor_class* c = a->cclass; - // grib_context_log(a->context, GRIB_LOG_DEBUG, - // "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); - while (c) { - if (c->is_missing) { - return c->is_missing(a); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_pack_double(grib_accessor* a, const double* v, size_t* len) -{ - grib_accessor_class* c = a->cclass; - //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); - while (c) { - if (c->pack_double) { - return c->pack_double(a, v, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_pack_float(grib_accessor* a, const float* v, size_t* len) -{ - grib_accessor_class* c = a->cclass; - while (c) { - if (c->pack_float) { - return c->pack_float(a, v, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_pack_expression(grib_accessor* a, grib_expression* e) -{ - grib_accessor_class* c = a->cclass; - // grib_context_log(a->context, GRIB_LOG_INFO, "....(%s)%s is packing", - // (a->parent->owner)?(a->parent->owner->name):"root", - // a->name); - while (c) { - if (c->pack_expression) { - return c->pack_expression(a, e); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_pack_string(grib_accessor* a, const char* v, size_t* len) -{ - grib_accessor_class* c = a->cclass; - //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (string) %s",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?v:"(null)"); - while (c) { - if (c->pack_string) { - return c->pack_string(a, v, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_pack_string_array(grib_accessor* a, const char** v, size_t* len) -{ - grib_accessor_class* c = a->cclass; - //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (string) %s",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?v:"(null)"); - while (c) { - if (c->pack_string_array) { - return c->pack_string_array(a, v, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_pack_long(grib_accessor* a, const long* v, size_t* len) -{ - grib_accessor_class* c = a->cclass; - //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (long) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); - while (c) { - if (c->pack_long) { - return c->pack_long(a, v, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_pack_bytes(grib_accessor* a, const unsigned char* v, size_t* len) -{ - grib_accessor_class* c = a->cclass; - //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (bytes) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); - while (c) { - if (c->pack_bytes) { - return c->pack_bytes(a, v, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_unpack_bytes(grib_accessor* a, unsigned char* v, size_t* len) -{ - grib_accessor_class* c = a->cclass; - //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (bytes)",(a->parent->owner)?(a->parent->owner->name):"root", a->name); - while (c) { - if (c->unpack_bytes) { - return c->unpack_bytes(a, v, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_unpack_double_subarray(grib_accessor* a, double* v, size_t start, size_t len) -{ - grib_accessor_class* c = a->cclass; - while (c) { - if (c->unpack_double_subarray) { - return c->unpack_double_subarray(a, v, start, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_unpack_double(grib_accessor* a, double* v, size_t* len) -{ - grib_accessor_class* c = a->cclass; - //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (double)",(a->parent->owner)?(a->parent->owner->name):"root", a->name); - while (c) { - if (c->unpack_double) { - return c->unpack_double(a, v, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_unpack_float(grib_accessor* a, float* v, size_t* len) -{ - grib_accessor_class* c = a->cclass; - while (c) { - //printf("grib_accessor.c grib_unpack_float:: c->name=%s\n",c->name); - if (c->unpack_float) { - return c->unpack_float(a, v, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -template <> -int grib_unpack(grib_accessor* a, double* v, size_t* len) -{ - return grib_unpack_double(a, v, len); -} - -template <> -int grib_unpack(grib_accessor* a, float* v, size_t* len) -{ - return grib_unpack_float(a, v, len); -} - -int grib_unpack_double_element(grib_accessor* a, size_t i, double* v) -{ - grib_accessor_class* c = a->cclass; - while (c) { - if (c->unpack_double_element) { - return c->unpack_double_element(a, i, v); - } - c = c->super ? *(c->super) : NULL; - } - return GRIB_NOT_IMPLEMENTED; -} -int grib_unpack_float_element(grib_accessor* a, size_t i, float* v) -{ - // grib_accessor_class* c = a->cclass; - // while (c) { - // if (c->unpack_float_element) { - // return c->unpack_float_element(a, i, v); - // } - // c = c->super ? *(c->super) : NULL; - //} - - return GRIB_NOT_IMPLEMENTED; -} - -// Get the values for the indices passed in. -// The length of the 'index_array' argument should be 'len' and 'val_array' should also contain at least 'len' elements -int grib_unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) -{ - grib_accessor_class* c = a->cclass; - DEBUG_ASSERT(len > 0); - while (c) { - if (c->unpack_double_element_set) { - return c->unpack_double_element_set(a, index_array, len, val_array); - } - c = c->super ? *(c->super) : NULL; - } - return GRIB_NOT_IMPLEMENTED; -} -int grib_unpack_float_element_set(grib_accessor* a, const size_t* index_array, size_t len, float* val_array) -{ - // grib_accessor_class* c = a->cclass; - // DEBUG_ASSERT(len > 0); - // while (c) { - // if (c->unpack_float_element_set) { - // return c->unpack_float_element_set(a, index_array, len, val_array); - // } - // c = c->super ? *(c->super) : NULL; - // } - - return GRIB_NOT_IMPLEMENTED; -} - -int grib_unpack_string(grib_accessor* a, char* v, size_t* len) -{ - grib_accessor_class* c = a->cclass; - //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (string)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); - while (c) { - if (c->unpack_string) { - return c->unpack_string(a, v, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_unpack_string_array(grib_accessor* a, char** v, size_t* len) -{ - grib_accessor_class* c = a->cclass; - while (c) { - if (c->unpack_string_array) { - return c->unpack_string_array(a, v, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_accessors_list_unpack_long(grib_accessors_list* al, long* val, size_t* buffer_len) -{ - int err = GRIB_SUCCESS; - size_t unpacked_len = 0; - size_t len = 0; - - while (al && err == GRIB_SUCCESS) { - len = *buffer_len - unpacked_len; - err = grib_unpack_long(al->accessor, val + unpacked_len, &len); - unpacked_len += len; - al = al->next; - } - - *buffer_len = unpacked_len; - return err; -} - -int grib_accessors_list_unpack_double(grib_accessors_list* al, double* val, size_t* buffer_len) -{ - int err = GRIB_SUCCESS; - size_t unpacked_len = 0; - size_t len = 0; - - while (al && err == GRIB_SUCCESS) { - len = *buffer_len - unpacked_len; - err = grib_unpack_double(al->accessor, val + unpacked_len, &len); - unpacked_len += len; - al = al->next; - } - - *buffer_len = unpacked_len; - return err; -} - -int grib_accessors_list_unpack_float(grib_accessors_list* al, float* val, size_t* buffer_len) -{ - int err = GRIB_SUCCESS; - size_t unpacked_len = 0; - size_t len = 0; - - while (al && err == GRIB_SUCCESS) { - len = *buffer_len - unpacked_len; - err = grib_unpack_float(al->accessor, val + unpacked_len, &len); - unpacked_len += len; - al = al->next; - } - - *buffer_len = unpacked_len; - return err; -} - -int grib_accessors_list_unpack_string(grib_accessors_list* al, char** val, size_t* buffer_len) -{ - int err = GRIB_SUCCESS; - size_t unpacked_len = 0; - size_t len = 0; - - while (al && err == GRIB_SUCCESS) { - len = *buffer_len - unpacked_len; - err = grib_unpack_string_array(al->accessor, val + unpacked_len, &len); - unpacked_len += len; - al = al->next; - } - - *buffer_len = unpacked_len; - return err; -} - -int grib_unpack_long(grib_accessor* a, long* v, size_t* len) -{ - grib_accessor_class* c = a->cclass; - //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (long)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); - while (c) { - if (c->unpack_long) { - return c->unpack_long(a, v, len); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -long grib_accessor_get_native_type(grib_accessor* a) -{ - grib_accessor_class* c = NULL; - if (a) - c = a->cclass; - - while (c) { - if (c->get_native_type) - return c->get_native_type(a); - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -long grib_get_next_position_offset(grib_accessor* a) -{ - grib_accessor_class* c = NULL; - //grib_context_log(a->context, GRIB_LOG_DEBUG, - // "(%s)%s is checking next (long)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); - if (a) - c = a->cclass; - - while (c) { - if (c->next_offset) - return c->next_offset(a); - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -long grib_string_length(grib_accessor* a) -{ - grib_accessor_class* c = NULL; - if (a) - c = a->cclass; - - while (c) { - if (c->string_length) - return c->string_length(a); - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -long grib_byte_offset(grib_accessor* a) -{ - grib_accessor_class* c = NULL; - if (a) - c = a->cclass; - - while (c) { - if (c->byte_offset) - return c->byte_offset(a); - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -long grib_byte_count(grib_accessor* a) -{ - grib_accessor_class* c = NULL; - if (a) - c = a->cclass; - - while (c) { - if (c->byte_count) - return c->byte_count(a); - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_value_count(grib_accessor* a, long* count) -{ - grib_accessor_class* c = NULL; - int err = 0; - if (a) - c = a->cclass; - - while (c) { - if (c->value_count) { - err = c->value_count(a, count); - return err; - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -int grib_accessors_list_value_count(grib_accessors_list* al, size_t* count) -{ - long lcount = 0; - *count = 0; - while (al) { - grib_value_count(al->accessor, &lcount); - *count += lcount; - al = al->next; - } - return 0; -} - -int grib_accessor_notify_change(grib_accessor* a, grib_accessor* changed) -{ - grib_accessor_class* c = NULL; - if (a) - c = a->cclass; - - while (c) { - if (c->notify_change) - return c->notify_change(a, changed); - c = c->super ? *(c->super) : NULL; - } - if (a && a->cclass) - fprintf(stderr, "Error: notify_change not implemented for %s %s\n", a->cclass->name, a->name); - DEBUG_ASSERT(0); - return 0; -} - -// For this one, ALL init are called -static void init_accessor(grib_accessor_class* c, grib_accessor* a, const long len, grib_arguments* args) -{ - if (c) { - grib_accessor_class* s = c->super ? *(c->super) : NULL; - init_accessor(s, a, len, args); - if (c->init) - c->init(a, len, args); - } -} - -void grib_init_accessor(grib_accessor* a, const long len, grib_arguments* args) -{ - init_accessor(a->cclass, a, len, args); -} - -// For this one, ALL destroy are called -void grib_accessor_delete(grib_context* ct, grib_accessor* a) -{ - grib_accessor_class* c = a->cclass; - while (c) { - grib_accessor_class* s = c->super ? *(c->super) : NULL; - //printf("grib_accessor_delete: before destroy a=%p c->name=%s ==> a->name=%s\n", (void*)a, c->name, a->name); - if (c->destroy) { - c->destroy(ct, a); - } - c = s; - } - // printf("grib_accessor_delete before free a=%p\n", (void*)a); - grib_context_free(ct, a); -} - -grib_accessor* grib_accessor_clone(grib_accessor* a, grib_section* s, int* err) -{ - grib_accessor_class* c = a->cclass; - const grib_context* ct = a->context; - while (c) { - grib_accessor_class* super = c->super ? *(c->super) : NULL; - grib_context_log(ct, GRIB_LOG_DEBUG, "clone %s ==> %s", c->name, a->name); - if (c->make_clone) { - return c->make_clone(a, s, err); - } - c = super; - } - return 0; -} - -void grib_update_size(grib_accessor* a, size_t len) -{ - grib_accessor_class* c = a->cclass; - //grib_context_log(a->context, GRIB_LOG_DEBUG, - // "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); - while (c) { - if (c->update_size) { - c->update_size(a, len); - return; - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); -} - -int grib_nearest_smaller_value(grib_accessor* a, double val, double* nearest) -{ - grib_accessor_class* c = a->cclass; - while (c) { - if (c->nearest_smaller_value) { - return c->nearest_smaller_value(a, val, nearest); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - - -size_t grib_preferred_size(grib_accessor* a, int from_handle) -{ - grib_accessor_class* c = a->cclass; - // grib_context_log(a->context, GRIB_LOG_DEBUG, - // "(%s)%s is packing (long) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); - while (c) { - if (c->preferred_size) { - return c->preferred_size(a, from_handle); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -grib_accessor* grib_next_accessor(grib_accessor* a) -{ - grib_accessor_class* c = a->cclass; - while (c) { - if (c->next) { - return c->next(a, 1); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} - -void grib_resize(grib_accessor* a, size_t new_size) -{ - grib_accessor_class* c = a->cclass; - //grib_context_log(a->context, GRIB_LOG_DEBUG, - // "(%s)%s is packing (long) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); - while (c) { - if (c->resize) { - c->resize(a, new_size); - return; - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return; -} - -int grib_compare_accessors(grib_accessor* a1, grib_accessor* a2, int compare_flags) -{ - int ret = 0; - long type1 = 0; - long type2 = 0; - int type_mismatch = 0; - grib_accessor_class* c1 = NULL; - - if ((compare_flags & GRIB_COMPARE_NAMES) && grib_inline_strcmp(a1->name, a2->name)) - return GRIB_NAME_MISMATCH; - - if (compare_flags & GRIB_COMPARE_TYPES) { - type1 = grib_accessor_get_native_type(a1); - type2 = grib_accessor_get_native_type(a2); - - type_mismatch = type1 != type2 ? 1 : 0; - } - - ret = GRIB_UNABLE_TO_COMPARE_ACCESSORS; - c1 = a1->cclass; - while (c1) { - if (c1->compare) { - ret = c1->compare(a1, a2); - break; - } - c1 = c1->super ? *(c1->super) : NULL; - } - - if (ret == GRIB_VALUE_MISMATCH && type_mismatch) - ret = GRIB_TYPE_AND_VALUE_MISMATCH; - - return ret; -} - -// int grib_accessor_clear_attributes(grib_accessor* a) -// { -// int id; -// for (id=0;idattributes[id]=NULL; -// } -// return 0; -// } - -int grib_accessor_add_attribute(grib_accessor* a, grib_accessor* attr, int nest_if_clash) -{ - int id = 0; - int idx = 0; - grib_accessor* same = NULL; - grib_accessor* aloc = a; - - if (grib_accessor_has_attributes(a)) { - same = grib_accessor_get_attribute_index(a, attr->name, &id); - } - - if (same) { - if (nest_if_clash == 0) - return GRIB_ATTRIBUTE_CLASH; - aloc = same; - } - - for (id = 0; id < MAX_ACCESSOR_ATTRIBUTES; id++) { - if (aloc->attributes[id] == NULL) { - // attr->parent=a->parent; - aloc->attributes[id] = attr; - attr->parent_as_attribute = aloc; - if (aloc->same) - attr->same = grib_accessor_get_attribute_index(aloc->same, attr->name, &idx); - - grib_context_log(a->context, GRIB_LOG_DEBUG, "added attribute %s->%s", a->name, attr->name); - return GRIB_SUCCESS; - } - } - return GRIB_TOO_MANY_ATTRIBUTES; -} - -// int grib_accessor_replace_attribute(grib_accessor* a, grib_accessor* attr) -// { -// int id = 0; -// int idx = 0; -// if (grib_accessor_get_attribute_index(a, attr->name, &id) != NULL) { -// grib_accessor_delete(a->context, a->attributes[id]); -// a->attributes[id] = attr; -// attr->parent_as_attribute = a; -// if (a->same) -// attr->same = grib_accessor_get_attribute_index(a->same, attr->name, &idx); -// } -// else { -// grib_accessor_add_attribute(a, attr, 0); -// } -// return GRIB_SUCCESS; -// } - -// int grib_accessor_delete_attribute(grib_accessor* a, const char* name) -// { -// int id = 0; -// if (grib_accessor_get_attribute_index(a, name, &id) != NULL) { -// grib_accessor_delete(a->context, a->attributes[id]); -// a->attributes[id] = NULL; -// return GRIB_SUCCESS; -// } -// else { -// return GRIB_NOT_FOUND; -// } -// } - -// grib_accessor* grib_accessor_get_attribute_by_index(grib_accessor* a, int index) -// { -// if (index < MAX_ACCESSOR_ATTRIBUTES) -// return a->attributes[index]; -// return NULL; -// } - -// const char* grib_accessor_get_name(grib_accessor* a) -// { -// return a->name; -// } - -grib_accessor* grib_accessor_get_attribute_index(grib_accessor* a, const char* name, int* index) -{ - int i = 0; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { - if (!grib_inline_strcmp(a->attributes[i]->name, name)) { - *index = i; - return a->attributes[i]; - } - i++; - } - return NULL; -} - -int grib_accessor_has_attributes(grib_accessor* a) -{ - return a->attributes[0] ? 1 : 0; -} - -grib_accessor* grib_accessor_get_attribute(grib_accessor* a, const char* name) -{ - int index = 0; - const char* p = 0; - char* basename = NULL; - const char* attribute_name = NULL; - grib_accessor* acc = NULL; - p = name; - while (*(p + 1) != '\0' && (*p != '-' || *(p + 1) != '>')) - p++; - if (*(p + 1) == '\0') { - return grib_accessor_get_attribute_index(a, name, &index); - } - else { - size_t size = p - name; - attribute_name = p + 2; - basename = (char*)grib_context_malloc_clear(a->context, size + 1); - basename = (char*)memcpy(basename, name, size); - acc = grib_accessor_get_attribute_index(a, basename, &index); - grib_context_free(a->context, basename); - if (acc) - return grib_accessor_get_attribute(acc, attribute_name); - else - return NULL; - } -} - -grib_accessors_list* grib_accessors_list_create(grib_context* c) -{ - return (grib_accessors_list*)grib_context_malloc_clear(c, sizeof(grib_accessors_list)); -} - -void grib_accessors_list_push(grib_accessors_list* al, grib_accessor* a, int rank) -{ - grib_accessors_list* last; - const grib_context* c = a->context; - - last = grib_accessors_list_last(al); - if (last && last->accessor) { - last->next = (grib_accessors_list*)grib_context_malloc_clear(c, sizeof(grib_accessors_list)); - last->next->accessor = a; - last->next->prev = last; - last->next->rank = rank; - al->last = last->next; - } - else { - al->accessor = a; - al->rank = rank; - al->last = al; - } -} - -grib_accessors_list* grib_accessors_list_last(grib_accessors_list* al) -{ - // grib_accessors_list* last=al; - // grib_accessors_list* next=al->next; - // while(next) { - // last=next; - // next=last->next; - // } - return al->last; -} - -// grib_accessors_list* grib_accessors_list_find(grib_accessors_list* al, const grib_accessor* a) -// { -// grib_accessors_list* last = al; -// grib_accessors_list* next = al->next; -// while (next) { -// if (last->accessor == a) -// return last; -// last = next; -// next = last->next; -// } -// return NULL; -// } - -void grib_accessors_list_delete(grib_context* c, grib_accessors_list* al) -{ - grib_accessors_list* tmp; - - while (al) { - tmp = al->next; - //grib_accessor_delete(c, al->accessor); - grib_context_free(c, al); - al = tmp; - } -} diff --git a/src/grib_accessor_class.cc b/src/grib_accessor_class.cc index de7f8dc47..762489961 100644 --- a/src/grib_accessor_class.cc +++ b/src/grib_accessor_class.cc @@ -74,7 +74,7 @@ static struct table_entry table[] = { grib_section* grib_create_root_section(const grib_context* context, grib_handle* h) { - char* fpath = 0; + const char* fpath = 0; grib_section* s = (grib_section*)grib_context_malloc_clear(context, sizeof(grib_section)); GRIB_MUTEX_INIT_ONCE(&once, &init_mutex); @@ -129,38 +129,31 @@ static GRIB_INLINE grib_accessor_class* get_class(grib_context* c, char* type) grib_accessor* grib_accessor_factory(grib_section* p, grib_action* creator, const long len, grib_arguments* params) { - grib_accessor_class* c = NULL; grib_accessor* a = NULL; size_t size = 0; -#ifdef ACCESSOR_FACTORY_USE_TRIE - c = get_class(p->h->context, creator->op); -#else - /* Use the hash table built with gperf (See make_accessor_class_hash.sh) */ - c = *((grib_accessor_classes_hash(creator->op, strlen(creator->op)))->cclass); -#endif + grib_accessor* builder = *((grib_accessor_hash(creator->op, strlen(creator->op)))->cclass); + a = builder->create_empty_accessor(); - a = c->create_empty_accessor(); + a->name_ = creator->name; + a->name_space_ = creator->name_space; - a->name = creator->name; - a->name_space = creator->name_space; + a->all_names_[0] = creator->name; + a->all_name_spaces_[0] = creator->name_space; - a->all_names[0] = creator->name; - a->all_name_spaces[0] = creator->name_space; - - a->creator = creator; - a->context = p->h->context; - a->h = NULL; + a->creator_ = creator; + a->context_ = p->h->context; + a->h_ = NULL; a->next_ = NULL; a->previous_ = NULL; - a->parent = p; - a->length = 0; - a->offset = 0; - a->flags = creator->flags; - a->set = creator->set; + a->parent_ = p; + a->length_ = 0; + a->offset_ = 0; + a->flags_ = creator->flags; + a->set_ = creator->set; if (p->block->last) { - a->offset = p->block->last->get_next_position_offset(); + a->offset_ = p->block->last->get_next_position_offset(); //printf("offset: p->block->last %s %s %ld %ld\n", // p->block->last->cclass->name, @@ -169,14 +162,12 @@ grib_accessor* grib_accessor_factory(grib_section* p, grib_action* creator, } else { if (p->owner) { - a->offset = p->owner->offset; + a->offset_ = p->owner->offset_; } else - a->offset = 0; + a->offset_ = 0; } - a->cclass = c; - a->init_accessor(len, params); size = a->get_next_position_offset(); @@ -185,9 +176,9 @@ grib_accessor* grib_accessor_factory(grib_section* p, grib_action* creator, if (!p->h->partial) grib_context_log(p->h->context, GRIB_LOG_ERROR, "Creating (%s)%s of %s at offset %ld-%ld over message boundary (%lu)", - p->owner ? p->owner->name : "", a->name, - creator->op, a->offset, - a->offset + a->length, + p->owner ? p->owner->name_ : "", a->name_, + creator->op, a->offset_, + a->offset_ + a->length_, p->h->buffer->ulength); a->destroy(p->h->context); @@ -196,7 +187,7 @@ grib_accessor* grib_accessor_factory(grib_section* p, grib_action* creator, else { grib_context_log(p->h->context, GRIB_LOG_DEBUG, "CREATE: name=%s class=%s offset=%ld length=%ld action=", - a->name, a->cclass->name, a->offset, a->length); + a->name_, a->class_name_, a->offset_, a->length_); grib_grow_buffer(p->h->context, p->h->buffer, size); p->h->buffer->ulength = size; @@ -207,11 +198,11 @@ grib_accessor* grib_accessor_factory(grib_section* p, grib_action* creator, if (p->owner) grib_context_log(p->h->context, GRIB_LOG_DEBUG, "Creating (%s)%s of %s at offset %d [len=%d]", - p->owner->name, a->name, creator->op, a->offset, len, p->block); + p->owner->name_, a->name_, creator->op, a->offset_, len, p->block); else grib_context_log(p->h->context, GRIB_LOG_DEBUG, "Creating root %s of %s at offset %d [len=%d]", - a->name, creator->op, a->offset, len, p->block); + a->name_, creator->op, a->offset_, len, p->block); } return a; @@ -226,10 +217,10 @@ static void link_same_attributes(grib_accessor* a, grib_accessor* b) return; if (!b->has_attributes()) return; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { - bAttribute = b->get_attribute_index(a->attributes[i]->name, &idx); + while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes_[i]) { + bAttribute = b->get_attribute_index(a->attributes_[i]->name_, &idx); if (bAttribute) - a->attributes[i]->same = bAttribute; + a->attributes_[i]->same_ = bAttribute; i++; } } @@ -247,19 +238,20 @@ void grib_push_accessor(grib_accessor* a, grib_block_of_accessors* l) l->last = a; if (hand->use_trie) { - DEBUG_ASSERT( a->all_names[0] ); - if (*(a->all_names[0]) != '_') { - id = grib_hash_keys_get_id(a->context->keys, a->all_names[0]); + DEBUG_ASSERT( a->all_names_[0] ); + if (*(a->all_names_[0]) != '_') { + id = grib_hash_keys_get_id(a->context_->keys, a->all_names_[0]); DEBUG_ASSERT(id >= 0 && id < ACCESSORS_ARRAY_SIZE); - a->same = hand->accessors[id]; - link_same_attributes(a, a->same); + a->same_ = hand->accessors[id]; + link_same_attributes(a, a->same_); hand->accessors[id] = a; - if (a->same == a) { - fprintf(stderr, "---> %s\n", a->name); - Assert(a->same != a); + + if (a->same_ && (a->same_ == a)) { + fprintf(stderr, "---> %s\n", a->name_); + Assert(a->same_ != a); } } } @@ -270,11 +262,12 @@ void grib_section_post_init(grib_section* s) grib_accessor* a = s ? s->block->first : NULL; while (a) { - grib_accessor_class* c = a->cclass; - c->post_init(a); + //grib_accessor_class* c = a->cclass; + //c->post_init(a); + a->post_init(); - if (a->sub_section) - grib_section_post_init(a->sub_section); + if (a->sub_section_) + grib_section_post_init(a->sub_section_); a = a->next_; } } @@ -284,25 +277,25 @@ int grib_section_adjust_sizes(grib_section* s, int update, int depth) int err = 0; grib_accessor* a = s ? s->block->first : NULL; size_t length = update ? 0 : (s ? s->padding : 0); - size_t offset = (s && s->owner) ? s->owner->offset : 0; + size_t offset = (s && s->owner) ? s->owner->offset_ : 0; int force_update = update > 1; while (a) { long l; /* grib_section_adjust_sizes(grib_get_sub_section(a),update,depth+1); */ - err = grib_section_adjust_sizes(a->sub_section, update, depth + 1); + err = grib_section_adjust_sizes(a->sub_section_, update, depth + 1); if (err) return err; /*grib_context_log(a->context,GRIB_LOG_DEBUG,"grib_section_adjust_sizes: %s %ld [len=%ld] (depth=%d)",a->name,(long)a->offset,(long)a->length,depth);*/ - l = a->length; + l = a->length_; - if (offset != a->offset) { - grib_context_log(a->context, GRIB_LOG_ERROR, + if (offset != a->offset_) { + grib_context_log(a->context_, GRIB_LOG_ERROR, "Offset mismatch accessor=%s: accessor's offset=%ld, but actual offset=%ld", - a->name, (long)a->offset, (long)offset); - grib_context_log(a->context, GRIB_LOG_ERROR, "Hint: Check section lengths are in sync with their contents"); - a->offset = offset; + a->name_, (long)a->offset_, (long)offset); + grib_context_log(a->context_, GRIB_LOG_ERROR, "Hint: Check section lengths are in sync with their contents"); + a->offset_ = offset; return GRIB_DECODING_ERROR; } length += l; @@ -330,7 +323,7 @@ int grib_section_adjust_sizes(grib_section* s, int update, int depth) if (length >= plen) { if (s->owner) { grib_context_log(s->h->context, GRIB_LOG_ERROR, "Invalid size %ld found for %s, assuming %ld", - (long)plen, s->owner->name, (long)length); + (long)plen, s->owner->name_, (long)length); } plen = length; } @@ -343,7 +336,7 @@ int grib_section_adjust_sizes(grib_section* s, int update, int depth) if (s->owner) { /*grib_context_log(s->owner->context,GRIB_LOG_DEBUG,"grib_section_adjust_sizes: updating owner (%s->length old=%ld new=%ld)",s->owner->name,(long)s->owner->length,(long)length);*/ - s->owner->length = length; + s->owner->length_ = length; } s->length = length; } @@ -394,11 +387,11 @@ grib_accessor* find_paddings(grib_section* s) while (a) { /* grib_accessor* p = find_paddings(grib_get_sub_section(a)); */ - grib_accessor* p = find_paddings(a->sub_section); + grib_accessor* p = find_paddings(a->sub_section_); if (p) return p; - if (a->preferred_size(0) != a->length) + if (a->preferred_size(0) != a->length_) return a; a = a->next_; diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 46ae9fce0..aafc22d97 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -1,207 +1,207 @@ #include "grib_api_internal.h" -extern grib_accessor_class* grib_accessor_class_abstract_long_vector; -extern grib_accessor_class* grib_accessor_class_abstract_vector; -extern grib_accessor_class* grib_accessor_class_ascii; -extern grib_accessor_class* grib_accessor_class_bit; -extern grib_accessor_class* grib_accessor_class_bitmap; -extern grib_accessor_class* grib_accessor_class_bits; -extern grib_accessor_class* grib_accessor_class_bits_per_value; -extern grib_accessor_class* grib_accessor_class_blob; -extern grib_accessor_class* grib_accessor_class_budgdate; -extern grib_accessor_class* grib_accessor_class_bufr_data_array; -extern grib_accessor_class* grib_accessor_class_bufr_data_element; -extern grib_accessor_class* grib_accessor_class_bufr_elements_table; -extern grib_accessor_class* grib_accessor_class_bufr_extract_area_subsets; -extern grib_accessor_class* grib_accessor_class_bufr_extract_datetime_subsets; -extern grib_accessor_class* grib_accessor_class_bufr_extract_subsets; -extern grib_accessor_class* grib_accessor_class_bufr_group; -extern grib_accessor_class* grib_accessor_class_bufr_simple_thinning; -extern grib_accessor_class* grib_accessor_class_bufr_string_values; -extern grib_accessor_class* grib_accessor_class_bufrdc_expanded_descriptors; -extern grib_accessor_class* grib_accessor_class_bytes; -extern grib_accessor_class* grib_accessor_class_cf_var_name; -extern grib_accessor_class* grib_accessor_class_change_alternative_row_scanning; -extern grib_accessor_class* grib_accessor_class_change_scanning_direction; -extern grib_accessor_class* grib_accessor_class_check_internal_version; -extern grib_accessor_class* grib_accessor_class_closest_date; -extern grib_accessor_class* grib_accessor_class_codeflag; -extern grib_accessor_class* grib_accessor_class_codetable; -extern grib_accessor_class* grib_accessor_class_codetable_title; -extern grib_accessor_class* grib_accessor_class_codetable_units; -extern grib_accessor_class* grib_accessor_class_concept; -extern grib_accessor_class* grib_accessor_class_constant; -extern grib_accessor_class* grib_accessor_class_count_file; -extern grib_accessor_class* grib_accessor_class_count_missing; -extern grib_accessor_class* grib_accessor_class_count_total; -extern grib_accessor_class* grib_accessor_class_data_apply_bitmap; -extern grib_accessor_class* grib_accessor_class_data_apply_boustrophedonic; -extern grib_accessor_class* grib_accessor_class_data_apply_boustrophedonic_bitmap; -extern grib_accessor_class* grib_accessor_class_data_ccsds_packing; -extern grib_accessor_class* grib_accessor_class_data_complex_packing; -extern grib_accessor_class* grib_accessor_class_data_dummy_field; -extern grib_accessor_class* grib_accessor_class_data_g1complex_packing; -extern grib_accessor_class* grib_accessor_class_data_g1second_order_constant_width_packing; -extern grib_accessor_class* grib_accessor_class_data_g1second_order_general_extended_packing; -extern grib_accessor_class* grib_accessor_class_data_g1second_order_general_packing; -extern grib_accessor_class* grib_accessor_class_data_g1second_order_row_by_row_packing; -extern grib_accessor_class* grib_accessor_class_data_g1secondary_bitmap; -extern grib_accessor_class* grib_accessor_class_data_g1shsimple_packing; -extern grib_accessor_class* grib_accessor_class_data_g1simple_packing; -extern grib_accessor_class* grib_accessor_class_data_g22order_packing; -extern grib_accessor_class* grib_accessor_class_data_g2bifourier_packing; -extern grib_accessor_class* grib_accessor_class_data_g2complex_packing; -extern grib_accessor_class* grib_accessor_class_data_g2secondary_bitmap; -extern grib_accessor_class* grib_accessor_class_data_g2shsimple_packing; -extern grib_accessor_class* grib_accessor_class_data_g2simple_packing; -extern grib_accessor_class* grib_accessor_class_data_g2simple_packing_with_preprocessing; -extern grib_accessor_class* grib_accessor_class_data_jpeg2000_packing; -extern grib_accessor_class* grib_accessor_class_data_png_packing; -extern grib_accessor_class* grib_accessor_class_data_raw_packing; -extern grib_accessor_class* grib_accessor_class_data_run_length_packing; -extern grib_accessor_class* grib_accessor_class_data_secondary_bitmap; -extern grib_accessor_class* grib_accessor_class_data_sh_packed; -extern grib_accessor_class* grib_accessor_class_data_sh_unpacked; -extern grib_accessor_class* grib_accessor_class_data_shsimple_packing; -extern grib_accessor_class* grib_accessor_class_data_simple_packing; -extern grib_accessor_class* grib_accessor_class_decimal_precision; -extern grib_accessor_class* grib_accessor_class_dictionary; -extern grib_accessor_class* grib_accessor_class_dirty; -extern grib_accessor_class* grib_accessor_class_divdouble; -extern grib_accessor_class* grib_accessor_class_double; -extern grib_accessor_class* grib_accessor_class_element; -extern grib_accessor_class* grib_accessor_class_evaluate; -extern grib_accessor_class* grib_accessor_class_expanded_descriptors; -extern grib_accessor_class* grib_accessor_class_from_scale_factor_scaled_value; -extern grib_accessor_class* grib_accessor_class_g1_half_byte_codeflag; -extern grib_accessor_class* grib_accessor_class_g1_message_length; -extern grib_accessor_class* grib_accessor_class_g1_section4_length; -extern grib_accessor_class* grib_accessor_class_g1bitmap; -extern grib_accessor_class* grib_accessor_class_g1date; -extern grib_accessor_class* grib_accessor_class_g1day_of_the_year_date; -extern grib_accessor_class* grib_accessor_class_g1end_of_interval_monthly; -extern grib_accessor_class* grib_accessor_class_g1fcperiod; -extern grib_accessor_class* grib_accessor_class_g1forecastmonth; -extern grib_accessor_class* grib_accessor_class_g1monthlydate; -extern grib_accessor_class* grib_accessor_class_g1number_of_coded_values_sh_complex; -extern grib_accessor_class* grib_accessor_class_g1number_of_coded_values_sh_simple; -extern grib_accessor_class* grib_accessor_class_g1step_range; -extern grib_accessor_class* grib_accessor_class_g1verificationdate; -extern grib_accessor_class* grib_accessor_class_g2_aerosol; -extern grib_accessor_class* grib_accessor_class_g2_chemical; -extern grib_accessor_class* grib_accessor_class_g2_eps; -extern grib_accessor_class* grib_accessor_class_g2_mars_labeling; -extern grib_accessor_class* grib_accessor_class_g2bitmap; -extern grib_accessor_class* grib_accessor_class_g2bitmap_present; -extern grib_accessor_class* grib_accessor_class_g2date; -extern grib_accessor_class* grib_accessor_class_g2end_step; -extern grib_accessor_class* grib_accessor_class_g2grid; -extern grib_accessor_class* grib_accessor_class_g2latlon; -extern grib_accessor_class* grib_accessor_class_g2level; -extern grib_accessor_class* grib_accessor_class_g2lon; -extern grib_accessor_class* grib_accessor_class_g2step_range; -extern grib_accessor_class* grib_accessor_class_gaussian_grid_name; -extern grib_accessor_class* grib_accessor_class_gds_is_present; -extern grib_accessor_class* grib_accessor_class_gen; -extern grib_accessor_class* grib_accessor_class_getenv; -extern grib_accessor_class* grib_accessor_class_global_gaussian; -extern grib_accessor_class* grib_accessor_class_group; -extern grib_accessor_class* grib_accessor_class_group_copy; -extern grib_accessor_class* grib_accessor_class_gts_header; -extern grib_accessor_class* grib_accessor_class_hash_array; -extern grib_accessor_class* grib_accessor_class_headers_only; -extern grib_accessor_class* grib_accessor_class_ibmfloat; -extern grib_accessor_class* grib_accessor_class_ieeefloat; -extern grib_accessor_class* grib_accessor_class_ifs_param; -extern grib_accessor_class* grib_accessor_class_iterator; -extern grib_accessor_class* grib_accessor_class_julian_date; -extern grib_accessor_class* grib_accessor_class_julian_day; -extern grib_accessor_class* grib_accessor_class_ksec1expver; -extern grib_accessor_class* grib_accessor_class_label; -extern grib_accessor_class* grib_accessor_class_latitudes; -extern grib_accessor_class* grib_accessor_class_latlon_increment; -extern grib_accessor_class* grib_accessor_class_latlonvalues; -extern grib_accessor_class* grib_accessor_class_library_version; -extern grib_accessor_class* grib_accessor_class_local_definition; -extern grib_accessor_class* grib_accessor_class_long; -extern grib_accessor_class* grib_accessor_class_long_vector; -extern grib_accessor_class* grib_accessor_class_longitudes; -extern grib_accessor_class* grib_accessor_class_lookup; -extern grib_accessor_class* grib_accessor_class_mars_param; -extern grib_accessor_class* grib_accessor_class_mars_step; -extern grib_accessor_class* grib_accessor_class_md5; -extern grib_accessor_class* grib_accessor_class_message; -extern grib_accessor_class* grib_accessor_class_message_copy; -extern grib_accessor_class* grib_accessor_class_multdouble; -extern grib_accessor_class* grib_accessor_class_nearest; -extern grib_accessor_class* grib_accessor_class_non_alpha; -extern grib_accessor_class* grib_accessor_class_number_of_coded_values; -extern grib_accessor_class* grib_accessor_class_number_of_points; -extern grib_accessor_class* grib_accessor_class_number_of_points_gaussian; -extern grib_accessor_class* grib_accessor_class_number_of_values; -extern grib_accessor_class* grib_accessor_class_number_of_values_data_raw_packing; -extern grib_accessor_class* grib_accessor_class_octahedral_gaussian; -extern grib_accessor_class* grib_accessor_class_octet_number; -extern grib_accessor_class* grib_accessor_class_offset_file; -extern grib_accessor_class* grib_accessor_class_offset_values; -extern grib_accessor_class* grib_accessor_class_optimal_step_units; -extern grib_accessor_class* grib_accessor_class_pack_bufr_values; -extern grib_accessor_class* grib_accessor_class_packing_type; -extern grib_accessor_class* grib_accessor_class_pad; -extern grib_accessor_class* grib_accessor_class_padding; -extern grib_accessor_class* grib_accessor_class_padto; -extern grib_accessor_class* grib_accessor_class_padtoeven; -extern grib_accessor_class* grib_accessor_class_padtomultiple; -extern grib_accessor_class* grib_accessor_class_position; -extern grib_accessor_class* grib_accessor_class_proj_string; -extern grib_accessor_class* grib_accessor_class_raw; -extern grib_accessor_class* grib_accessor_class_rdbtime_guess_date; -extern grib_accessor_class* grib_accessor_class_reference_value_error; -extern grib_accessor_class* grib_accessor_class_round; -extern grib_accessor_class* grib_accessor_class_scale; -extern grib_accessor_class* grib_accessor_class_scale_values; -extern grib_accessor_class* grib_accessor_class_second_order_bits_per_value; -extern grib_accessor_class* grib_accessor_class_section; -extern grib_accessor_class* grib_accessor_class_section_length; -extern grib_accessor_class* grib_accessor_class_section_padding; -extern grib_accessor_class* grib_accessor_class_section_pointer; -extern grib_accessor_class* grib_accessor_class_select_step_template; -extern grib_accessor_class* grib_accessor_class_sexagesimal2decimal; -extern grib_accessor_class* grib_accessor_class_signed; -extern grib_accessor_class* grib_accessor_class_signed_bits; -extern grib_accessor_class* grib_accessor_class_simple_packing_error; -extern grib_accessor_class* grib_accessor_class_size; -extern grib_accessor_class* grib_accessor_class_smart_table; -extern grib_accessor_class* grib_accessor_class_smart_table_column; -extern grib_accessor_class* grib_accessor_class_spd; -extern grib_accessor_class* grib_accessor_class_spectral_truncation; -extern grib_accessor_class* grib_accessor_class_sprintf; -extern grib_accessor_class* grib_accessor_class_statistics; -extern grib_accessor_class* grib_accessor_class_statistics_spectral; -extern grib_accessor_class* grib_accessor_class_step_human_readable; -extern grib_accessor_class* grib_accessor_class_step_in_units; -extern grib_accessor_class* grib_accessor_class_sum; -extern grib_accessor_class* grib_accessor_class_suppressed; -extern grib_accessor_class* grib_accessor_class_time; -extern grib_accessor_class* grib_accessor_class_to_double; -extern grib_accessor_class* grib_accessor_class_to_integer; -extern grib_accessor_class* grib_accessor_class_to_string; -extern grib_accessor_class* grib_accessor_class_transient; -extern grib_accessor_class* grib_accessor_class_transient_darray; -extern grib_accessor_class* grib_accessor_class_trim; -extern grib_accessor_class* grib_accessor_class_uint16; -extern grib_accessor_class* grib_accessor_class_uint32; -extern grib_accessor_class* grib_accessor_class_uint32_little_endian; -extern grib_accessor_class* grib_accessor_class_uint64; -extern grib_accessor_class* grib_accessor_class_uint64_little_endian; -extern grib_accessor_class* grib_accessor_class_uint8; -extern grib_accessor_class* grib_accessor_class_unexpanded_descriptors; -extern grib_accessor_class* grib_accessor_class_unpack_bufr_values; -extern grib_accessor_class* grib_accessor_class_unsigned; -extern grib_accessor_class* grib_accessor_class_unsigned_bits; -extern grib_accessor_class* grib_accessor_class_validity_date; -extern grib_accessor_class* grib_accessor_class_validity_time; -extern grib_accessor_class* grib_accessor_class_values; -extern grib_accessor_class* grib_accessor_class_variable; -extern grib_accessor_class* grib_accessor_class_vector; -extern grib_accessor_class* grib_accessor_class_when; +extern grib_accessor* grib_accessor_abstract_long_vector; +extern grib_accessor* grib_accessor_abstract_vector; +extern grib_accessor* grib_accessor_ascii; +extern grib_accessor* grib_accessor_bit; +extern grib_accessor* grib_accessor_bitmap; +extern grib_accessor* grib_accessor_bits; +extern grib_accessor* grib_accessor_bits_per_value; +extern grib_accessor* grib_accessor_blob; +extern grib_accessor* grib_accessor_budgdate; +extern grib_accessor* grib_accessor_bufr_data_array; +extern grib_accessor* grib_accessor_bufr_data_element; +extern grib_accessor* grib_accessor_bufr_elements_table; +extern grib_accessor* grib_accessor_bufr_extract_area_subsets; +extern grib_accessor* grib_accessor_bufr_extract_datetime_subsets; +extern grib_accessor* grib_accessor_bufr_extract_subsets; +extern grib_accessor* grib_accessor_bufr_group; +extern grib_accessor* grib_accessor_bufr_simple_thinning; +extern grib_accessor* grib_accessor_bufr_string_values; +extern grib_accessor* grib_accessor_bufrdc_expanded_descriptors; +extern grib_accessor* grib_accessor_bytes; +extern grib_accessor* grib_accessor_change_alternative_row_scanning; +extern grib_accessor* grib_accessor_change_scanning_direction; +extern grib_accessor* grib_accessor_check_internal_version; +extern grib_accessor* grib_accessor_closest_date; +extern grib_accessor* grib_accessor_codeflag; +extern grib_accessor* grib_accessor_codetable; +extern grib_accessor* grib_accessor_codetable_title; +extern grib_accessor* grib_accessor_codetable_units; +extern grib_accessor* grib_accessor_concept; +extern grib_accessor* grib_accessor_constant; +extern grib_accessor* grib_accessor_count_file; +extern grib_accessor* grib_accessor_count_missing; +extern grib_accessor* grib_accessor_count_total; +extern grib_accessor* grib_accessor_data_apply_bitmap; +extern grib_accessor* grib_accessor_data_apply_boustrophedonic; +extern grib_accessor* grib_accessor_data_apply_boustrophedonic_bitmap; +extern grib_accessor* grib_accessor_data_ccsds_packing; +extern grib_accessor* grib_accessor_data_complex_packing; +extern grib_accessor* grib_accessor_data_dummy_field; +extern grib_accessor* grib_accessor_data_g1complex_packing; +extern grib_accessor* grib_accessor_data_g1second_order_constant_width_packing; +extern grib_accessor* grib_accessor_data_g1second_order_general_extended_packing; +extern grib_accessor* grib_accessor_data_g1second_order_general_packing; +extern grib_accessor* grib_accessor_data_g1second_order_row_by_row_packing; +extern grib_accessor* grib_accessor_data_g1secondary_bitmap; +extern grib_accessor* grib_accessor_data_g1shsimple_packing; +extern grib_accessor* grib_accessor_data_g1simple_packing; +extern grib_accessor* grib_accessor_data_g22order_packing; +extern grib_accessor* grib_accessor_data_g2bifourier_packing; +extern grib_accessor* grib_accessor_data_g2complex_packing; +extern grib_accessor* grib_accessor_data_g2secondary_bitmap; +extern grib_accessor* grib_accessor_data_g2shsimple_packing; +extern grib_accessor* grib_accessor_data_g2simple_packing; +extern grib_accessor* grib_accessor_data_g2simple_packing_with_preprocessing; +extern grib_accessor* grib_accessor_data_jpeg2000_packing; +extern grib_accessor* grib_accessor_data_png_packing; +extern grib_accessor* grib_accessor_data_raw_packing; +extern grib_accessor* grib_accessor_data_run_length_packing; +extern grib_accessor* grib_accessor_data_secondary_bitmap; +extern grib_accessor* grib_accessor_data_sh_packed; +extern grib_accessor* grib_accessor_data_sh_unpacked; +extern grib_accessor* grib_accessor_data_shsimple_packing; +extern grib_accessor* grib_accessor_data_simple_packing; +extern grib_accessor* grib_accessor_decimal_precision; +extern grib_accessor* grib_accessor_dictionary; +extern grib_accessor* grib_accessor_dirty; +extern grib_accessor* grib_accessor_divdouble; +extern grib_accessor* grib_accessor_double; +extern grib_accessor* grib_accessor_element; +extern grib_accessor* grib_accessor_evaluate; +extern grib_accessor* grib_accessor_expanded_descriptors; +extern grib_accessor* grib_accessor_from_scale_factor_scaled_value; +extern grib_accessor* grib_accessor_g1_half_byte_codeflag; +extern grib_accessor* grib_accessor_g1_message_length; +extern grib_accessor* grib_accessor_g1_section4_length; +extern grib_accessor* grib_accessor_g1bitmap; +extern grib_accessor* grib_accessor_g1date; +extern grib_accessor* grib_accessor_g1day_of_the_year_date; +extern grib_accessor* grib_accessor_g1end_of_interval_monthly; +extern grib_accessor* grib_accessor_g1fcperiod; +extern grib_accessor* grib_accessor_g1forecastmonth; +extern grib_accessor* grib_accessor_g1monthlydate; +extern grib_accessor* grib_accessor_g1number_of_coded_values_sh_complex; +extern grib_accessor* grib_accessor_g1number_of_coded_values_sh_simple; +extern grib_accessor* grib_accessor_g1step_range; +extern grib_accessor* grib_accessor_g1verificationdate; +extern grib_accessor* grib_accessor_g2_aerosol; +extern grib_accessor* grib_accessor_g2_chemical; +extern grib_accessor* grib_accessor_g2_eps; +extern grib_accessor* grib_accessor_g2_mars_labeling; +extern grib_accessor* grib_accessor_g2bitmap; +extern grib_accessor* grib_accessor_g2bitmap_present; +extern grib_accessor* grib_accessor_g2date; +extern grib_accessor* grib_accessor_g2end_step; +extern grib_accessor* grib_accessor_g2grid; +extern grib_accessor* grib_accessor_g2latlon; +extern grib_accessor* grib_accessor_g2level; +extern grib_accessor* grib_accessor_g2lon; +extern grib_accessor* grib_accessor_g2step_range; +extern grib_accessor* grib_accessor_gaussian_grid_name; +extern grib_accessor* grib_accessor_gds_is_present; +extern grib_accessor* grib_accessor_gen; +extern grib_accessor* grib_accessor_getenv; +extern grib_accessor* grib_accessor_global_gaussian; +extern grib_accessor* grib_accessor_group; +extern grib_accessor* grib_accessor_group_copy; +extern grib_accessor* grib_accessor_gts_header; +extern grib_accessor* grib_accessor_hash_array; +extern grib_accessor* grib_accessor_headers_only; +extern grib_accessor* grib_accessor_ibmfloat; +extern grib_accessor* grib_accessor_ieeefloat; +extern grib_accessor* grib_accessor_ifs_param; +extern grib_accessor* grib_accessor_iterator; +extern grib_accessor* grib_accessor_julian_date; +extern grib_accessor* grib_accessor_julian_day; +extern grib_accessor* grib_accessor_ksec1expver; +extern grib_accessor* grib_accessor_label; +extern grib_accessor* grib_accessor_latitudes; +extern grib_accessor* grib_accessor_latlon_increment; +extern grib_accessor* grib_accessor_latlonvalues; +extern grib_accessor* grib_accessor_library_version; +extern grib_accessor* grib_accessor_local_definition; +extern grib_accessor* grib_accessor_long; +extern grib_accessor* grib_accessor_long_vector; +extern grib_accessor* grib_accessor_longitudes; +extern grib_accessor* grib_accessor_lookup; +extern grib_accessor* grib_accessor_mars_param; +extern grib_accessor* grib_accessor_mars_step; +extern grib_accessor* grib_accessor_md5; +extern grib_accessor* grib_accessor_message; +extern grib_accessor* grib_accessor_message_copy; +extern grib_accessor* grib_accessor_multdouble; +extern grib_accessor* grib_accessor_nearest; +extern grib_accessor* grib_accessor_non_alpha; +extern grib_accessor* grib_accessor_number_of_coded_values; +extern grib_accessor* grib_accessor_number_of_points; +extern grib_accessor* grib_accessor_number_of_points_gaussian; +extern grib_accessor* grib_accessor_number_of_values; +extern grib_accessor* grib_accessor_number_of_values_data_raw_packing; +extern grib_accessor* grib_accessor_octahedral_gaussian; +extern grib_accessor* grib_accessor_octet_number; +extern grib_accessor* grib_accessor_offset_file; +extern grib_accessor* grib_accessor_offset_values; +extern grib_accessor* grib_accessor_optimal_step_units; +extern grib_accessor* grib_accessor_pack_bufr_values; +extern grib_accessor* grib_accessor_packing_type; +extern grib_accessor* grib_accessor_pad; +extern grib_accessor* grib_accessor_padding; +extern grib_accessor* grib_accessor_padto; +extern grib_accessor* grib_accessor_padtoeven; +extern grib_accessor* grib_accessor_padtomultiple; +extern grib_accessor* grib_accessor_position; +extern grib_accessor* grib_accessor_proj_string; +extern grib_accessor* grib_accessor_raw; +extern grib_accessor* grib_accessor_rdbtime_guess_date; +extern grib_accessor* grib_accessor_reference_value_error; +extern grib_accessor* grib_accessor_round; +extern grib_accessor* grib_accessor_scale; +extern grib_accessor* grib_accessor_scale_values; +extern grib_accessor* grib_accessor_second_order_bits_per_value; +extern grib_accessor* grib_accessor_section; +extern grib_accessor* grib_accessor_section_length; +extern grib_accessor* grib_accessor_section_padding; +extern grib_accessor* grib_accessor_section_pointer; +extern grib_accessor* grib_accessor_select_step_template; +extern grib_accessor* grib_accessor_sexagesimal2decimal; +extern grib_accessor* grib_accessor_signed; +extern grib_accessor* grib_accessor_signed_bits; +extern grib_accessor* grib_accessor_simple_packing_error; +extern grib_accessor* grib_accessor_size; +extern grib_accessor* grib_accessor_smart_table; +extern grib_accessor* grib_accessor_smart_table_column; +extern grib_accessor* grib_accessor_spd; +extern grib_accessor* grib_accessor_spectral_truncation; +extern grib_accessor* grib_accessor_sprintf; +extern grib_accessor* grib_accessor_statistics; +extern grib_accessor* grib_accessor_statistics_spectral; +extern grib_accessor* grib_accessor_step_human_readable; +extern grib_accessor* grib_accessor_step_in_units; +extern grib_accessor* grib_accessor_sum; +extern grib_accessor* grib_accessor_suppressed; +extern grib_accessor* grib_accessor_time; +extern grib_accessor* grib_accessor_to_double; +extern grib_accessor* grib_accessor_to_integer; +extern grib_accessor* grib_accessor_to_string; +extern grib_accessor* grib_accessor_transient; +extern grib_accessor* grib_accessor_transient_darray; +extern grib_accessor* grib_accessor_trim; +extern grib_accessor* grib_accessor_uint16; +extern grib_accessor* grib_accessor_uint32; +extern grib_accessor* grib_accessor_uint32_little_endian; +extern grib_accessor* grib_accessor_uint64; +extern grib_accessor* grib_accessor_uint64_little_endian; +extern grib_accessor* grib_accessor_uint8; +extern grib_accessor* grib_accessor_unexpanded_descriptors; +extern grib_accessor* grib_accessor_unpack_bufr_values; +extern grib_accessor* grib_accessor_unsigned; +extern grib_accessor* grib_accessor_unsigned_bits; +extern grib_accessor* grib_accessor_validity_date; +extern grib_accessor* grib_accessor_validity_time; +extern grib_accessor* grib_accessor_values; +extern grib_accessor* grib_accessor_variable; +extern grib_accessor* grib_accessor_vector; +extern grib_accessor* grib_accessor_when; +extern grib_accessor* grib_accessor_cf_var_name; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index 247b091b9..a97859d89 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -1,5 +1,5 @@ /* ANSI-C code produced by gperf version 3.1 */ -/* Command-line: gperf -C -W classes -t -G -H grib_accessor_classes_get_id -N grib_accessor_classes_hash -m 1 -j 1 accessor_class_list.gperf */ +/* Command-line: gperf -C -W classes -t -G -H grib_accessor_classes_get_id -N grib_accessor_hash -m 1 -j 1 accessor_class_list.gperf */ /* Computed positions: -k'1-2,5,7,11' */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ @@ -35,7 +35,7 @@ #include "grib_accessor_class.h" #line 6 "accessor_class_list.gperf" -struct accessor_class_hash { const char *name; grib_accessor_class **cclass;}; +struct accessor_class_hash { const char *name; grib_accessor **cclass;}; #define TOTAL_KEYWORDS 205 #define MIN_WORD_LENGTH 1 @@ -51,7 +51,8 @@ struct accessor_class_hash { const char *name; grib_accessor_class **cclass;}; #endif #endif -static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) +static unsigned int +grib_accessor_classes_get_id (const char *str, size_t len) { static const unsigned short asso_values[] = { @@ -117,517 +118,517 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, -#line 179 "accessor_class_list.gperf" - {"size", &grib_accessor_class_size}, +#line 178 "accessor_class_list.gperf" + {"size", &grib_accessor_size}, #line 12 "accessor_class_list.gperf" - {"ascii", &grib_accessor_class_ascii}, -#line 176 "accessor_class_list.gperf" - {"signed", &grib_accessor_class_signed}, -#line 156 "accessor_class_list.gperf" - {"pad", &grib_accessor_class_pad}, -#line 182 "accessor_class_list.gperf" - {"spd", &grib_accessor_class_spd}, -#line 76 "accessor_class_list.gperf" - {"dirty", &grib_accessor_class_dirty}, - {""}, {""}, -#line 177 "accessor_class_list.gperf" - {"signed_bits", &grib_accessor_class_signed_bits}, - {""}, -#line 67 "accessor_class_list.gperf" - {"data_raw_packing", &grib_accessor_class_data_raw_packing}, - {""}, {""}, {""}, -#line 73 "accessor_class_list.gperf" - {"data_simple_packing", &grib_accessor_class_data_simple_packing}, -#line 69 "accessor_class_list.gperf" - {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 170 "accessor_class_list.gperf" - {"section", &grib_accessor_class_section}, -#line 44 "accessor_class_list.gperf" - {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, - {""}, -#line 75 "accessor_class_list.gperf" - {"dictionary", &grib_accessor_class_dictionary}, - {""}, -#line 112 "accessor_class_list.gperf" - {"gen", &grib_accessor_class_gen}, -#line 65 "accessor_class_list.gperf" - {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, -#line 66 "accessor_class_list.gperf" - {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 172 "accessor_class_list.gperf" - {"section_padding", &grib_accessor_class_section_padding}, -#line 173 "accessor_class_list.gperf" - {"section_pointer", &grib_accessor_class_section_pointer}, -#line 45 "accessor_class_list.gperf" - {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, - {""}, {""}, {""}, {""}, {""}, -#line 157 "accessor_class_list.gperf" - {"padding", &grib_accessor_class_padding}, -#line 46 "accessor_class_list.gperf" - {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, -#line 111 "accessor_class_list.gperf" - {"gds_is_present", &grib_accessor_class_gds_is_present}, -#line 169 "accessor_class_list.gperf" - {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 171 "accessor_class_list.gperf" - {"section_length", &grib_accessor_class_section_length}, -#line 113 "accessor_class_list.gperf" - {"getenv", &grib_accessor_class_getenv}, -#line 58 "accessor_class_list.gperf" - {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, -#line 191 "accessor_class_list.gperf" - {"time", &grib_accessor_class_time}, - {""}, -#line 62 "accessor_class_list.gperf" - {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, - {""}, + {"ascii", &grib_accessor_ascii}, +#line 175 "accessor_class_list.gperf" + {"signed", &grib_accessor_signed}, #line 155 "accessor_class_list.gperf" - {"packing_type", &grib_accessor_class_packing_type}, -#line 63 "accessor_class_list.gperf" - {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, -#line 60 "accessor_class_list.gperf" - {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, + {"pad", &grib_accessor_pad}, +#line 181 "accessor_class_list.gperf" + {"spd", &grib_accessor_spd}, +#line 75 "accessor_class_list.gperf" + {"dirty", &grib_accessor_dirty}, {""}, {""}, -#line 105 "accessor_class_list.gperf" - {"g2grid", &grib_accessor_class_g2grid}, +#line 176 "accessor_class_list.gperf" + {"signed_bits", &grib_accessor_signed_bits}, + {""}, +#line 66 "accessor_class_list.gperf" + {"data_raw_packing", &grib_accessor_data_raw_packing}, {""}, {""}, {""}, -#line 104 "accessor_class_list.gperf" - {"g2end_step", &grib_accessor_class_g2end_step}, -#line 99 "accessor_class_list.gperf" - {"g2_eps", &grib_accessor_class_g2_eps}, -#line 142 "accessor_class_list.gperf" - {"nearest", &grib_accessor_class_nearest}, -#line 158 "accessor_class_list.gperf" - {"padto", &grib_accessor_class_padto}, - {""}, {""}, {""}, -#line 108 "accessor_class_list.gperf" - {"g2lon", &grib_accessor_class_g2lon}, - {""}, {""}, -#line 188 "accessor_class_list.gperf" - {"step_in_units", &grib_accessor_class_step_in_units}, +#line 72 "accessor_class_list.gperf" + {"data_simple_packing", &grib_accessor_data_simple_packing}, +#line 68 "accessor_class_list.gperf" + {"data_secondary_bitmap", &grib_accessor_data_secondary_bitmap}, +#line 169 "accessor_class_list.gperf" + {"section", &grib_accessor_section}, +#line 43 "accessor_class_list.gperf" + {"data_apply_bitmap", &grib_accessor_data_apply_bitmap}, + {""}, +#line 74 "accessor_class_list.gperf" + {"dictionary", &grib_accessor_dictionary}, + {""}, +#line 111 "accessor_class_list.gperf" + {"gen", &grib_accessor_gen}, #line 64 "accessor_class_list.gperf" - {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, -#line 48 "accessor_class_list.gperf" - {"data_complex_packing", &grib_accessor_class_data_complex_packing}, + {"data_jpeg2000_packing", &grib_accessor_data_jpeg2000_packing}, +#line 65 "accessor_class_list.gperf" + {"data_png_packing", &grib_accessor_data_png_packing}, +#line 171 "accessor_class_list.gperf" + {"section_padding", &grib_accessor_section_padding}, +#line 172 "accessor_class_list.gperf" + {"section_pointer", &grib_accessor_section_pointer}, +#line 44 "accessor_class_list.gperf" + {"data_apply_boustrophedonic", &grib_accessor_data_apply_boustrophedonic}, + {""}, {""}, {""}, {""}, {""}, +#line 156 "accessor_class_list.gperf" + {"padding", &grib_accessor_padding}, +#line 45 "accessor_class_list.gperf" + {"data_apply_boustrophedonic_bitmap", &grib_accessor_data_apply_boustrophedonic_bitmap}, +#line 110 "accessor_class_list.gperf" + {"gds_is_present", &grib_accessor_gds_is_present}, +#line 168 "accessor_class_list.gperf" + {"second_order_bits_per_value", &grib_accessor_second_order_bits_per_value}, +#line 170 "accessor_class_list.gperf" + {"section_length", &grib_accessor_section_length}, +#line 112 "accessor_class_list.gperf" + {"getenv", &grib_accessor_getenv}, +#line 57 "accessor_class_list.gperf" + {"data_g22order_packing", &grib_accessor_data_g22order_packing}, +#line 190 "accessor_class_list.gperf" + {"time", &grib_accessor_time}, + {""}, +#line 61 "accessor_class_list.gperf" + {"data_g2shsimple_packing", &grib_accessor_data_g2shsimple_packing}, + {""}, +#line 154 "accessor_class_list.gperf" + {"packing_type", &grib_accessor_packing_type}, +#line 62 "accessor_class_list.gperf" + {"data_g2simple_packing", &grib_accessor_data_g2simple_packing}, +#line 59 "accessor_class_list.gperf" + {"data_g2complex_packing", &grib_accessor_data_g2complex_packing}, + {""}, {""}, +#line 104 "accessor_class_list.gperf" + {"g2grid", &grib_accessor_g2grid}, + {""}, {""}, {""}, +#line 103 "accessor_class_list.gperf" + {"g2end_step", &grib_accessor_g2end_step}, +#line 98 "accessor_class_list.gperf" + {"g2_eps", &grib_accessor_g2_eps}, +#line 141 "accessor_class_list.gperf" + {"nearest", &grib_accessor_nearest}, +#line 157 "accessor_class_list.gperf" + {"padto", &grib_accessor_padto}, + {""}, {""}, {""}, +#line 107 "accessor_class_list.gperf" + {"g2lon", &grib_accessor_g2lon}, + {""}, {""}, +#line 187 "accessor_class_list.gperf" + {"step_in_units", &grib_accessor_step_in_units}, +#line 63 "accessor_class_list.gperf" + {"data_g2simple_packing_with_preprocessing", &grib_accessor_data_g2simple_packing_with_preprocessing}, +#line 47 "accessor_class_list.gperf" + {"data_complex_packing", &grib_accessor_data_complex_packing}, {""}, {""}, #line 13 "accessor_class_list.gperf" - {"bit", &grib_accessor_class_bit}, + {"bit", &grib_accessor_bit}, #line 15 "accessor_class_list.gperf" - {"bits", &grib_accessor_class_bits}, -#line 189 "accessor_class_list.gperf" - {"sum", &grib_accessor_class_sum}, + {"bits", &grib_accessor_bits}, +#line 188 "accessor_class_list.gperf" + {"sum", &grib_accessor_sum}, #line 14 "accessor_class_list.gperf" - {"bitmap", &grib_accessor_class_bitmap}, -#line 203 "accessor_class_list.gperf" - {"uint8", &grib_accessor_class_uint8}, -#line 143 "accessor_class_list.gperf" - {"non_alpha", &grib_accessor_class_non_alpha}, + {"bitmap", &grib_accessor_bitmap}, +#line 202 "accessor_class_list.gperf" + {"uint8", &grib_accessor_uint8}, +#line 142 "accessor_class_list.gperf" + {"non_alpha", &grib_accessor_non_alpha}, {""}, #line 29 "accessor_class_list.gperf" - {"bytes", &grib_accessor_class_bytes}, -#line 124 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, + {"bytes", &grib_accessor_bytes}, #line 123 "accessor_class_list.gperf" - {"julian_date", &grib_accessor_class_julian_date}, -#line 109 "accessor_class_list.gperf" - {"g2step_range", &grib_accessor_class_g2step_range}, -#line 16 "accessor_class_list.gperf" - {"bits_per_value", &grib_accessor_class_bits_per_value}, -#line 81 "accessor_class_list.gperf" - {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, - {""}, -#line 49 "accessor_class_list.gperf" - {"data_dummy_field", &grib_accessor_class_data_dummy_field}, -#line 201 "accessor_class_list.gperf" - {"uint64", &grib_accessor_class_uint64}, -#line 199 "accessor_class_list.gperf" - {"uint32", &grib_accessor_class_uint32}, - {""}, -#line 167 "accessor_class_list.gperf" - {"scale", &grib_accessor_class_scale}, -#line 185 "accessor_class_list.gperf" - {"statistics", &grib_accessor_class_statistics}, -#line 103 "accessor_class_list.gperf" - {"g2date", &grib_accessor_class_g2date}, -#line 68 "accessor_class_list.gperf" - {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, -#line 101 "accessor_class_list.gperf" - {"g2bitmap", &grib_accessor_class_g2bitmap}, -#line 61 "accessor_class_list.gperf" - {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, -#line 59 "accessor_class_list.gperf" - {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, - {""}, + {"julian_day", &grib_accessor_julian_day}, #line 122 "accessor_class_list.gperf" - {"iterator", &grib_accessor_class_iterator}, -#line 178 "accessor_class_list.gperf" - {"simple_packing_error", &grib_accessor_class_simple_packing_error}, -#line 186 "accessor_class_list.gperf" - {"statistics_spectral", &grib_accessor_class_statistics_spectral}, + {"julian_date", &grib_accessor_julian_date}, +#line 108 "accessor_class_list.gperf" + {"g2step_range", &grib_accessor_g2step_range}, +#line 16 "accessor_class_list.gperf" + {"bits_per_value", &grib_accessor_bits_per_value}, +#line 80 "accessor_class_list.gperf" + {"expanded_descriptors", &grib_accessor_expanded_descriptors}, {""}, -#line 47 "accessor_class_list.gperf" - {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, - {""}, {""}, -#line 145 "accessor_class_list.gperf" - {"number_of_points", &grib_accessor_class_number_of_points}, -#line 97 "accessor_class_list.gperf" - {"g2_aerosol", &grib_accessor_class_g2_aerosol}, - {""}, {""}, {""}, {""}, -#line 174 "accessor_class_list.gperf" - {"select_step_template", &grib_accessor_class_select_step_template}, -#line 193 "accessor_class_list.gperf" - {"to_integer", &grib_accessor_class_to_integer}, -#line 114 "accessor_class_list.gperf" - {"global_gaussian", &grib_accessor_class_global_gaussian}, -#line 146 "accessor_class_list.gperf" - {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, -#line 206 "accessor_class_list.gperf" - {"unsigned", &grib_accessor_class_unsigned}, - {""}, {""}, -#line 175 "accessor_class_list.gperf" - {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, - {""}, -#line 79 "accessor_class_list.gperf" - {"element", &grib_accessor_class_element}, -#line 207 "accessor_class_list.gperf" - {"unsigned_bits", &grib_accessor_class_unsigned_bits}, -#line 127 "accessor_class_list.gperf" - {"latitudes", &grib_accessor_class_latitudes}, - {""}, -#line 204 "accessor_class_list.gperf" - {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, - {""}, {""}, -#line 132 "accessor_class_list.gperf" - {"long", &grib_accessor_class_long}, -#line 77 "accessor_class_list.gperf" - {"divdouble", &grib_accessor_class_divdouble}, -#line 78 "accessor_class_list.gperf" - {"double", &grib_accessor_class_double}, -#line 187 "accessor_class_list.gperf" - {"step_human_readable", &grib_accessor_class_step_human_readable}, -#line 163 "accessor_class_list.gperf" - {"raw", &grib_accessor_class_raw}, -#line 100 "accessor_class_list.gperf" - {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 194 "accessor_class_list.gperf" - {"to_string", &grib_accessor_class_to_string}, - {""}, -#line 202 "accessor_class_list.gperf" - {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, +#line 48 "accessor_class_list.gperf" + {"data_dummy_field", &grib_accessor_data_dummy_field}, #line 200 "accessor_class_list.gperf" - {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, - {""}, -#line 106 "accessor_class_list.gperf" - {"g2latlon", &grib_accessor_class_g2latlon}, -#line 160 "accessor_class_list.gperf" - {"padtomultiple", &grib_accessor_class_padtomultiple}, -#line 17 "accessor_class_list.gperf" - {"blob", &grib_accessor_class_blob}, -#line 164 "accessor_class_list.gperf" - {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, - {""}, {""}, {""}, -#line 119 "accessor_class_list.gperf" - {"ibmfloat", &grib_accessor_class_ibmfloat}, -#line 126 "accessor_class_list.gperf" - {"label", &grib_accessor_class_label}, -#line 161 "accessor_class_list.gperf" - {"position", &grib_accessor_class_position}, -#line 19 "accessor_class_list.gperf" - {"bufr_data_array", &grib_accessor_class_bufr_data_array}, - {""}, -#line 20 "accessor_class_list.gperf" - {"bufr_data_element", &grib_accessor_class_bufr_data_element}, - {""}, {""}, {""}, -#line 26 "accessor_class_list.gperf" - {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, - {""}, {""}, -#line 115 "accessor_class_list.gperf" - {"group", &grib_accessor_class_group}, - {""}, {""}, -#line 28 "accessor_class_list.gperf" - {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, - {""}, {""}, {""}, {""}, -#line 110 "accessor_class_list.gperf" - {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 197 "accessor_class_list.gperf" - {"trim", &grib_accessor_class_trim}, - {""}, {""}, {""}, {""}, {""}, -#line 195 "accessor_class_list.gperf" - {"transient", &grib_accessor_class_transient}, - {""}, {""}, -#line 39 "accessor_class_list.gperf" - {"concept", &grib_accessor_class_concept}, + {"uint64", &grib_accessor_uint64}, +#line 198 "accessor_class_list.gperf" + {"uint32", &grib_accessor_uint32}, {""}, #line 166 "accessor_class_list.gperf" - {"round", &grib_accessor_class_round}, + {"scale", &grib_accessor_scale}, +#line 184 "accessor_class_list.gperf" + {"statistics", &grib_accessor_statistics}, +#line 102 "accessor_class_list.gperf" + {"g2date", &grib_accessor_g2date}, +#line 67 "accessor_class_list.gperf" + {"data_run_length_packing", &grib_accessor_data_run_length_packing}, +#line 100 "accessor_class_list.gperf" + {"g2bitmap", &grib_accessor_g2bitmap}, +#line 60 "accessor_class_list.gperf" + {"data_g2secondary_bitmap", &grib_accessor_data_g2secondary_bitmap}, +#line 58 "accessor_class_list.gperf" + {"data_g2bifourier_packing", &grib_accessor_data_g2bifourier_packing}, {""}, -#line 196 "accessor_class_list.gperf" - {"transient_darray", &grib_accessor_class_transient_darray}, +#line 121 "accessor_class_list.gperf" + {"iterator", &grib_accessor_iterator}, +#line 177 "accessor_class_list.gperf" + {"simple_packing_error", &grib_accessor_simple_packing_error}, +#line 185 "accessor_class_list.gperf" + {"statistics_spectral", &grib_accessor_statistics_spectral}, {""}, -#line 18 "accessor_class_list.gperf" - {"budgdate", &grib_accessor_class_budgdate}, +#line 46 "accessor_class_list.gperf" + {"data_ccsds_packing", &grib_accessor_data_ccsds_packing}, {""}, {""}, #line 144 "accessor_class_list.gperf" - {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, - {""}, {""}, {""}, -#line 183 "accessor_class_list.gperf" - {"spectral_truncation", &grib_accessor_class_spectral_truncation}, -#line 40 "accessor_class_list.gperf" - {"constant", &grib_accessor_class_constant}, -#line 210 "accessor_class_list.gperf" - {"values", &grib_accessor_class_values}, - {""}, {""}, -#line 150 "accessor_class_list.gperf" - {"octet_number", &grib_accessor_class_octet_number}, -#line 135 "accessor_class_list.gperf" - {"lookup", &grib_accessor_class_lookup}, -#line 184 "accessor_class_list.gperf" - {"sprintf", &grib_accessor_class_sprintf}, - {""}, {""}, {""}, -#line 134 "accessor_class_list.gperf" - {"longitudes", &grib_accessor_class_longitudes}, - {""}, {""}, {""}, -#line 162 "accessor_class_list.gperf" - {"proj_string", &grib_accessor_class_proj_string}, - {""}, -#line 190 "accessor_class_list.gperf" - {"suppressed", &grib_accessor_class_suppressed}, -#line 56 "accessor_class_list.gperf" - {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, - {""}, {""}, -#line 57 "accessor_class_list.gperf" - {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, -#line 50 "accessor_class_list.gperf" - {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, + {"number_of_points", &grib_accessor_number_of_points}, +#line 96 "accessor_class_list.gperf" + {"g2_aerosol", &grib_accessor_g2_aerosol}, + {""}, {""}, {""}, {""}, +#line 173 "accessor_class_list.gperf" + {"select_step_template", &grib_accessor_select_step_template}, #line 192 "accessor_class_list.gperf" - {"to_double", &grib_accessor_class_to_double}, + {"to_integer", &grib_accessor_to_integer}, +#line 113 "accessor_class_list.gperf" + {"global_gaussian", &grib_accessor_global_gaussian}, +#line 145 "accessor_class_list.gperf" + {"number_of_points_gaussian", &grib_accessor_number_of_points_gaussian}, +#line 205 "accessor_class_list.gperf" + {"unsigned", &grib_accessor_unsigned}, + {""}, {""}, +#line 174 "accessor_class_list.gperf" + {"sexagesimal2decimal", &grib_accessor_sexagesimal2decimal}, + {""}, +#line 78 "accessor_class_list.gperf" + {"element", &grib_accessor_element}, +#line 206 "accessor_class_list.gperf" + {"unsigned_bits", &grib_accessor_unsigned_bits}, +#line 126 "accessor_class_list.gperf" + {"latitudes", &grib_accessor_latitudes}, + {""}, +#line 203 "accessor_class_list.gperf" + {"unexpanded_descriptors", &grib_accessor_unexpanded_descriptors}, + {""}, {""}, +#line 131 "accessor_class_list.gperf" + {"long", &grib_accessor_long}, +#line 76 "accessor_class_list.gperf" + {"divdouble", &grib_accessor_divdouble}, +#line 77 "accessor_class_list.gperf" + {"double", &grib_accessor_double}, +#line 186 "accessor_class_list.gperf" + {"step_human_readable", &grib_accessor_step_human_readable}, +#line 162 "accessor_class_list.gperf" + {"raw", &grib_accessor_raw}, +#line 99 "accessor_class_list.gperf" + {"g2_mars_labeling", &grib_accessor_g2_mars_labeling}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 193 "accessor_class_list.gperf" + {"to_string", &grib_accessor_to_string}, + {""}, +#line 201 "accessor_class_list.gperf" + {"uint64_little_endian", &grib_accessor_uint64_little_endian}, +#line 199 "accessor_class_list.gperf" + {"uint32_little_endian", &grib_accessor_uint32_little_endian}, + {""}, +#line 105 "accessor_class_list.gperf" + {"g2latlon", &grib_accessor_g2latlon}, +#line 159 "accessor_class_list.gperf" + {"padtomultiple", &grib_accessor_padtomultiple}, +#line 17 "accessor_class_list.gperf" + {"blob", &grib_accessor_blob}, +#line 163 "accessor_class_list.gperf" + {"rdbtime_guess_date", &grib_accessor_rdbtime_guess_date}, + {""}, {""}, {""}, +#line 118 "accessor_class_list.gperf" + {"ibmfloat", &grib_accessor_ibmfloat}, +#line 125 "accessor_class_list.gperf" + {"label", &grib_accessor_label}, +#line 160 "accessor_class_list.gperf" + {"position", &grib_accessor_position}, +#line 19 "accessor_class_list.gperf" + {"bufr_data_array", &grib_accessor_bufr_data_array}, + {""}, +#line 20 "accessor_class_list.gperf" + {"bufr_data_element", &grib_accessor_bufr_data_element}, + {""}, {""}, {""}, +#line 26 "accessor_class_list.gperf" + {"bufr_simple_thinning", &grib_accessor_bufr_simple_thinning}, + {""}, {""}, +#line 114 "accessor_class_list.gperf" + {"group", &grib_accessor_group}, + {""}, {""}, +#line 28 "accessor_class_list.gperf" + {"bufrdc_expanded_descriptors", &grib_accessor_bufrdc_expanded_descriptors}, + {""}, {""}, {""}, {""}, +#line 109 "accessor_class_list.gperf" + {"gaussian_grid_name", &grib_accessor_gaussian_grid_name}, +#line 196 "accessor_class_list.gperf" + {"trim", &grib_accessor_trim}, + {""}, {""}, {""}, {""}, {""}, +#line 194 "accessor_class_list.gperf" + {"transient", &grib_accessor_transient}, + {""}, {""}, +#line 38 "accessor_class_list.gperf" + {"concept", &grib_accessor_concept}, + {""}, +#line 165 "accessor_class_list.gperf" + {"round", &grib_accessor_round}, + {""}, +#line 195 "accessor_class_list.gperf" + {"transient_darray", &grib_accessor_transient_darray}, + {""}, +#line 18 "accessor_class_list.gperf" + {"budgdate", &grib_accessor_budgdate}, + {""}, {""}, +#line 143 "accessor_class_list.gperf" + {"number_of_coded_values", &grib_accessor_number_of_coded_values}, + {""}, {""}, {""}, +#line 182 "accessor_class_list.gperf" + {"spectral_truncation", &grib_accessor_spectral_truncation}, +#line 39 "accessor_class_list.gperf" + {"constant", &grib_accessor_constant}, +#line 209 "accessor_class_list.gperf" + {"values", &grib_accessor_values}, + {""}, {""}, +#line 149 "accessor_class_list.gperf" + {"octet_number", &grib_accessor_octet_number}, +#line 134 "accessor_class_list.gperf" + {"lookup", &grib_accessor_lookup}, +#line 183 "accessor_class_list.gperf" + {"sprintf", &grib_accessor_sprintf}, + {""}, {""}, {""}, +#line 133 "accessor_class_list.gperf" + {"longitudes", &grib_accessor_longitudes}, + {""}, {""}, {""}, +#line 161 "accessor_class_list.gperf" + {"proj_string", &grib_accessor_proj_string}, + {""}, +#line 189 "accessor_class_list.gperf" + {"suppressed", &grib_accessor_suppressed}, +#line 55 "accessor_class_list.gperf" + {"data_g1shsimple_packing", &grib_accessor_data_g1shsimple_packing}, + {""}, {""}, +#line 56 "accessor_class_list.gperf" + {"data_g1simple_packing", &grib_accessor_data_g1simple_packing}, +#line 49 "accessor_class_list.gperf" + {"data_g1complex_packing", &grib_accessor_data_g1complex_packing}, +#line 191 "accessor_class_list.gperf" + {"to_double", &grib_accessor_to_double}, {""}, {""}, {""}, #line 27 "accessor_class_list.gperf" - {"bufr_string_values", &grib_accessor_class_bufr_string_values}, + {"bufr_string_values", &grib_accessor_bufr_string_values}, {""}, +#line 129 "accessor_class_list.gperf" + {"library_version", &grib_accessor_library_version}, + {""}, +#line 137 "accessor_class_list.gperf" + {"md5", &grib_accessor_md5}, #line 130 "accessor_class_list.gperf" - {"library_version", &grib_accessor_class_library_version}, - {""}, + {"local_definition", &grib_accessor_local_definition}, + {""}, {""}, #line 138 "accessor_class_list.gperf" - {"md5", &grib_accessor_class_md5}, -#line 131 "accessor_class_list.gperf" - {"local_definition", &grib_accessor_class_local_definition}, - {""}, {""}, -#line 139 "accessor_class_list.gperf" - {"message", &grib_accessor_class_message}, -#line 84 "accessor_class_list.gperf" - {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 102 "accessor_class_list.gperf" - {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, -#line 136 "accessor_class_list.gperf" - {"mars_param", &grib_accessor_class_mars_param}, -#line 213 "accessor_class_list.gperf" - {"when", &grib_accessor_class_when}, -#line 120 "accessor_class_list.gperf" - {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 151 "accessor_class_list.gperf" - {"offset_file", &grib_accessor_class_offset_file}, - {""}, {""}, {""}, {""}, -#line 140 "accessor_class_list.gperf" - {"message_copy", &grib_accessor_class_message_copy}, - {""}, {""}, -#line 208 "accessor_class_list.gperf" - {"validity_date", &grib_accessor_class_validity_date}, -#line 209 "accessor_class_list.gperf" - {"validity_time", &grib_accessor_class_validity_time}, -#line 21 "accessor_class_list.gperf" - {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, + {"message", &grib_accessor_message}, +#line 83 "accessor_class_list.gperf" + {"g1_message_length", &grib_accessor_g1_message_length}, +#line 101 "accessor_class_list.gperf" + {"g2bitmap_present", &grib_accessor_g2bitmap_present}, +#line 135 "accessor_class_list.gperf" + {"mars_param", &grib_accessor_mars_param}, #line 212 "accessor_class_list.gperf" - {"vector", &grib_accessor_class_vector}, - {""}, -#line 95 "accessor_class_list.gperf" - {"g1step_range", &grib_accessor_class_g1step_range}, - {""}, -#line 34 "accessor_class_list.gperf" - {"closest_date", &grib_accessor_class_closest_date}, -#line 71 "accessor_class_list.gperf" - {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, -#line 36 "accessor_class_list.gperf" - {"codetable", &grib_accessor_class_codetable}, + {"when", &grib_accessor_when}, +#line 119 "accessor_class_list.gperf" + {"ieeefloat", &grib_accessor_ieeefloat}, +#line 150 "accessor_class_list.gperf" + {"offset_file", &grib_accessor_offset_file}, + {""}, {""}, {""}, {""}, +#line 139 "accessor_class_list.gperf" + {"message_copy", &grib_accessor_message_copy}, {""}, {""}, -#line 159 "accessor_class_list.gperf" - {"padtoeven", &grib_accessor_class_padtoeven}, -#line 72 "accessor_class_list.gperf" - {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, +#line 207 "accessor_class_list.gperf" + {"validity_date", &grib_accessor_validity_date}, +#line 208 "accessor_class_list.gperf" + {"validity_time", &grib_accessor_validity_time}, +#line 21 "accessor_class_list.gperf" + {"bufr_elements_table", &grib_accessor_bufr_elements_table}, +#line 211 "accessor_class_list.gperf" + {"vector", &grib_accessor_vector}, {""}, -#line 87 "accessor_class_list.gperf" - {"g1date", &grib_accessor_class_g1date}, +#line 94 "accessor_class_list.gperf" + {"g1step_range", &grib_accessor_g1step_range}, + {""}, +#line 33 "accessor_class_list.gperf" + {"closest_date", &grib_accessor_closest_date}, +#line 70 "accessor_class_list.gperf" + {"data_sh_unpacked", &grib_accessor_data_sh_unpacked}, +#line 35 "accessor_class_list.gperf" + {"codetable", &grib_accessor_codetable}, + {""}, {""}, +#line 158 "accessor_class_list.gperf" + {"padtoeven", &grib_accessor_padtoeven}, +#line 71 "accessor_class_list.gperf" + {"data_shsimple_packing", &grib_accessor_data_shsimple_packing}, {""}, #line 86 "accessor_class_list.gperf" - {"g1bitmap", &grib_accessor_class_g1bitmap}, -#line 55 "accessor_class_list.gperf" - {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, + {"g1date", &grib_accessor_g1date}, {""}, -#line 133 "accessor_class_list.gperf" - {"long_vector", &grib_accessor_class_long_vector}, - {""}, {""}, -#line 198 "accessor_class_list.gperf" - {"uint16", &grib_accessor_class_uint16}, - {""}, -#line 128 "accessor_class_list.gperf" - {"latlon_increment", &grib_accessor_class_latlon_increment}, - {""}, -#line 30 "accessor_class_list.gperf" - {"cf_var_name", &grib_accessor_class_cf_var_name}, -#line 137 "accessor_class_list.gperf" - {"mars_step", &grib_accessor_class_mars_step}, -#line 211 "accessor_class_list.gperf" - {"variable", &grib_accessor_class_variable}, -#line 53 "accessor_class_list.gperf" - {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, #line 85 "accessor_class_list.gperf" - {"g1_section4_length", &grib_accessor_class_g1_section4_length}, - {""}, + {"g1bitmap", &grib_accessor_g1bitmap}, #line 54 "accessor_class_list.gperf" - {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, + {"data_g1secondary_bitmap", &grib_accessor_data_g1secondary_bitmap}, + {""}, +#line 132 "accessor_class_list.gperf" + {"long_vector", &grib_accessor_long_vector}, + {""}, {""}, +#line 197 "accessor_class_list.gperf" + {"uint16", &grib_accessor_uint16}, + {""}, +#line 127 "accessor_class_list.gperf" + {"latlon_increment", &grib_accessor_latlon_increment}, + {""}, +#line 213 "accessor_class_list.gperf" + {"cf_var_name", &grib_accessor_cf_var_name}, +#line 136 "accessor_class_list.gperf" + {"mars_step", &grib_accessor_mars_step}, +#line 210 "accessor_class_list.gperf" + {"variable", &grib_accessor_variable}, +#line 52 "accessor_class_list.gperf" + {"data_g1second_order_general_packing", &grib_accessor_data_g1second_order_general_packing}, +#line 84 "accessor_class_list.gperf" + {"g1_section4_length", &grib_accessor_g1_section4_length}, + {""}, +#line 53 "accessor_class_list.gperf" + {"data_g1second_order_row_by_row_packing", &grib_accessor_data_g1second_order_row_by_row_packing}, {""}, #line 25 "accessor_class_list.gperf" - {"bufr_group", &grib_accessor_class_bufr_group}, + {"bufr_group", &grib_accessor_bufr_group}, + {""}, +#line 50 "accessor_class_list.gperf" + {"data_g1second_order_constant_width_packing", &grib_accessor_data_g1second_order_constant_width_packing}, {""}, #line 51 "accessor_class_list.gperf" - {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, - {""}, -#line 52 "accessor_class_list.gperf" - {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, -#line 154 "accessor_class_list.gperf" - {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, + {"data_g1second_order_general_extended_packing", &grib_accessor_data_g1second_order_general_extended_packing}, +#line 153 "accessor_class_list.gperf" + {"pack_bufr_values", &grib_accessor_pack_bufr_values}, {""}, {""}, {""}, {""}, -#line 168 "accessor_class_list.gperf" - {"scale_values", &grib_accessor_class_scale_values}, +#line 167 "accessor_class_list.gperf" + {"scale_values", &grib_accessor_scale_values}, {""}, -#line 147 "accessor_class_list.gperf" - {"number_of_values", &grib_accessor_class_number_of_values}, +#line 146 "accessor_class_list.gperf" + {"number_of_values", &grib_accessor_number_of_values}, {""}, {""}, {""}, {""}, {""}, #line 24 "accessor_class_list.gperf" - {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, + {"bufr_extract_subsets", &grib_accessor_bufr_extract_subsets}, #line 11 "accessor_class_list.gperf" - {"abstract_vector", &grib_accessor_class_abstract_vector}, -#line 37 "accessor_class_list.gperf" - {"codetable_title", &grib_accessor_class_codetable_title}, -#line 43 "accessor_class_list.gperf" - {"count_total", &grib_accessor_class_count_total}, -#line 89 "accessor_class_list.gperf" - {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, + {"abstract_vector", &grib_accessor_abstract_vector}, +#line 36 "accessor_class_list.gperf" + {"codetable_title", &grib_accessor_codetable_title}, +#line 42 "accessor_class_list.gperf" + {"count_total", &grib_accessor_count_total}, +#line 88 "accessor_class_list.gperf" + {"g1end_of_interval_monthly", &grib_accessor_g1end_of_interval_monthly}, #line 22 "accessor_class_list.gperf" - {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, + {"bufr_extract_area_subsets", &grib_accessor_bufr_extract_area_subsets}, {""}, -#line 116 "accessor_class_list.gperf" - {"gts_header", &grib_accessor_class_gts_header}, +#line 115 "accessor_class_list.gperf" + {"gts_header", &grib_accessor_gts_header}, {""}, #line 23 "accessor_class_list.gperf" - {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, + {"bufr_extract_datetime_subsets", &grib_accessor_bufr_extract_datetime_subsets}, {""}, -#line 148 "accessor_class_list.gperf" - {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, -#line 152 "accessor_class_list.gperf" - {"offset_values", &grib_accessor_class_offset_values}, -#line 80 "accessor_class_list.gperf" - {"evaluate", &grib_accessor_class_evaluate}, +#line 147 "accessor_class_list.gperf" + {"number_of_values_data_raw_packing", &grib_accessor_number_of_values_data_raw_packing}, +#line 151 "accessor_class_list.gperf" + {"offset_values", &grib_accessor_offset_values}, +#line 79 "accessor_class_list.gperf" + {"evaluate", &grib_accessor_evaluate}, {""}, {""}, {""}, -#line 74 "accessor_class_list.gperf" - {"decimal_precision", &grib_accessor_class_decimal_precision}, +#line 73 "accessor_class_list.gperf" + {"decimal_precision", &grib_accessor_decimal_precision}, +#line 179 "accessor_class_list.gperf" + {"smart_table", &grib_accessor_smart_table}, +#line 204 "accessor_class_list.gperf" + {"unpack_bufr_values", &grib_accessor_unpack_bufr_values}, +#line 117 "accessor_class_list.gperf" + {"headers_only", &grib_accessor_headers_only}, +#line 34 "accessor_class_list.gperf" + {"codeflag", &grib_accessor_codeflag}, +#line 106 "accessor_class_list.gperf" + {"g2level", &grib_accessor_g2level}, +#line 120 "accessor_class_list.gperf" + {"ifs_param", &grib_accessor_ifs_param}, + {""}, #line 180 "accessor_class_list.gperf" - {"smart_table", &grib_accessor_class_smart_table}, -#line 205 "accessor_class_list.gperf" - {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, -#line 118 "accessor_class_list.gperf" - {"headers_only", &grib_accessor_class_headers_only}, -#line 35 "accessor_class_list.gperf" - {"codeflag", &grib_accessor_class_codeflag}, -#line 107 "accessor_class_list.gperf" - {"g2level", &grib_accessor_class_g2level}, -#line 121 "accessor_class_list.gperf" - {"ifs_param", &grib_accessor_class_ifs_param}, - {""}, -#line 181 "accessor_class_list.gperf" - {"smart_table_column", &grib_accessor_class_smart_table_column}, + {"smart_table_column", &grib_accessor_smart_table_column}, {""}, {""}, {""}, {""}, -#line 129 "accessor_class_list.gperf" - {"latlonvalues", &grib_accessor_class_latlonvalues}, +#line 128 "accessor_class_list.gperf" + {"latlonvalues", &grib_accessor_latlonvalues}, {""}, -#line 70 "accessor_class_list.gperf" - {"data_sh_packed", &grib_accessor_class_data_sh_packed}, -#line 38 "accessor_class_list.gperf" - {"codetable_units", &grib_accessor_class_codetable_units}, +#line 69 "accessor_class_list.gperf" + {"data_sh_packed", &grib_accessor_data_sh_packed}, +#line 37 "accessor_class_list.gperf" + {"codetable_units", &grib_accessor_codetable_units}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 10 "accessor_class_list.gperf" - {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, + {"abstract_long_vector", &grib_accessor_abstract_long_vector}, {""}, {""}, {""}, {""}, -#line 90 "accessor_class_list.gperf" - {"g1fcperiod", &grib_accessor_class_g1fcperiod}, +#line 89 "accessor_class_list.gperf" + {"g1fcperiod", &grib_accessor_g1fcperiod}, {""}, -#line 41 "accessor_class_list.gperf" - {"count_file", &grib_accessor_class_count_file}, +#line 40 "accessor_class_list.gperf" + {"count_file", &grib_accessor_count_file}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 117 "accessor_class_list.gperf" - {"hash_array", &grib_accessor_class_hash_array}, -#line 31 "accessor_class_list.gperf" - {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, -#line 153 "accessor_class_list.gperf" - {"optimal_step_units", &grib_accessor_class_optimal_step_units}, +#line 116 "accessor_class_list.gperf" + {"hash_array", &grib_accessor_hash_array}, +#line 30 "accessor_class_list.gperf" + {"change_alternative_row_scanning", &grib_accessor_change_alternative_row_scanning}, +#line 152 "accessor_class_list.gperf" + {"optimal_step_units", &grib_accessor_optimal_step_units}, {""}, {""}, {""}, -#line 141 "accessor_class_list.gperf" - {"multdouble", &grib_accessor_class_multdouble}, +#line 140 "accessor_class_list.gperf" + {"multdouble", &grib_accessor_multdouble}, {""}, -#line 32 "accessor_class_list.gperf" - {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, +#line 31 "accessor_class_list.gperf" + {"change_scanning_direction", &grib_accessor_change_scanning_direction}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 149 "accessor_class_list.gperf" - {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, +#line 148 "accessor_class_list.gperf" + {"octahedral_gaussian", &grib_accessor_octahedral_gaussian}, {""}, -#line 125 "accessor_class_list.gperf" - {"ksec1expver", &grib_accessor_class_ksec1expver}, +#line 124 "accessor_class_list.gperf" + {"ksec1expver", &grib_accessor_ksec1expver}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 42 "accessor_class_list.gperf" - {"count_missing", &grib_accessor_class_count_missing}, +#line 41 "accessor_class_list.gperf" + {"count_missing", &grib_accessor_count_missing}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 81 "accessor_class_list.gperf" + {"from_scale_factor_scaled_value", &grib_accessor_from_scale_factor_scaled_value}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, #line 82 "accessor_class_list.gperf" - {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, -#line 83 "accessor_class_list.gperf" - {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, + {"g1_half_byte_codeflag", &grib_accessor_g1_half_byte_codeflag}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 92 "accessor_class_list.gperf" - {"g1monthlydate", &grib_accessor_class_g1monthlydate}, +#line 91 "accessor_class_list.gperf" + {"g1monthlydate", &grib_accessor_g1monthlydate}, {""}, -#line 33 "accessor_class_list.gperf" - {"check_internal_version", &grib_accessor_class_check_internal_version}, +#line 32 "accessor_class_list.gperf" + {"check_internal_version", &grib_accessor_check_internal_version}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 165 "accessor_class_list.gperf" - {"reference_value_error", &grib_accessor_class_reference_value_error}, +#line 164 "accessor_class_list.gperf" + {"reference_value_error", &grib_accessor_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 88 "accessor_class_list.gperf" - {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, +#line 87 "accessor_class_list.gperf" + {"g1day_of_the_year_date", &grib_accessor_g1day_of_the_year_date}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 96 "accessor_class_list.gperf" - {"g1verificationdate", &grib_accessor_class_g1verificationdate}, +#line 95 "accessor_class_list.gperf" + {"g1verificationdate", &grib_accessor_g1verificationdate}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 98 "accessor_class_list.gperf" - {"g2_chemical", &grib_accessor_class_g2_chemical}, +#line 97 "accessor_class_list.gperf" + {"g2_chemical", &grib_accessor_g2_chemical}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -635,29 +636,30 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 94 "accessor_class_list.gperf" - {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, #line 93 "accessor_class_list.gperf" - {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, + {"g1number_of_coded_values_sh_simple", &grib_accessor_g1number_of_coded_values_sh_simple}, +#line 92 "accessor_class_list.gperf" + {"g1number_of_coded_values_sh_complex", &grib_accessor_g1number_of_coded_values_sh_complex}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 91 "accessor_class_list.gperf" - {"g1forecastmonth", &grib_accessor_class_g1forecastmonth} +#line 90 "accessor_class_list.gperf" + {"g1forecastmonth", &grib_accessor_g1forecastmonth} }; -static const struct accessor_class_hash* grib_accessor_classes_hash(const char *str, size_t len) +const struct accessor_class_hash * +grib_accessor_hash (const char *str, size_t len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) { unsigned int key = grib_accessor_classes_get_id (str, len); -#ifdef DEBUG + if (key <= MAX_HASH_VALUE) { - const char *s; - Assert( len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH ); - Assert( key <= MAX_HASH_VALUE ); - s = classes[key].name; - Assert( *str == *s && strcmp(str + 1, s + 1)==0 ); - } -#endif + const char *s = classes[key].name; + if (*str == *s && !strcmp (str + 1, s + 1)) return &classes[key]; + } + } + return 0; } diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 9455ca024..a345e7391 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -1,205 +1,204 @@ /* This file is automatically generated by ./make_class.pl, do not edit */ -{ "abstract_long_vector", &grib_accessor_class_abstract_long_vector, }, -{ "abstract_vector", &grib_accessor_class_abstract_vector, }, -{ "ascii", &grib_accessor_class_ascii, }, -{ "bit", &grib_accessor_class_bit, }, -{ "bitmap", &grib_accessor_class_bitmap, }, -{ "bits", &grib_accessor_class_bits, }, -{ "bits_per_value", &grib_accessor_class_bits_per_value, }, -{ "blob", &grib_accessor_class_blob, }, -{ "budgdate", &grib_accessor_class_budgdate, }, -{ "bufr_data_array", &grib_accessor_class_bufr_data_array, }, -{ "bufr_data_element", &grib_accessor_class_bufr_data_element, }, -{ "bufr_elements_table", &grib_accessor_class_bufr_elements_table, }, -{ "bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets, }, -{ "bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets, }, -{ "bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets, }, -{ "bufr_group", &grib_accessor_class_bufr_group, }, -{ "bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning, }, -{ "bufr_string_values", &grib_accessor_class_bufr_string_values, }, -{ "bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors, }, -{ "bytes", &grib_accessor_class_bytes, }, -{ "cf_var_name", &grib_accessor_class_cf_var_name, }, -{ "change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning, }, -{ "change_scanning_direction", &grib_accessor_class_change_scanning_direction, }, -{ "check_internal_version", &grib_accessor_class_check_internal_version, }, -{ "closest_date", &grib_accessor_class_closest_date, }, -{ "codeflag", &grib_accessor_class_codeflag, }, -{ "codetable", &grib_accessor_class_codetable, }, -{ "codetable_title", &grib_accessor_class_codetable_title, }, -{ "codetable_units", &grib_accessor_class_codetable_units, }, -{ "concept", &grib_accessor_class_concept, }, -{ "constant", &grib_accessor_class_constant, }, -{ "count_file", &grib_accessor_class_count_file, }, -{ "count_missing", &grib_accessor_class_count_missing, }, -{ "count_total", &grib_accessor_class_count_total, }, -{ "data_apply_bitmap", &grib_accessor_class_data_apply_bitmap, }, -{ "data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic, }, -{ "data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap, }, -{ "data_ccsds_packing", &grib_accessor_class_data_ccsds_packing, }, -{ "data_complex_packing", &grib_accessor_class_data_complex_packing, }, -{ "data_dummy_field", &grib_accessor_class_data_dummy_field, }, -{ "data_g1complex_packing", &grib_accessor_class_data_g1complex_packing, }, -{ "data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing, }, -{ "data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing, }, -{ "data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing, }, -{ "data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing, }, -{ "data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap, }, -{ "data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing, }, -{ "data_g1simple_packing", &grib_accessor_class_data_g1simple_packing, }, -{ "data_g22order_packing", &grib_accessor_class_data_g22order_packing, }, -{ "data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing, }, -{ "data_g2complex_packing", &grib_accessor_class_data_g2complex_packing, }, -{ "data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap, }, -{ "data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing, }, -{ "data_g2simple_packing", &grib_accessor_class_data_g2simple_packing, }, -{ "data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing, }, -{ "data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing, }, -{ "data_png_packing", &grib_accessor_class_data_png_packing, }, -{ "data_raw_packing", &grib_accessor_class_data_raw_packing, }, -{ "data_run_length_packing", &grib_accessor_class_data_run_length_packing, }, -{ "data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap, }, -{ "data_sh_packed", &grib_accessor_class_data_sh_packed, }, -{ "data_sh_unpacked", &grib_accessor_class_data_sh_unpacked, }, -{ "data_shsimple_packing", &grib_accessor_class_data_shsimple_packing, }, -{ "data_simple_packing", &grib_accessor_class_data_simple_packing, }, -{ "decimal_precision", &grib_accessor_class_decimal_precision, }, -{ "dictionary", &grib_accessor_class_dictionary, }, -{ "dirty", &grib_accessor_class_dirty, }, -{ "divdouble", &grib_accessor_class_divdouble, }, -{ "double", &grib_accessor_class_double, }, -{ "element", &grib_accessor_class_element, }, -{ "evaluate", &grib_accessor_class_evaluate, }, -{ "expanded_descriptors", &grib_accessor_class_expanded_descriptors, }, -{ "from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value, }, -{ "g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag, }, -{ "g1_message_length", &grib_accessor_class_g1_message_length, }, -{ "g1_section4_length", &grib_accessor_class_g1_section4_length, }, -{ "g1bitmap", &grib_accessor_class_g1bitmap, }, -{ "g1date", &grib_accessor_class_g1date, }, -{ "g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date, }, -{ "g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly, }, -{ "g1fcperiod", &grib_accessor_class_g1fcperiod, }, -{ "g1forecastmonth", &grib_accessor_class_g1forecastmonth, }, -{ "g1monthlydate", &grib_accessor_class_g1monthlydate, }, -{ "g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex, }, -{ "g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple, }, -{ "g1step_range", &grib_accessor_class_g1step_range, }, -{ "g1verificationdate", &grib_accessor_class_g1verificationdate, }, -{ "g2_aerosol", &grib_accessor_class_g2_aerosol, }, -{ "g2_chemical", &grib_accessor_class_g2_chemical, }, -{ "g2_eps", &grib_accessor_class_g2_eps, }, -{ "g2_mars_labeling", &grib_accessor_class_g2_mars_labeling, }, -{ "g2bitmap", &grib_accessor_class_g2bitmap, }, -{ "g2bitmap_present", &grib_accessor_class_g2bitmap_present, }, -{ "g2date", &grib_accessor_class_g2date, }, -{ "g2end_step", &grib_accessor_class_g2end_step, }, -{ "g2grid", &grib_accessor_class_g2grid, }, -{ "g2latlon", &grib_accessor_class_g2latlon, }, -{ "g2level", &grib_accessor_class_g2level, }, -{ "g2lon", &grib_accessor_class_g2lon, }, -{ "g2step_range", &grib_accessor_class_g2step_range, }, -{ "gaussian_grid_name", &grib_accessor_class_gaussian_grid_name, }, -{ "gds_is_present", &grib_accessor_class_gds_is_present, }, -{ "gen", &grib_accessor_class_gen, }, -{ "getenv", &grib_accessor_class_getenv, }, -{ "global_gaussian", &grib_accessor_class_global_gaussian, }, -{ "group", &grib_accessor_class_group, }, -{ "gts_header", &grib_accessor_class_gts_header, }, -{ "hash_array", &grib_accessor_class_hash_array, }, -{ "headers_only", &grib_accessor_class_headers_only, }, -{ "ibmfloat", &grib_accessor_class_ibmfloat, }, -{ "ieeefloat", &grib_accessor_class_ieeefloat, }, -{ "ifs_param", &grib_accessor_class_ifs_param, }, -{ "iterator", &grib_accessor_class_iterator, }, -{ "julian_date", &grib_accessor_class_julian_date, }, -{ "julian_day", &grib_accessor_class_julian_day, }, -{ "ksec1expver", &grib_accessor_class_ksec1expver, }, -{ "label", &grib_accessor_class_label, }, -{ "latitudes", &grib_accessor_class_latitudes, }, -{ "latlon_increment", &grib_accessor_class_latlon_increment, }, -{ "latlonvalues", &grib_accessor_class_latlonvalues, }, -{ "library_version", &grib_accessor_class_library_version, }, -{ "local_definition", &grib_accessor_class_local_definition, }, -{ "long", &grib_accessor_class_long, }, -{ "long_vector", &grib_accessor_class_long_vector, }, -{ "longitudes", &grib_accessor_class_longitudes, }, -{ "lookup", &grib_accessor_class_lookup, }, -{ "mars_param", &grib_accessor_class_mars_param, }, -{ "mars_step", &grib_accessor_class_mars_step, }, -{ "md5", &grib_accessor_class_md5, }, -{ "message", &grib_accessor_class_message, }, -{ "message_copy", &grib_accessor_class_message_copy, }, -{ "multdouble", &grib_accessor_class_multdouble, }, -{ "nearest", &grib_accessor_class_nearest, }, -{ "non_alpha", &grib_accessor_class_non_alpha, }, -{ "number_of_coded_values", &grib_accessor_class_number_of_coded_values, }, -{ "number_of_points", &grib_accessor_class_number_of_points, }, -{ "number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian, }, -{ "number_of_values", &grib_accessor_class_number_of_values, }, -{ "number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing, }, -{ "octahedral_gaussian", &grib_accessor_class_octahedral_gaussian, }, -{ "octet_number", &grib_accessor_class_octet_number, }, -{ "offset_file", &grib_accessor_class_offset_file, }, -{ "offset_values", &grib_accessor_class_offset_values, }, -{ "optimal_step_units", &grib_accessor_class_optimal_step_units, }, -{ "pack_bufr_values", &grib_accessor_class_pack_bufr_values, }, -{ "packing_type", &grib_accessor_class_packing_type, }, -{ "pad", &grib_accessor_class_pad, }, -{ "padding", &grib_accessor_class_padding, }, -{ "padto", &grib_accessor_class_padto, }, -{ "padtoeven", &grib_accessor_class_padtoeven, }, -{ "padtomultiple", &grib_accessor_class_padtomultiple, }, -{ "position", &grib_accessor_class_position, }, -{ "proj_string", &grib_accessor_class_proj_string, }, -{ "raw", &grib_accessor_class_raw, }, -{ "rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date, }, -{ "reference_value_error", &grib_accessor_class_reference_value_error, }, -{ "round", &grib_accessor_class_round, }, -{ "scale", &grib_accessor_class_scale, }, -{ "scale_values", &grib_accessor_class_scale_values, }, -{ "second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value, }, -{ "section", &grib_accessor_class_section, }, -{ "section_length", &grib_accessor_class_section_length, }, -{ "section_padding", &grib_accessor_class_section_padding, }, -{ "section_pointer", &grib_accessor_class_section_pointer, }, -{ "select_step_template", &grib_accessor_class_select_step_template, }, -{ "sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal, }, -{ "signed", &grib_accessor_class_signed, }, -{ "signed_bits", &grib_accessor_class_signed_bits, }, -{ "simple_packing_error", &grib_accessor_class_simple_packing_error, }, -{ "size", &grib_accessor_class_size, }, -{ "smart_table", &grib_accessor_class_smart_table, }, -{ "smart_table_column", &grib_accessor_class_smart_table_column, }, -{ "spd", &grib_accessor_class_spd, }, -{ "spectral_truncation", &grib_accessor_class_spectral_truncation, }, -{ "sprintf", &grib_accessor_class_sprintf, }, -{ "statistics", &grib_accessor_class_statistics, }, -{ "statistics_spectral", &grib_accessor_class_statistics_spectral, }, -{ "step_human_readable", &grib_accessor_class_step_human_readable, }, -{ "step_in_units", &grib_accessor_class_step_in_units, }, -{ "sum", &grib_accessor_class_sum, }, -{ "suppressed", &grib_accessor_class_suppressed, }, -{ "time", &grib_accessor_class_time, }, -{ "to_double", &grib_accessor_class_to_double, }, -{ "to_integer", &grib_accessor_class_to_integer, }, -{ "to_string", &grib_accessor_class_to_string, }, -{ "transient", &grib_accessor_class_transient, }, -{ "transient_darray", &grib_accessor_class_transient_darray, }, -{ "trim", &grib_accessor_class_trim, }, -{ "uint16", &grib_accessor_class_uint16, }, -{ "uint32", &grib_accessor_class_uint32, }, -{ "uint32_little_endian", &grib_accessor_class_uint32_little_endian, }, -{ "uint64", &grib_accessor_class_uint64, }, -{ "uint64_little_endian", &grib_accessor_class_uint64_little_endian, }, -{ "uint8", &grib_accessor_class_uint8, }, -{ "unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors, }, -{ "unpack_bufr_values", &grib_accessor_class_unpack_bufr_values, }, -{ "unsigned", &grib_accessor_class_unsigned, }, -{ "unsigned_bits", &grib_accessor_class_unsigned_bits, }, -{ "validity_date", &grib_accessor_class_validity_date, }, -{ "validity_time", &grib_accessor_class_validity_time, }, -{ "values", &grib_accessor_class_values, }, -{ "variable", &grib_accessor_class_variable, }, -{ "vector", &grib_accessor_class_vector, }, -{ "when", &grib_accessor_class_when, }, +{ "abstract_long_vector", &grib_accessor_abstract_long_vector, }, +{ "abstract_vector", &grib_accessor_abstract_vector, }, +{ "ascii", &grib_accessor_ascii, }, +{ "bit", &grib_accessor_bit, }, +{ "bitmap", &grib_accessor_bitmap, }, +{ "bits", &grib_accessor_bits, }, +{ "bits_per_value", &grib_accessor_bits_per_value, }, +{ "blob", &grib_accessor_blob, }, +{ "budgdate", &grib_accessor_budgdate, }, +{ "bufr_data_array", &grib_accessor_bufr_data_array, }, +{ "bufr_data_element", &grib_accessor_bufr_data_element, }, +{ "bufr_elements_table", &grib_accessor_bufr_elements_table, }, +{ "bufr_extract_area_subsets", &grib_accessor_bufr_extract_area_subsets, }, +{ "bufr_extract_datetime_subsets", &grib_accessor_bufr_extract_datetime_subsets, }, +{ "bufr_extract_subsets", &grib_accessor_bufr_extract_subsets, }, +{ "bufr_group", &grib_accessor_bufr_group, }, +{ "bufr_simple_thinning", &grib_accessor_bufr_simple_thinning, }, +{ "bufr_string_values", &grib_accessor_bufr_string_values, }, +{ "bufrdc_expanded_descriptors", &grib_accessor_bufrdc_expanded_descriptors, }, +{ "bytes", &grib_accessor_bytes, }, +{ "change_alternative_row_scanning", &grib_accessor_change_alternative_row_scanning, }, +{ "change_scanning_direction", &grib_accessor_change_scanning_direction, }, +{ "check_internal_version", &grib_accessor_check_internal_version, }, +{ "closest_date", &grib_accessor_closest_date, }, +{ "codeflag", &grib_accessor_codeflag, }, +{ "codetable", &grib_accessor_codetable, }, +{ "codetable_title", &grib_accessor_codetable_title, }, +{ "codetable_units", &grib_accessor_codetable_units, }, +{ "concept", &grib_accessor_concept, }, +{ "constant", &grib_accessor_constant, }, +{ "count_file", &grib_accessor_count_file, }, +{ "count_missing", &grib_accessor_count_missing, }, +{ "count_total", &grib_accessor_count_total, }, +{ "data_apply_bitmap", &grib_accessor_data_apply_bitmap, }, +{ "data_apply_boustrophedonic", &grib_accessor_data_apply_boustrophedonic, }, +{ "data_apply_boustrophedonic_bitmap", &grib_accessor_data_apply_boustrophedonic_bitmap, }, +{ "data_ccsds_packing", &grib_accessor_data_ccsds_packing, }, +{ "data_complex_packing", &grib_accessor_data_complex_packing, }, +{ "data_dummy_field", &grib_accessor_data_dummy_field, }, +{ "data_g1complex_packing", &grib_accessor_data_g1complex_packing, }, +{ "data_g1second_order_constant_width_packing", &grib_accessor_data_g1second_order_constant_width_packing, }, +{ "data_g1second_order_general_extended_packing", &grib_accessor_data_g1second_order_general_extended_packing, }, +{ "data_g1second_order_general_packing", &grib_accessor_data_g1second_order_general_packing, }, +{ "data_g1second_order_row_by_row_packing", &grib_accessor_data_g1second_order_row_by_row_packing, }, +{ "data_g1secondary_bitmap", &grib_accessor_data_g1secondary_bitmap, }, +{ "data_g1shsimple_packing", &grib_accessor_data_g1shsimple_packing, }, +{ "data_g1simple_packing", &grib_accessor_data_g1simple_packing, }, +{ "data_g22order_packing", &grib_accessor_data_g22order_packing, }, +{ "data_g2bifourier_packing", &grib_accessor_data_g2bifourier_packing, }, +{ "data_g2complex_packing", &grib_accessor_data_g2complex_packing, }, +{ "data_g2secondary_bitmap", &grib_accessor_data_g2secondary_bitmap, }, +{ "data_g2shsimple_packing", &grib_accessor_data_g2shsimple_packing, }, +{ "data_g2simple_packing", &grib_accessor_data_g2simple_packing, }, +{ "data_g2simple_packing_with_preprocessing", &grib_accessor_data_g2simple_packing_with_preprocessing, }, +{ "data_jpeg2000_packing", &grib_accessor_data_jpeg2000_packing, }, +{ "data_png_packing", &grib_accessor_data_png_packing, }, +{ "data_raw_packing", &grib_accessor_data_raw_packing, }, +{ "data_run_length_packing", &grib_accessor_data_run_length_packing, }, +{ "data_secondary_bitmap", &grib_accessor_data_secondary_bitmap, }, +{ "data_sh_packed", &grib_accessor_data_sh_packed, }, +{ "data_sh_unpacked", &grib_accessor_data_sh_unpacked, }, +{ "data_shsimple_packing", &grib_accessor_data_shsimple_packing, }, +{ "data_simple_packing", &grib_accessor_data_simple_packing, }, +{ "decimal_precision", &grib_accessor_decimal_precision, }, +{ "dictionary", &grib_accessor_dictionary, }, +{ "dirty", &grib_accessor_dirty, }, +{ "divdouble", &grib_accessor_divdouble, }, +{ "double", &grib_accessor_double, }, +{ "element", &grib_accessor_element, }, +{ "evaluate", &grib_accessor_evaluate, }, +{ "expanded_descriptors", &grib_accessor_expanded_descriptors, }, +{ "from_scale_factor_scaled_value", &grib_accessor_from_scale_factor_scaled_value, }, +{ "g1_half_byte_codeflag", &grib_accessor_g1_half_byte_codeflag, }, +{ "g1_message_length", &grib_accessor_g1_message_length, }, +{ "g1_section4_length", &grib_accessor_g1_section4_length, }, +{ "g1bitmap", &grib_accessor_g1bitmap, }, +{ "g1date", &grib_accessor_g1date, }, +{ "g1day_of_the_year_date", &grib_accessor_g1day_of_the_year_date, }, +{ "g1end_of_interval_monthly", &grib_accessor_g1end_of_interval_monthly, }, +{ "g1fcperiod", &grib_accessor_g1fcperiod, }, +{ "g1forecastmonth", &grib_accessor_g1forecastmonth, }, +{ "g1monthlydate", &grib_accessor_g1monthlydate, }, +{ "g1number_of_coded_values_sh_complex", &grib_accessor_g1number_of_coded_values_sh_complex, }, +{ "g1number_of_coded_values_sh_simple", &grib_accessor_g1number_of_coded_values_sh_simple, }, +{ "g1step_range", &grib_accessor_g1step_range, }, +{ "g1verificationdate", &grib_accessor_g1verificationdate, }, +{ "g2_aerosol", &grib_accessor_g2_aerosol, }, +{ "g2_chemical", &grib_accessor_g2_chemical, }, +{ "g2_eps", &grib_accessor_g2_eps, }, +{ "g2_mars_labeling", &grib_accessor_g2_mars_labeling, }, +{ "g2bitmap", &grib_accessor_g2bitmap, }, +{ "g2bitmap_present", &grib_accessor_g2bitmap_present, }, +{ "g2date", &grib_accessor_g2date, }, +{ "g2end_step", &grib_accessor_g2end_step, }, +{ "g2grid", &grib_accessor_g2grid, }, +{ "g2latlon", &grib_accessor_g2latlon, }, +{ "g2level", &grib_accessor_g2level, }, +{ "g2lon", &grib_accessor_g2lon, }, +{ "g2step_range", &grib_accessor_g2step_range, }, +{ "gaussian_grid_name", &grib_accessor_gaussian_grid_name, }, +{ "gds_is_present", &grib_accessor_gds_is_present, }, +{ "gen", &grib_accessor_gen, }, +{ "getenv", &grib_accessor_getenv, }, +{ "global_gaussian", &grib_accessor_global_gaussian, }, +{ "group", &grib_accessor_group, }, +{ "gts_header", &grib_accessor_gts_header, }, +{ "hash_array", &grib_accessor_hash_array, }, +{ "headers_only", &grib_accessor_headers_only, }, +{ "ibmfloat", &grib_accessor_ibmfloat, }, +{ "ieeefloat", &grib_accessor_ieeefloat, }, +{ "ifs_param", &grib_accessor_ifs_param, }, +{ "iterator", &grib_accessor_iterator, }, +{ "julian_date", &grib_accessor_julian_date, }, +{ "julian_day", &grib_accessor_julian_day, }, +{ "ksec1expver", &grib_accessor_ksec1expver, }, +{ "label", &grib_accessor_label, }, +{ "latitudes", &grib_accessor_latitudes, }, +{ "latlon_increment", &grib_accessor_latlon_increment, }, +{ "latlonvalues", &grib_accessor_latlonvalues, }, +{ "library_version", &grib_accessor_library_version, }, +{ "local_definition", &grib_accessor_local_definition, }, +{ "long", &grib_accessor_long, }, +{ "long_vector", &grib_accessor_long_vector, }, +{ "longitudes", &grib_accessor_longitudes, }, +{ "lookup", &grib_accessor_lookup, }, +{ "mars_param", &grib_accessor_mars_param, }, +{ "mars_step", &grib_accessor_mars_step, }, +{ "md5", &grib_accessor_md5, }, +{ "message", &grib_accessor_message, }, +{ "message_copy", &grib_accessor_message_copy, }, +{ "multdouble", &grib_accessor_multdouble, }, +{ "nearest", &grib_accessor_nearest, }, +{ "non_alpha", &grib_accessor_non_alpha, }, +{ "number_of_coded_values", &grib_accessor_number_of_coded_values, }, +{ "number_of_points", &grib_accessor_number_of_points, }, +{ "number_of_points_gaussian", &grib_accessor_number_of_points_gaussian, }, +{ "number_of_values", &grib_accessor_number_of_values, }, +{ "number_of_values_data_raw_packing", &grib_accessor_number_of_values_data_raw_packing, }, +{ "octahedral_gaussian", &grib_accessor_octahedral_gaussian, }, +{ "octet_number", &grib_accessor_octet_number, }, +{ "offset_file", &grib_accessor_offset_file, }, +{ "offset_values", &grib_accessor_offset_values, }, +{ "optimal_step_units", &grib_accessor_optimal_step_units, }, +{ "pack_bufr_values", &grib_accessor_pack_bufr_values, }, +{ "packing_type", &grib_accessor_packing_type, }, +{ "pad", &grib_accessor_pad, }, +{ "padding", &grib_accessor_padding, }, +{ "padto", &grib_accessor_padto, }, +{ "padtoeven", &grib_accessor_padtoeven, }, +{ "padtomultiple", &grib_accessor_padtomultiple, }, +{ "position", &grib_accessor_position, }, +{ "proj_string", &grib_accessor_proj_string, }, +{ "raw", &grib_accessor_raw, }, +{ "rdbtime_guess_date", &grib_accessor_rdbtime_guess_date, }, +{ "reference_value_error", &grib_accessor_reference_value_error, }, +{ "round", &grib_accessor_round, }, +{ "scale", &grib_accessor_scale, }, +{ "scale_values", &grib_accessor_scale_values, }, +{ "second_order_bits_per_value", &grib_accessor_second_order_bits_per_value, }, +{ "section", &grib_accessor_section, }, +{ "section_length", &grib_accessor_section_length, }, +{ "section_padding", &grib_accessor_section_padding, }, +{ "section_pointer", &grib_accessor_section_pointer, }, +{ "select_step_template", &grib_accessor_select_step_template, }, +{ "sexagesimal2decimal", &grib_accessor_sexagesimal2decimal, }, +{ "signed", &grib_accessor_signed, }, +{ "signed_bits", &grib_accessor_signed_bits, }, +{ "simple_packing_error", &grib_accessor_simple_packing_error, }, +{ "size", &grib_accessor_size, }, +{ "smart_table", &grib_accessor_smart_table, }, +{ "smart_table_column", &grib_accessor_smart_table_column, }, +{ "spd", &grib_accessor_spd, }, +{ "spectral_truncation", &grib_accessor_spectral_truncation, }, +{ "sprintf", &grib_accessor_sprintf, }, +{ "statistics", &grib_accessor_statistics, }, +{ "statistics_spectral", &grib_accessor_statistics_spectral, }, +{ "step_human_readable", &grib_accessor_step_human_readable, }, +{ "step_in_units", &grib_accessor_step_in_units, }, +{ "sum", &grib_accessor_sum, }, +{ "suppressed", &grib_accessor_suppressed, }, +{ "time", &grib_accessor_time, }, +{ "to_double", &grib_accessor_to_double, }, +{ "to_integer", &grib_accessor_to_integer, }, +{ "to_string", &grib_accessor_to_string, }, +{ "transient", &grib_accessor_transient, }, +{ "transient_darray", &grib_accessor_transient_darray, }, +{ "trim", &grib_accessor_trim, }, +{ "uint16", &grib_accessor_uint16, }, +{ "uint32", &grib_accessor_uint32, }, +{ "uint32_little_endian", &grib_accessor_uint32_little_endian, }, +{ "uint64", &grib_accessor_uint64, }, +{ "uint64_little_endian", &grib_accessor_uint64_little_endian, }, +{ "uint8", &grib_accessor_uint8, }, +{ "unexpanded_descriptors", &grib_accessor_unexpanded_descriptors, }, +{ "unpack_bufr_values", &grib_accessor_unpack_bufr_values, }, +{ "unsigned", &grib_accessor_unsigned, }, +{ "unsigned_bits", &grib_accessor_unsigned_bits, }, +{ "validity_date", &grib_accessor_validity_date, }, +{ "validity_time", &grib_accessor_validity_time, }, +{ "values", &grib_accessor_values, }, +{ "variable", &grib_accessor_variable, }, +{ "vector", &grib_accessor_vector, }, +{ "when", &grib_accessor_when, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index eae0e2406..3a64fd150 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -1,206 +1,206 @@ /* This file is automatically generated by ./make_class.pl, do not edit */ -abstract_long_vector, &grib_accessor_class_abstract_long_vector -abstract_vector, &grib_accessor_class_abstract_vector -ascii, &grib_accessor_class_ascii -bit, &grib_accessor_class_bit -bitmap, &grib_accessor_class_bitmap -bits, &grib_accessor_class_bits -bits_per_value, &grib_accessor_class_bits_per_value -blob, &grib_accessor_class_blob -budgdate, &grib_accessor_class_budgdate -bufr_data_array, &grib_accessor_class_bufr_data_array -bufr_data_element, &grib_accessor_class_bufr_data_element -bufr_elements_table, &grib_accessor_class_bufr_elements_table -bufr_extract_area_subsets, &grib_accessor_class_bufr_extract_area_subsets -bufr_extract_datetime_subsets, &grib_accessor_class_bufr_extract_datetime_subsets -bufr_extract_subsets, &grib_accessor_class_bufr_extract_subsets -bufr_group, &grib_accessor_class_bufr_group -bufr_simple_thinning, &grib_accessor_class_bufr_simple_thinning -bufr_string_values, &grib_accessor_class_bufr_string_values -bufrdc_expanded_descriptors, &grib_accessor_class_bufrdc_expanded_descriptors -bytes, &grib_accessor_class_bytes -cf_var_name, &grib_accessor_class_cf_var_name -change_alternative_row_scanning, &grib_accessor_class_change_alternative_row_scanning -change_scanning_direction, &grib_accessor_class_change_scanning_direction -check_internal_version, &grib_accessor_class_check_internal_version -closest_date, &grib_accessor_class_closest_date -codeflag, &grib_accessor_class_codeflag -codetable, &grib_accessor_class_codetable -codetable_title, &grib_accessor_class_codetable_title -codetable_units, &grib_accessor_class_codetable_units -concept, &grib_accessor_class_concept -constant, &grib_accessor_class_constant -count_file, &grib_accessor_class_count_file -count_missing, &grib_accessor_class_count_missing -count_total, &grib_accessor_class_count_total -data_apply_bitmap, &grib_accessor_class_data_apply_bitmap -data_apply_boustrophedonic, &grib_accessor_class_data_apply_boustrophedonic -data_apply_boustrophedonic_bitmap, &grib_accessor_class_data_apply_boustrophedonic_bitmap -data_ccsds_packing, &grib_accessor_class_data_ccsds_packing -data_complex_packing, &grib_accessor_class_data_complex_packing -data_dummy_field, &grib_accessor_class_data_dummy_field -data_g1complex_packing, &grib_accessor_class_data_g1complex_packing -data_g1second_order_constant_width_packing, &grib_accessor_class_data_g1second_order_constant_width_packing -data_g1second_order_general_extended_packing, &grib_accessor_class_data_g1second_order_general_extended_packing -data_g1second_order_general_packing, &grib_accessor_class_data_g1second_order_general_packing -data_g1second_order_row_by_row_packing, &grib_accessor_class_data_g1second_order_row_by_row_packing -data_g1secondary_bitmap, &grib_accessor_class_data_g1secondary_bitmap -data_g1shsimple_packing, &grib_accessor_class_data_g1shsimple_packing -data_g1simple_packing, &grib_accessor_class_data_g1simple_packing -data_g22order_packing, &grib_accessor_class_data_g22order_packing -data_g2bifourier_packing, &grib_accessor_class_data_g2bifourier_packing -data_g2complex_packing, &grib_accessor_class_data_g2complex_packing -data_g2secondary_bitmap, &grib_accessor_class_data_g2secondary_bitmap -data_g2shsimple_packing, &grib_accessor_class_data_g2shsimple_packing -data_g2simple_packing, &grib_accessor_class_data_g2simple_packing -data_g2simple_packing_with_preprocessing, &grib_accessor_class_data_g2simple_packing_with_preprocessing -data_jpeg2000_packing, &grib_accessor_class_data_jpeg2000_packing -data_png_packing, &grib_accessor_class_data_png_packing -data_raw_packing, &grib_accessor_class_data_raw_packing -data_run_length_packing, &grib_accessor_class_data_run_length_packing -data_secondary_bitmap, &grib_accessor_class_data_secondary_bitmap -data_sh_packed, &grib_accessor_class_data_sh_packed -data_sh_unpacked, &grib_accessor_class_data_sh_unpacked -data_shsimple_packing, &grib_accessor_class_data_shsimple_packing -data_simple_packing, &grib_accessor_class_data_simple_packing -decimal_precision, &grib_accessor_class_decimal_precision -dictionary, &grib_accessor_class_dictionary -dirty, &grib_accessor_class_dirty -divdouble, &grib_accessor_class_divdouble -double, &grib_accessor_class_double -element, &grib_accessor_class_element -evaluate, &grib_accessor_class_evaluate -expanded_descriptors, &grib_accessor_class_expanded_descriptors -from_scale_factor_scaled_value, &grib_accessor_class_from_scale_factor_scaled_value -g1_half_byte_codeflag, &grib_accessor_class_g1_half_byte_codeflag -g1_message_length, &grib_accessor_class_g1_message_length -g1_section4_length, &grib_accessor_class_g1_section4_length -g1bitmap, &grib_accessor_class_g1bitmap -g1date, &grib_accessor_class_g1date -g1day_of_the_year_date, &grib_accessor_class_g1day_of_the_year_date -g1end_of_interval_monthly, &grib_accessor_class_g1end_of_interval_monthly -g1fcperiod, &grib_accessor_class_g1fcperiod -g1forecastmonth, &grib_accessor_class_g1forecastmonth -g1monthlydate, &grib_accessor_class_g1monthlydate -g1number_of_coded_values_sh_complex, &grib_accessor_class_g1number_of_coded_values_sh_complex -g1number_of_coded_values_sh_simple, &grib_accessor_class_g1number_of_coded_values_sh_simple -g1step_range, &grib_accessor_class_g1step_range -g1verificationdate, &grib_accessor_class_g1verificationdate -g2_aerosol, &grib_accessor_class_g2_aerosol -g2_chemical, &grib_accessor_class_g2_chemical -g2_eps, &grib_accessor_class_g2_eps -g2_mars_labeling, &grib_accessor_class_g2_mars_labeling -g2bitmap, &grib_accessor_class_g2bitmap -g2bitmap_present, &grib_accessor_class_g2bitmap_present -g2date, &grib_accessor_class_g2date -g2end_step, &grib_accessor_class_g2end_step -g2grid, &grib_accessor_class_g2grid -g2latlon, &grib_accessor_class_g2latlon -g2level, &grib_accessor_class_g2level -g2lon, &grib_accessor_class_g2lon -g2step_range, &grib_accessor_class_g2step_range -gaussian_grid_name, &grib_accessor_class_gaussian_grid_name -gds_is_present, &grib_accessor_class_gds_is_present -gen, &grib_accessor_class_gen -getenv, &grib_accessor_class_getenv -global_gaussian, &grib_accessor_class_global_gaussian -group, &grib_accessor_class_group -gts_header, &grib_accessor_class_gts_header -hash_array, &grib_accessor_class_hash_array -headers_only, &grib_accessor_class_headers_only -ibmfloat, &grib_accessor_class_ibmfloat -ieeefloat, &grib_accessor_class_ieeefloat -ifs_param, &grib_accessor_class_ifs_param -iterator, &grib_accessor_class_iterator -julian_date, &grib_accessor_class_julian_date -julian_day, &grib_accessor_class_julian_day -ksec1expver, &grib_accessor_class_ksec1expver -label, &grib_accessor_class_label -latitudes, &grib_accessor_class_latitudes -latlon_increment, &grib_accessor_class_latlon_increment -latlonvalues, &grib_accessor_class_latlonvalues -library_version, &grib_accessor_class_library_version -local_definition, &grib_accessor_class_local_definition -long, &grib_accessor_class_long -long_vector, &grib_accessor_class_long_vector -longitudes, &grib_accessor_class_longitudes -lookup, &grib_accessor_class_lookup -mars_param, &grib_accessor_class_mars_param -mars_step, &grib_accessor_class_mars_step -md5, &grib_accessor_class_md5 -message, &grib_accessor_class_message -message_copy, &grib_accessor_class_message_copy -multdouble, &grib_accessor_class_multdouble -nearest, &grib_accessor_class_nearest -non_alpha, &grib_accessor_class_non_alpha -number_of_coded_values, &grib_accessor_class_number_of_coded_values -number_of_points, &grib_accessor_class_number_of_points -number_of_points_gaussian, &grib_accessor_class_number_of_points_gaussian -number_of_values, &grib_accessor_class_number_of_values -number_of_values_data_raw_packing, &grib_accessor_class_number_of_values_data_raw_packing -octahedral_gaussian, &grib_accessor_class_octahedral_gaussian -octet_number, &grib_accessor_class_octet_number -offset_file, &grib_accessor_class_offset_file -offset_values, &grib_accessor_class_offset_values -optimal_step_units, &grib_accessor_class_optimal_step_units -pack_bufr_values, &grib_accessor_class_pack_bufr_values -packing_type, &grib_accessor_class_packing_type -pad, &grib_accessor_class_pad -padding, &grib_accessor_class_padding -padto, &grib_accessor_class_padto -padtoeven, &grib_accessor_class_padtoeven -padtomultiple, &grib_accessor_class_padtomultiple -position, &grib_accessor_class_position -proj_string, &grib_accessor_class_proj_string -raw, &grib_accessor_class_raw -rdbtime_guess_date, &grib_accessor_class_rdbtime_guess_date -reference_value_error, &grib_accessor_class_reference_value_error -round, &grib_accessor_class_round -scale, &grib_accessor_class_scale -scale_values, &grib_accessor_class_scale_values -second_order_bits_per_value, &grib_accessor_class_second_order_bits_per_value -section, &grib_accessor_class_section -section_length, &grib_accessor_class_section_length -section_padding, &grib_accessor_class_section_padding -section_pointer, &grib_accessor_class_section_pointer -select_step_template, &grib_accessor_class_select_step_template -sexagesimal2decimal, &grib_accessor_class_sexagesimal2decimal -signed, &grib_accessor_class_signed -signed_bits, &grib_accessor_class_signed_bits -simple_packing_error, &grib_accessor_class_simple_packing_error -size, &grib_accessor_class_size -smart_table, &grib_accessor_class_smart_table -smart_table_column, &grib_accessor_class_smart_table_column -spd, &grib_accessor_class_spd -spectral_truncation, &grib_accessor_class_spectral_truncation -sprintf, &grib_accessor_class_sprintf -statistics, &grib_accessor_class_statistics -statistics_spectral, &grib_accessor_class_statistics_spectral -step_human_readable, &grib_accessor_class_step_human_readable -step_in_units, &grib_accessor_class_step_in_units -sum, &grib_accessor_class_sum -suppressed, &grib_accessor_class_suppressed -time, &grib_accessor_class_time -to_double, &grib_accessor_class_to_double -to_integer, &grib_accessor_class_to_integer -to_string, &grib_accessor_class_to_string -transient, &grib_accessor_class_transient -transient_darray, &grib_accessor_class_transient_darray -trim, &grib_accessor_class_trim -uint16, &grib_accessor_class_uint16 -uint32, &grib_accessor_class_uint32 -uint32_little_endian, &grib_accessor_class_uint32_little_endian -uint64, &grib_accessor_class_uint64 -uint64_little_endian, &grib_accessor_class_uint64_little_endian -uint8, &grib_accessor_class_uint8 -unexpanded_descriptors, &grib_accessor_class_unexpanded_descriptors -unpack_bufr_values, &grib_accessor_class_unpack_bufr_values -unsigned, &grib_accessor_class_unsigned -unsigned_bits, &grib_accessor_class_unsigned_bits -validity_date, &grib_accessor_class_validity_date -validity_time, &grib_accessor_class_validity_time -values, &grib_accessor_class_values -variable, &grib_accessor_class_variable -vector, &grib_accessor_class_vector -when, &grib_accessor_class_when +abstract_long_vector, &grib_accessor_abstract_long_vector +abstract_vector, &grib_accessor_abstract_vector +ascii, &grib_accessor_ascii +bit, &grib_accessor_bit +bitmap, &grib_accessor_bitmap +bits, &grib_accessor_bits +bits_per_value, &grib_accessor_bits_per_value +blob, &grib_accessor_blob +budgdate, &grib_accessor_budgdate +bufr_data_array, &grib_accessor_bufr_data_array +bufr_data_element, &grib_accessor_bufr_data_element +bufr_elements_table, &grib_accessor_bufr_elements_table +bufr_extract_area_subsets, &grib_accessor_bufr_extract_area_subsets +bufr_extract_datetime_subsets, &grib_accessor_bufr_extract_datetime_subsets +bufr_extract_subsets, &grib_accessor_bufr_extract_subsets +bufr_group, &grib_accessor_bufr_group +bufr_simple_thinning, &grib_accessor_bufr_simple_thinning +bufr_string_values, &grib_accessor_bufr_string_values +bufrdc_expanded_descriptors, &grib_accessor_bufrdc_expanded_descriptors +bytes, &grib_accessor_bytes +change_alternative_row_scanning, &grib_accessor_change_alternative_row_scanning +change_scanning_direction, &grib_accessor_change_scanning_direction +check_internal_version, &grib_accessor_check_internal_version +closest_date, &grib_accessor_closest_date +codeflag, &grib_accessor_codeflag +codetable, &grib_accessor_codetable +codetable_title, &grib_accessor_codetable_title +codetable_units, &grib_accessor_codetable_units +concept, &grib_accessor_concept +constant, &grib_accessor_constant +count_file, &grib_accessor_count_file +count_missing, &grib_accessor_count_missing +count_total, &grib_accessor_count_total +data_apply_bitmap, &grib_accessor_data_apply_bitmap +data_apply_boustrophedonic, &grib_accessor_data_apply_boustrophedonic +data_apply_boustrophedonic_bitmap, &grib_accessor_data_apply_boustrophedonic_bitmap +data_ccsds_packing, &grib_accessor_data_ccsds_packing +data_complex_packing, &grib_accessor_data_complex_packing +data_dummy_field, &grib_accessor_data_dummy_field +data_g1complex_packing, &grib_accessor_data_g1complex_packing +data_g1second_order_constant_width_packing, &grib_accessor_data_g1second_order_constant_width_packing +data_g1second_order_general_extended_packing, &grib_accessor_data_g1second_order_general_extended_packing +data_g1second_order_general_packing, &grib_accessor_data_g1second_order_general_packing +data_g1second_order_row_by_row_packing, &grib_accessor_data_g1second_order_row_by_row_packing +data_g1secondary_bitmap, &grib_accessor_data_g1secondary_bitmap +data_g1shsimple_packing, &grib_accessor_data_g1shsimple_packing +data_g1simple_packing, &grib_accessor_data_g1simple_packing +data_g22order_packing, &grib_accessor_data_g22order_packing +data_g2bifourier_packing, &grib_accessor_data_g2bifourier_packing +data_g2complex_packing, &grib_accessor_data_g2complex_packing +data_g2secondary_bitmap, &grib_accessor_data_g2secondary_bitmap +data_g2shsimple_packing, &grib_accessor_data_g2shsimple_packing +data_g2simple_packing, &grib_accessor_data_g2simple_packing +data_g2simple_packing_with_preprocessing, &grib_accessor_data_g2simple_packing_with_preprocessing +data_jpeg2000_packing, &grib_accessor_data_jpeg2000_packing +data_png_packing, &grib_accessor_data_png_packing +data_raw_packing, &grib_accessor_data_raw_packing +data_run_length_packing, &grib_accessor_data_run_length_packing +data_secondary_bitmap, &grib_accessor_data_secondary_bitmap +data_sh_packed, &grib_accessor_data_sh_packed +data_sh_unpacked, &grib_accessor_data_sh_unpacked +data_shsimple_packing, &grib_accessor_data_shsimple_packing +data_simple_packing, &grib_accessor_data_simple_packing +decimal_precision, &grib_accessor_decimal_precision +dictionary, &grib_accessor_dictionary +dirty, &grib_accessor_dirty +divdouble, &grib_accessor_divdouble +double, &grib_accessor_double +element, &grib_accessor_element +evaluate, &grib_accessor_evaluate +expanded_descriptors, &grib_accessor_expanded_descriptors +from_scale_factor_scaled_value, &grib_accessor_from_scale_factor_scaled_value +g1_half_byte_codeflag, &grib_accessor_g1_half_byte_codeflag +g1_message_length, &grib_accessor_g1_message_length +g1_section4_length, &grib_accessor_g1_section4_length +g1bitmap, &grib_accessor_g1bitmap +g1date, &grib_accessor_g1date +g1day_of_the_year_date, &grib_accessor_g1day_of_the_year_date +g1end_of_interval_monthly, &grib_accessor_g1end_of_interval_monthly +g1fcperiod, &grib_accessor_g1fcperiod +g1forecastmonth, &grib_accessor_g1forecastmonth +g1monthlydate, &grib_accessor_g1monthlydate +g1number_of_coded_values_sh_complex, &grib_accessor_g1number_of_coded_values_sh_complex +g1number_of_coded_values_sh_simple, &grib_accessor_g1number_of_coded_values_sh_simple +g1step_range, &grib_accessor_g1step_range +g1verificationdate, &grib_accessor_g1verificationdate +g2_aerosol, &grib_accessor_g2_aerosol +g2_chemical, &grib_accessor_g2_chemical +g2_eps, &grib_accessor_g2_eps +g2_mars_labeling, &grib_accessor_g2_mars_labeling +g2bitmap, &grib_accessor_g2bitmap +g2bitmap_present, &grib_accessor_g2bitmap_present +g2date, &grib_accessor_g2date +g2end_step, &grib_accessor_g2end_step +g2grid, &grib_accessor_g2grid +g2latlon, &grib_accessor_g2latlon +g2level, &grib_accessor_g2level +g2lon, &grib_accessor_g2lon +g2step_range, &grib_accessor_g2step_range +gaussian_grid_name, &grib_accessor_gaussian_grid_name +gds_is_present, &grib_accessor_gds_is_present +gen, &grib_accessor_gen +getenv, &grib_accessor_getenv +global_gaussian, &grib_accessor_global_gaussian +group, &grib_accessor_group +gts_header, &grib_accessor_gts_header +hash_array, &grib_accessor_hash_array +headers_only, &grib_accessor_headers_only +ibmfloat, &grib_accessor_ibmfloat +ieeefloat, &grib_accessor_ieeefloat +ifs_param, &grib_accessor_ifs_param +iterator, &grib_accessor_iterator +julian_date, &grib_accessor_julian_date +julian_day, &grib_accessor_julian_day +ksec1expver, &grib_accessor_ksec1expver +label, &grib_accessor_label +latitudes, &grib_accessor_latitudes +latlon_increment, &grib_accessor_latlon_increment +latlonvalues, &grib_accessor_latlonvalues +library_version, &grib_accessor_library_version +local_definition, &grib_accessor_local_definition +long, &grib_accessor_long +long_vector, &grib_accessor_long_vector +longitudes, &grib_accessor_longitudes +lookup, &grib_accessor_lookup +mars_param, &grib_accessor_mars_param +mars_step, &grib_accessor_mars_step +md5, &grib_accessor_md5 +message, &grib_accessor_message +message_copy, &grib_accessor_message_copy +multdouble, &grib_accessor_multdouble +nearest, &grib_accessor_nearest +non_alpha, &grib_accessor_non_alpha +number_of_coded_values, &grib_accessor_number_of_coded_values +number_of_points, &grib_accessor_number_of_points +number_of_points_gaussian, &grib_accessor_number_of_points_gaussian +number_of_values, &grib_accessor_number_of_values +number_of_values_data_raw_packing, &grib_accessor_number_of_values_data_raw_packing +octahedral_gaussian, &grib_accessor_octahedral_gaussian +octet_number, &grib_accessor_octet_number +offset_file, &grib_accessor_offset_file +offset_values, &grib_accessor_offset_values +optimal_step_units, &grib_accessor_optimal_step_units +pack_bufr_values, &grib_accessor_pack_bufr_values +packing_type, &grib_accessor_packing_type +pad, &grib_accessor_pad +padding, &grib_accessor_padding +padto, &grib_accessor_padto +padtoeven, &grib_accessor_padtoeven +padtomultiple, &grib_accessor_padtomultiple +position, &grib_accessor_position +proj_string, &grib_accessor_proj_string +raw, &grib_accessor_raw +rdbtime_guess_date, &grib_accessor_rdbtime_guess_date +reference_value_error, &grib_accessor_reference_value_error +round, &grib_accessor_round +scale, &grib_accessor_scale +scale_values, &grib_accessor_scale_values +second_order_bits_per_value, &grib_accessor_second_order_bits_per_value +section, &grib_accessor_section +section_length, &grib_accessor_section_length +section_padding, &grib_accessor_section_padding +section_pointer, &grib_accessor_section_pointer +select_step_template, &grib_accessor_select_step_template +sexagesimal2decimal, &grib_accessor_sexagesimal2decimal +signed, &grib_accessor_signed +signed_bits, &grib_accessor_signed_bits +simple_packing_error, &grib_accessor_simple_packing_error +size, &grib_accessor_size +smart_table, &grib_accessor_smart_table +smart_table_column, &grib_accessor_smart_table_column +spd, &grib_accessor_spd +spectral_truncation, &grib_accessor_spectral_truncation +sprintf, &grib_accessor_sprintf +statistics, &grib_accessor_statistics +statistics_spectral, &grib_accessor_statistics_spectral +step_human_readable, &grib_accessor_step_human_readable +step_in_units, &grib_accessor_step_in_units +sum, &grib_accessor_sum +suppressed, &grib_accessor_suppressed +time, &grib_accessor_time +to_double, &grib_accessor_to_double +to_integer, &grib_accessor_to_integer +to_string, &grib_accessor_to_string +transient, &grib_accessor_transient +transient_darray, &grib_accessor_transient_darray +trim, &grib_accessor_trim +uint16, &grib_accessor_uint16 +uint32, &grib_accessor_uint32 +uint32_little_endian, &grib_accessor_uint32_little_endian +uint64, &grib_accessor_uint64 +uint64_little_endian, &grib_accessor_uint64_little_endian +uint8, &grib_accessor_uint8 +unexpanded_descriptors, &grib_accessor_unexpanded_descriptors +unpack_bufr_values, &grib_accessor_unpack_bufr_values +unsigned, &grib_accessor_unsigned +unsigned_bits, &grib_accessor_unsigned_bits +validity_date, &grib_accessor_validity_date +validity_time, &grib_accessor_validity_time +values, &grib_accessor_values +variable, &grib_accessor_variable +vector, &grib_accessor_vector +when, &grib_accessor_when +cf_var_name, &grib_accessor_cf_var_name diff --git a/src/grib_api.h b/src/grib_api.h index cd035ea9b..4c633043f 100644 --- a/src/grib_api.h +++ b/src/grib_api.h @@ -815,13 +815,14 @@ int grib_get_float_elements(const grib_handle* h, const char* key, const int* in * Get a string value from a key, if several keys of the same name are present, the last one is returned * @see grib_set_string * - * @param h : the handle to get the data from - * @param key : the key to be searched - * @param mesg : the address of a string where the data will be retrieved - * @param length : the address of a size_t that contains allocated length of the string on input, and that contains the actual length of the string on output - * @return 0 if OK, integer value on error + * @param h : the handle to get the data from + * @param key : the key to be searched + * @param value : the address of a string where the data will be retrieved + * @param length : the address of a size_t that contains allocated length of the string on input, + * and that contains the actual length of the string on output + * @return 0 if OK, integer value on error */ -int grib_get_string(const grib_handle* h, const char* key, char* mesg, size_t* length); +int grib_get_string(const grib_handle* h, const char* key, char* value, size_t* length); /** * Get string array values from a key. If several keys of the same name are present, the last one is returned @@ -912,11 +913,12 @@ int grib_set_double(grib_handle* h, const char* key, double val); * * @param h : the handle to set the data to * @param key : the key to be searched - * @param mesg : the address of a string where the data will be read - * @param length : the address of a size_t that contains the length of the string on input, and that contains the actual packed length of the string on output + * @param value : the address of a string where the data will be read + * @param length : the address of a size_t that contains the length of the string on input, + * and that contains the actual packed length of the string on output * @return 0 if OK, integer value on error */ -int grib_set_string(grib_handle* h, const char* key, const char* mesg, size_t* length); +int grib_set_string(grib_handle* h, const char* key, const char* value, size_t* length); /** * Set a bytes array from a key. If several keys of the same name are present, the last one is set @@ -1103,7 +1105,7 @@ typedef int (*grib_data_eof_proc)(const grib_context* c, void* stream); /** * Get the static default context * - * @return the default context, NULL it the context is not available + * @return the default context, NULL if the context is not available */ grib_context* grib_context_get_default(void); @@ -1143,7 +1145,7 @@ void grib_gribex_mode_on(grib_context* c); * * @param c : the context */ -int grib_get_gribex_mode(grib_context* c); +int grib_get_gribex_mode(const grib_context* c); /** * Set the GRIBEX mode off. @@ -1170,6 +1172,7 @@ void grib_context_set_definitions_path(grib_context* c, const char* path); void grib_context_set_samples_path(grib_context* c, const char* path); void grib_context_set_debug(grib_context* c, int mode); +void grib_context_set_data_quality_checks(grib_context* c, int val); /** * Sets memory procedures of the context diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h index dc0742d8a..b093c2e6c 100644 --- a/src/grib_api_internal.h +++ b/src/grib_api_internal.h @@ -248,7 +248,14 @@ typedef struct grib_codetable grib_codetable; typedef struct grib_smart_table grib_smart_table; class grib_accessor; -typedef struct grib_iterator_class grib_iterator_class; +namespace eccodes::geo_iterator { +class Iterator; +} + +typedef struct grib_iterator { + eccodes::geo_iterator::Iterator* iterator; +} grib_iterator; + typedef struct grib_nearest_class grib_nearest_class; typedef struct grib_dumper grib_dumper; typedef struct grib_dumper_class grib_dumper_class; @@ -267,14 +274,6 @@ typedef int (*nearest_find_proc)(grib_nearest* nearest, grib_handle* h, double* distances, int* indexes, size_t* len); typedef int (*nearest_destroy_proc)(grib_nearest* nearest); -typedef void (*iterator_init_class_proc)(grib_iterator_class*); -typedef int (*iterator_init_proc)(grib_iterator* i, grib_handle*, grib_arguments*); - -typedef int (*iterator_next_proc)(grib_iterator* i, double* lat, double* lon, double* val); -typedef int (*iterator_previous_proc)(grib_iterator* i, double* lat, double* lon, double* val); -typedef int (*iterator_reset_proc)(grib_iterator* i); -typedef int (*iterator_destroy_proc)(grib_iterator* i); -typedef long (*iterator_has_next_proc)(grib_iterator* i); typedef int (*grib_pack_proc)(grib_handle* h, const double* in, size_t inlen, void* out, size_t* outlen); typedef int (*grib_unpack_proc)(grib_handle* h, const void* in, size_t inlen, double* out, size_t* outlen); @@ -459,21 +458,6 @@ struct grib_section size_t padding; }; -struct grib_iterator_class -{ - grib_iterator_class** super; - const char* name; - size_t size; - int inited; - iterator_init_class_proc init_class; - iterator_init_proc init; - iterator_destroy_proc destroy; - iterator_next_proc next; - iterator_previous_proc previous; - iterator_reset_proc reset; - iterator_has_next_proc has_next; -}; - struct grib_nearest_class { grib_nearest_class** super; @@ -529,22 +513,9 @@ struct grib_dumper_class dumper_footer_proc footer; }; -struct grib_iterator -{ - grib_arguments* args; /** args of iterator */ - grib_handle* h; - long e; /** current element */ - size_t nv; /** number of values */ - double* data; /** data values */ - grib_iterator_class* cclass; - unsigned long flags; -}; - struct grib_nearest { - grib_arguments* args; /** args of iterator */ grib_handle* h; - grib_context* context; double* values; size_t values_count; grib_nearest_class* cclass; @@ -578,7 +549,6 @@ struct grib_sarray size_t size; /* capacity */ size_t n; /* used size */ size_t incsize; - grib_context* context; }; /* Dynamic array of objects (void*) */ @@ -588,7 +558,6 @@ struct grib_oarray size_t size; /* capacity */ size_t n; /* used size */ size_t incsize; - grib_context* context; }; /* Dynamic array of doubles */ @@ -598,7 +567,6 @@ struct grib_darray size_t size; /* capacity */ size_t n; /* used size */ size_t incsize; - grib_context* context; }; /* Dynamic array of integers (long) */ @@ -609,7 +577,6 @@ struct grib_iarray size_t n; /* used size */ size_t incsize; size_t number_of_pop_front; - grib_context* context; }; /* Dynamic array of double arrays */ @@ -619,7 +586,6 @@ struct grib_vdarray size_t size; /* capacity */ size_t n; /* used size */ size_t incsize; - grib_context* context; }; /* Dynamic array of string arrays */ @@ -629,7 +595,6 @@ struct grib_vsarray size_t size; /* capacity */ size_t n; /* used size */ size_t incsize; - grib_context* context; }; /* Dynamic array of integer arrays */ @@ -639,7 +604,6 @@ struct grib_viarray size_t size; /* capacity */ size_t n; /* used size */ size_t incsize; - grib_context* context; }; /* types of BUFR descriptors used in bufr_descriptor->type*/ @@ -975,13 +939,11 @@ typedef struct grib_int_array grib_int_array; struct grib_where { - grib_context* context; char* string; }; struct grib_column { - grib_context* context; int refcount; char* name; int type; @@ -1287,6 +1249,7 @@ typedef struct j2k_encode_helper } #include "accessor/grib_accessor.h" #include "accessor/grib_accessors_list.h" +#include "geo_iterator/grib_iterator.h" #endif #endif diff --git a/src/grib_buffer.cc b/src/grib_buffer.cc index cb313141c..ca84ce7bb 100644 --- a/src/grib_buffer.cc +++ b/src/grib_buffer.cc @@ -118,9 +118,9 @@ void grib_buffer_set_ulength(const grib_context* c, grib_buffer* b, size_t lengt static void update_offsets(grib_accessor* a, long len) { while (a) { - grib_section* s = a->sub_section; - a->offset += len; - grib_context_log(a->context, GRIB_LOG_DEBUG, "::::: grib_buffer : accessor %s is moving by %d bytes to %ld", a->name, len, a->offset); + grib_section* s = a->sub_section_; + a->offset_ += len; + grib_context_log(a->context_, GRIB_LOG_DEBUG, "::::: grib_buffer : accessor %s is moving by %d bytes to %ld", a->name_, len, a->offset_); if (s) update_offsets(s->block->first, len); a = a->next_; @@ -131,7 +131,7 @@ static void update_offsets_after(grib_accessor* a, long len) { while (a) { update_offsets(a->next_, len); - a = a->parent->owner; + a = a->parent_->owner; } } @@ -198,18 +198,18 @@ static void update_offsets_after(grib_accessor* a, long len) int grib_buffer_replace(grib_accessor* a, const unsigned char* data, size_t newsize, int update_lengths, int update_paddings) { - size_t offset = a->offset; + size_t offset = a->offset_; long oldsize = a->get_next_position_offset() - offset; long increase = (long)newsize - (long)oldsize; grib_buffer* buffer = grib_handle_of_accessor(a)->buffer; size_t message_length = buffer->ulength; - grib_context_log(a->context, GRIB_LOG_DEBUG, + grib_context_log(a->context_, GRIB_LOG_DEBUG, "grib_buffer_replace %s offset=%ld oldsize=%ld newsize=%ld message_length=%ld update_paddings=%d", - a->name, (long)offset, oldsize, (long)newsize, (long)message_length, update_paddings); + a->name_, (long)offset, oldsize, (long)newsize, (long)message_length, update_paddings); - grib_buffer_set_ulength(a->context, + grib_buffer_set_ulength(a->context_, buffer, buffer->ulength + increase); diff --git a/src/grib_bufr_descriptor.cc b/src/grib_bufr_descriptor.cc index 6b7f2b3ce..3f83f6ec7 100644 --- a/src/grib_bufr_descriptor.cc +++ b/src/grib_bufr_descriptor.cc @@ -17,7 +17,7 @@ bufr_descriptor* grib_bufr_descriptor_new(grib_accessor* tables_accessor, int co { bufr_descriptor* ret = accessor_bufr_elements_table_get_descriptor(tables_accessor, code, err); if (!silent && *err) - grib_context_log(tables_accessor->context, GRIB_LOG_ERROR, + grib_context_log(tables_accessor->context_, GRIB_LOG_ERROR, "unable to get descriptor %06d from table", code); return ret; } diff --git a/src/grib_bufr_descriptors_array.cc b/src/grib_bufr_descriptors_array.cc index 637cf14eb..a52e130e1 100644 --- a/src/grib_bufr_descriptors_array.cc +++ b/src/grib_bufr_descriptors_array.cc @@ -13,12 +13,11 @@ #define DYN_ARRAY_SIZE_INIT 200 /* Initial size for grib_bufr_descriptors_array_new */ #define DYN_ARRAY_SIZE_INCR 400 /* Increment size for the above */ -bufr_descriptors_array* grib_bufr_descriptors_array_new(grib_context* c, size_t size, size_t incsize) +bufr_descriptors_array* grib_bufr_descriptors_array_new(size_t size, size_t incsize) { bufr_descriptors_array* v = NULL; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v = (bufr_descriptors_array*)grib_context_malloc(c, sizeof(bufr_descriptors_array)); if (!v) { @@ -100,7 +99,7 @@ bufr_descriptors_array* grib_bufr_descriptors_array_push(bufr_descriptors_array* if (!v) { size_t start_size = DYN_ARRAY_SIZE_INIT; size_t start_incsize = DYN_ARRAY_SIZE_INCR; - v = grib_bufr_descriptors_array_new(0, start_size, start_incsize); + v = grib_bufr_descriptors_array_new(start_size, start_incsize); } if (v->n >= v->size - v->number_of_pop_front) @@ -119,7 +118,7 @@ bufr_descriptors_array* grib_bufr_descriptors_array_append(bufr_descriptors_arra if (!v) { size_t start_size = DYN_ARRAY_SIZE_INIT; size_t start_incsize = DYN_ARRAY_SIZE_INCR; - v = grib_bufr_descriptors_array_new(0, start_size, start_incsize); + v = grib_bufr_descriptors_array_new(start_size, start_incsize); } for (i = 0; i < ar->n; i++) { @@ -139,7 +138,7 @@ bufr_descriptors_array* grib_bufr_descriptors_array_append(bufr_descriptors_arra // if (!v) { // size_t start_size = DYN_ARRAY_SIZE_INIT; // size_t start_incsize = DYN_ARRAY_SIZE_INCR; -// v = grib_bufr_descriptors_array_new(0, start_size, start_incsize); +// v = grib_bufr_descriptors_array_new(start_size, start_incsize); // } // if (v->number_of_pop_front) { // v->v--; diff --git a/src/grib_context.cc b/src/grib_context.cc index 98ffe39e2..17adcc312 100644 --- a/src/grib_context.cc +++ b/src/grib_context.cc @@ -241,6 +241,17 @@ void grib_context_set_print_proc(grib_context* c, grib_print_proc p) c->print = (p ? p : &default_print); } +void grib_context_set_data_quality_checks(grib_context* c, int val) +{ + c = c ? c : grib_context_get_default(); + // If val == 0, disable data quality checks + // If val == 1, failure results in an error + // If val == 2, failure results in a warning + Assert(val == 0 || val == 1 || val == 2); + + c->grib_data_quality_checks = val; +} + void grib_context_set_debug(grib_context* c, int mode) { c = c ? c : grib_context_get_default(); @@ -661,20 +672,19 @@ static int init_definition_files_dir(grib_context* c) } else { /* Definitions path contains multiple directories */ - char* dir = NULL; - dir = strtok_r(path, ECC_PATH_DELIMITER_STR, &lasts); + const char* dir = strtok_r(path, ECC_PATH_DELIMITER_STR, &lasts); while (dir != NULL) { if (next) { next->next = (grib_string_list*)grib_context_malloc_clear_persistent(c, sizeof(grib_string_list)); - next = next->next; + next = next->next; } else { c->grib_definition_files_dir = (grib_string_list*)grib_context_malloc_clear_persistent(c, sizeof(grib_string_list)); - next = c->grib_definition_files_dir; + next = c->grib_definition_files_dir; } next->value = codes_resolve_path(c, dir); - dir = strtok_r(NULL, ECC_PATH_DELIMITER_STR, &lasts); + dir = strtok_r(NULL, ECC_PATH_DELIMITER_STR, &lasts); } } @@ -811,14 +821,14 @@ void grib_context_reset(grib_context* c) if (c->grib_definition_files_dir) { grib_string_list* next = c->grib_definition_files_dir; - grib_string_list* cur = NULL; + grib_string_list* cur = NULL; while (next) { cur = next; next = next->next; grib_context_free(c, cur->value); grib_context_free(c, cur); } - c->grib_definition_files_dir=0; + c->grib_definition_files_dir = 0; } if (c->multi_support_on) @@ -855,7 +865,7 @@ void grib_context_delete(grib_context* c) c->hash_array_count = 0; grib_itrie_delete(c->hash_array_index); c->hash_array_index=0; - grib_trie_delete(c->expanded_descriptors); + grib_trie_delete_container(c->expanded_descriptors); c->expanded_descriptors=0; c->inited = 0; @@ -1017,6 +1027,7 @@ void* grib_context_buffer_malloc_clear(const grib_context* c, size_t size) void grib_context_set_memory_proc(grib_context* c, grib_malloc_proc m, grib_free_proc f, grib_realloc_proc r) { + fprintf(stderr, "ECCODES WARNING : The %s function is deprecated and will be removed in a future release.\n", __func__); c->free_mem = f; c->alloc_mem = m; c->realloc_mem = r; @@ -1024,12 +1035,14 @@ void grib_context_set_memory_proc(grib_context* c, grib_malloc_proc m, grib_free void grib_context_set_persistent_memory_proc(grib_context* c, grib_malloc_proc m, grib_free_proc f) { + fprintf(stderr, "ECCODES WARNING : The %s function is deprecated and will be removed in a future release.\n", __func__); c->free_persistent_mem = f; c->alloc_persistent_mem = m; } void grib_context_set_buffer_memory_proc(grib_context* c, grib_malloc_proc m, grib_free_proc f, grib_realloc_proc r) { + fprintf(stderr, "ECCODES WARNING : The %s function is deprecated and will be removed in a future release.\n", __func__); c->free_buffer_mem = f; c->alloc_buffer_mem = m; c->realloc_buffer_mem = r; @@ -1233,7 +1246,7 @@ void codes_assertion_failed(const char* message, const char* file, int line) /* Default behaviour is to abort * unless user has supplied his own assertion routine */ if (assertion == NULL) { - grib_context* c = grib_context_get_default(); + const grib_context* c = grib_context_get_default(); fprintf(stderr, "ecCodes assertion failed: `%s' in %s:%d\n", message, file, line); if (!c->no_abort) { abort(); @@ -1246,7 +1259,7 @@ void codes_assertion_failed(const char* message, const char* file, int line) } } -int grib_get_gribex_mode(grib_context* c) +int grib_get_gribex_mode(const grib_context* c) { if (!c) c = grib_context_get_default(); diff --git a/src/grib_darray.cc b/src/grib_darray.cc index 5aac8265a..7f94fbb87 100644 --- a/src/grib_darray.cc +++ b/src/grib_darray.cc @@ -22,27 +22,22 @@ void grib_darray_print(const char* title, const grib_darray* darray) printf("\n"); } -// grib_darray* grib_darray_new_from_array(grib_context* c, double* src_array, size_t size) +// grib_darray* grib_darray_new_from_array(double* src_array, size_t size) // { // size_t i; // grib_darray* v; - -// if (!c) -// c = grib_context_get_default(); - +// c = grib_context_get_default(); // v = grib_darray_new(c, size, 100); // for (i = 0; i < size; i++) // v->v[i] = src_array[i]; // v->n = size; -// v->context = c; // return v; // } -grib_darray* grib_darray_new(grib_context* c, size_t size, size_t incsize) +grib_darray* grib_darray_new(size_t size, size_t incsize) { grib_darray* v = NULL; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v = (grib_darray*)grib_context_malloc_clear(c, sizeof(grib_darray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_darray)); @@ -51,7 +46,6 @@ grib_darray* grib_darray_new(grib_context* c, size_t size, size_t incsize) v->size = size; v->n = 0; v->incsize = incsize; - v->context = c; v->v = (double*)grib_context_malloc_clear(c, sizeof(double) * size); if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(double) * size); @@ -63,9 +57,7 @@ grib_darray* grib_darray_new(grib_context* c, size_t size, size_t incsize) static grib_darray* grib_darray_resize(grib_darray* v) { const size_t newsize = v->incsize + v->size; - grib_context* c = v->context; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v->v = (double*)grib_context_realloc(c, v->v, newsize * sizeof(double)); v->size = newsize; @@ -77,12 +69,13 @@ static grib_darray* grib_darray_resize(grib_darray* v) return v; } -grib_darray* grib_darray_push(grib_context* c, grib_darray* v, double val) +grib_darray* grib_darray_push(grib_darray* v, double val) { size_t start_size = 100; size_t start_incsize = 100; + if (!v) - v = grib_darray_new(c, start_size, start_incsize); + v = grib_darray_new(start_size, start_incsize); if (v->n >= v->size) v = grib_darray_resize(v); @@ -91,12 +84,11 @@ grib_darray* grib_darray_push(grib_context* c, grib_darray* v, double val) return v; } -void grib_darray_delete(grib_context* c, grib_darray* v) +void grib_darray_delete(grib_darray* v) { if (!v) return; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); if (v->v) grib_context_free(c, v->v); grib_context_free(c, v); diff --git a/src/grib_dependency.cc b/src/grib_dependency.cc index 37c89dbbf..268ffa315 100644 --- a/src/grib_dependency.cc +++ b/src/grib_dependency.cc @@ -15,11 +15,11 @@ grib_handle* grib_handle_of_accessor(const grib_accessor* a) { - if (a->parent == NULL) { - return a->h; + if (a->parent_ == NULL) { + return a->h_; } else { - return a->parent->h; + return a->parent_->h; } } @@ -31,10 +31,10 @@ static grib_handle* handle_of(grib_accessor* observed) /* printf("+++++ %s = %p\n",observed->name,observed); */ /* printf("+++++ h=%p\n",observed->h); */ /* special case for BUFR attributes parentless */ - if (observed->parent == NULL) { - return observed->h; + if (observed->parent_ == NULL) { + return observed->h_; } - h = observed->parent->h; + h = observed->parent_->h; while (h->main) h = h->main; return h; diff --git a/src/grib_dumper.cc b/src/grib_dumper.cc index bfebdc2d3..6f9f48e67 100644 --- a/src/grib_dumper.cc +++ b/src/grib_dumper.cc @@ -84,7 +84,6 @@ void grib_dump_long(grib_dumper* d, grib_accessor* a, const char* comment) } c = c->super ? *(c->super) : NULL; } - Assert(0); } void grib_dump_double(grib_dumper* d, grib_accessor* a, const char* comment) @@ -97,7 +96,6 @@ void grib_dump_double(grib_dumper* d, grib_accessor* a, const char* comment) } c = c->super ? *(c->super) : NULL; } - Assert(0); } void grib_dump_string(grib_dumper* d, grib_accessor* a, const char* comment) @@ -110,7 +108,6 @@ void grib_dump_string(grib_dumper* d, grib_accessor* a, const char* comment) } c = c->super ? *(c->super) : NULL; } - Assert(0); } void grib_dump_string_array(grib_dumper* d, grib_accessor* a, const char* comment) @@ -123,7 +120,6 @@ void grib_dump_string_array(grib_dumper* d, grib_accessor* a, const char* commen } c = c->super ? *(c->super) : NULL; } - Assert(0); } void grib_dump_label(grib_dumper* d, grib_accessor* a, const char* comment) @@ -136,7 +132,6 @@ void grib_dump_label(grib_dumper* d, grib_accessor* a, const char* comment) } c = c->super ? *(c->super) : NULL; } - Assert(0); } void grib_dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) @@ -149,7 +144,6 @@ void grib_dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) } c = c->super ? *(c->super) : NULL; } - Assert(0); } void grib_dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) @@ -162,7 +156,6 @@ void grib_dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) } c = c->super ? *(c->super) : NULL; } - Assert(0); } void grib_dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) @@ -175,7 +168,6 @@ void grib_dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors } c = c->super ? *(c->super) : NULL; } - Assert(0); } void grib_dump_values(grib_dumper* d, grib_accessor* a) @@ -188,7 +180,6 @@ void grib_dump_values(grib_dumper* d, grib_accessor* a) } c = c->super ? *(c->super) : NULL; } - Assert(0); } void grib_dump_header(grib_dumper* d, const grib_handle* ch) diff --git a/src/grib_dumper_class_bufr_decode_C.cc b/src/grib_dumper_class_bufr_decode_C.cc index 6811cdf94..f1c1515e4 100644 --- a/src/grib_dumper_class_bufr_decode_C.cc +++ b/src/grib_dumper_class_bufr_decode_C.cc @@ -144,10 +144,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int r = 0; long count = 0; char* sval; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -168,19 +168,19 @@ static void dump_values(grib_dumper* d, grib_accessor* a) depth -= 2; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " CODES_CHECK(codes_get_double_array(h, \"#%d#%s\",dValues, &size), 0);\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " CODES_CHECK(codes_get_double_array(h, \"#%d#%s\",dValues, &size), 0);\n", r, a->name_); else - fprintf(self->dumper.out, " CODES_CHECK(codes_get_double_array(h, \"%s\", dValues, &size), 0);\n", a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_double_array(h, \"%s\", dValues, &size), 0);\n", a->name_); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_double(a, value)) { sval = dval_to_string(c, value); if (r != 0) - fprintf(self->dumper.out, " CODES_CHECK(codes_get_double(h, \"#%d#%s\", &dVal), 0);\n", r, a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_double(h, \"#%d#%s\", &dVal), 0);\n", r, a->name_); else - fprintf(self->dumper.out, " CODES_CHECK(codes_get_double(h, \"%s\", &dVal), 0);\n", a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_double(h, \"%s\", &dVal), 0);\n", a->name_); grib_context_free(c, sval); } @@ -191,12 +191,12 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -215,9 +215,9 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* int err = 0; long count = 0; char* sval; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -238,13 +238,13 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* depth -= 2; - fprintf(self->dumper.out, " CODES_CHECK(codes_get_double_array(h, \"%s->%s\", dValues, &size), 0);\n", prefix, a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_double_array(h, \"%s->%s\", dValues, &size), 0);\n", prefix, a->name_); } else { - /* int r=compute_bufr_key_rank(h,self->keys,a->name); */ + /* int r=compute_bufr_key_rank(h,self->keys,a->name_); */ if (!grib_is_missing_double(a, value)) { sval = dval_to_string(c, value); - fprintf(self->dumper.out, " CODES_CHECK(codes_get_double(h, \"%s->%s\", &dVal), 0);\n", prefix, a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_double(h, \"%s->%s\", &dVal), 0);\n", prefix, a->name_); grib_context_free(c, sval); } @@ -253,8 +253,8 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -273,28 +273,28 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int err = 0; int r = 0; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; a->value_count(&count); size = count; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { if (self->isLeaf == 0) { char* prefix; int dofree = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -319,19 +319,19 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) depth -= 2; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " CODES_CHECK(codes_get_long_array(h, \"#%d#%s\", iValues, &size), 0);\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " CODES_CHECK(codes_get_long_array(h, \"#%d#%s\", iValues, &size), 0);\n", r, a->name_); else - fprintf(self->dumper.out, " CODES_CHECK(codes_get_long_array(h, \"%s\", iValues, &size), 0);\n", a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_long_array(h, \"%s\", iValues, &size), 0);\n", a->name_); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); - if (!codes_bufr_key_exclude_from_dump(a->name)) { + r = compute_bufr_key_rank(h, self->keys, a->name_); + if (!codes_bufr_key_exclude_from_dump(a->name_)) { if (!grib_is_missing_long(a, value)) { if (r != 0) - fprintf(self->dumper.out, " CODES_CHECK(codes_get_long(h, \"#%d#%s\", &iVal), 0);\n", r, a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_long(h, \"#%d#%s\", &iVal), 0);\n", r, a->name_); else - fprintf(self->dumper.out, " CODES_CHECK(codes_get_long(h, \"%s\", &iVal), 0);\n", a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_long(h, \"%s\", &iVal), 0);\n", a->name_); } } } @@ -341,12 +341,12 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -363,9 +363,9 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr size_t size = 0; int err = 0; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -386,13 +386,13 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr depth -= 2; - fprintf(self->dumper.out, " CODES_CHECK(codes_get_long_array(h, \"%s->%s\", iValues, &size), 0);\n", prefix, a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_long_array(h, \"%s->%s\", iValues, &size), 0);\n", prefix, a->name_); } else { - /* int r=compute_bufr_key_rank(h,self->keys,a->name); */ + /* int r=compute_bufr_key_rank(h,self->keys,a->name_); */ if (!codes_bufr_key_exclude_from_dump(prefix)) { if (!grib_is_missing_long(a, value)) { - fprintf(self->dumper.out, " CODES_CHECK(codes_get_long(h, \"%s->%s\", &iVal), 0);\n", prefix, a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_long(h, \"%s->%s\", &iVal), 0);\n", prefix, a->name_); } } } @@ -400,8 +400,8 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -425,19 +425,19 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); grib_context* c = h->context; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->unpack_double(&value, &size); self->empty = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_double(a, value)) { sval = dval_to_string(c, value); if (r != 0) - fprintf(self->dumper.out, " CODES_CHECK(codes_get_double(h, \"#%d#%s\", &dVal), 0);\n", r, a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_double(h, \"#%d#%s\", &dVal), 0);\n", r, a->name_); else - fprintf(self->dumper.out, " CODES_CHECK(codes_get_double(h, \"%s\", &dVal), 0);\n", a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_double(h, \"%s\", &dVal), 0);\n", a->name_); grib_context_free(c, sval); } @@ -447,12 +447,12 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -472,9 +472,9 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int r = 0; grib_handle* h = grib_handle_of_accessor(a); - c = a->context; + c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -500,10 +500,10 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm err = a->unpack_string_array(values, &size); if (self->isLeaf == 0) { - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " codes_get_string_array(h, \"#%d#%s\", sValues, &size);\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " codes_get_string_array(h, \"#%d#%s\", sValues, &size);\n", r, a->name_); else - fprintf(self->dumper.out, " codes_get_string_array(h, \"%s\", sValues, &size);\n", a->name); + fprintf(self->dumper.out, " codes_get_string_array(h, \"%s\", sValues, &size);\n", a->name_); } if (self->isLeaf == 0) { @@ -511,12 +511,12 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -536,18 +536,18 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char value[MAX_STRING_SIZE] = {0,}; /* See ECC-710 */ size_t size = MAX_STRING_SIZE; char* p = NULL; - grib_context* c = a->context; + grib_context* c = a->context_; int r = 0, err = 0; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; self->empty = 0; err = a->unpack_string(value, &size); p = value; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (grib_is_missing_string(a, (unsigned char*)value, size)) { return; } @@ -562,9 +562,9 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (self->isLeaf == 0) { depth += 2; if (r != 0) - fprintf(self->dumper.out, " CODES_CHECK(codes_get_string(h, \"#%d#%s\", sVal, &size), 0);\n", r, a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_string(h, \"#%d#%s\", sVal, &size), 0);\n", r, a->name_); else - fprintf(self->dumper.out, " CODES_CHECK(codes_get_string(h, \"%s\", sVal, &size), 0);\n", a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_get_string(h, \"%s\", sVal, &size), 0);\n", a->name_); } if (self->isLeaf == 0) { @@ -572,12 +572,12 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -613,9 +613,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_decode_C* self = (grib_dumper_bufr_decode_C*)d; - if (strcmp(a->name, "BUFR")==0 || - strcmp(a->name, "GRIB")==0 || - strcmp(a->name, "META")==0) { + if (strcmp(a->name_, "BUFR")==0 || + strcmp(a->name_, "GRIB")==0 || + strcmp(a->name_, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->empty = 1; @@ -629,8 +629,8 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (strcmp(a->name, "groupNumber")==0) { - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + else if (strcmp(a->name_, "groupNumber")==0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; depth += 2; @@ -647,26 +647,26 @@ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix int i = 0; grib_dumper_bufr_decode_C* self = (grib_dumper_bufr_decode_C*)d; unsigned long flags; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { + while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes_[i]) { self->isAttribute = 1; - if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes_[i]->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { i++; continue; } - self->isLeaf = a->attributes[i]->attributes[0] == NULL ? 1 : 0; - flags = a->attributes[i]->flags; - a->attributes[i]->flags |= GRIB_ACCESSOR_FLAG_DUMP; - switch (a->attributes[i]->get_native_type()) { + self->isLeaf = a->attributes_[i]->attributes_[0] == NULL ? 1 : 0; + flags = a->attributes_[i]->flags_; + a->attributes_[i]->flags_ |= GRIB_ACCESSOR_FLAG_DUMP; + switch (a->attributes_[i]->get_native_type()) { case GRIB_TYPE_LONG: - dump_long_attribute(d, a->attributes[i], prefix); + dump_long_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_DOUBLE: - dump_values_attribute(d, a->attributes[i], prefix); + dump_values_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_STRING: break; } - a->attributes[i]->flags = flags; + a->attributes_[i]->flags_ = flags; i++; } self->isLeaf = 0; diff --git a/src/grib_dumper_class_bufr_decode_filter.cc b/src/grib_dumper_class_bufr_decode_filter.cc index 87cb0e2fe..3c8811320 100644 --- a/src/grib_dumper_class_bufr_decode_filter.cc +++ b/src/grib_dumper_class_bufr_decode_filter.cc @@ -134,10 +134,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int err = 0; int r; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -151,18 +151,18 @@ static void dump_values(grib_dumper* d, grib_accessor* a) self->empty = 0; if (size > 1) { - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name, r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name_, r, a->name_); else - fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name, a->name); + fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name_, a->name_); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_double(a, value)) { if (r != 0) - fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name, r, a->name); + fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name_, r, a->name_); else - fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name, a->name); + fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name_, a->name_); } } @@ -171,12 +171,12 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -194,9 +194,9 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* size_t size = 0; int err = 0; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -209,17 +209,17 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* self->empty = 0; if (size > 1) { - fprintf(self->dumper.out, "print \"%s->%s = [%s->%s]\";\n", prefix, a->name, prefix, a->name); + fprintf(self->dumper.out, "print \"%s->%s = [%s->%s]\";\n", prefix, a->name_, prefix, a->name_); } else { if (!grib_is_missing_double(a, value)) { - fprintf(self->dumper.out, "print \"%s->%s = [%s->%s]\";\n", prefix, a->name, prefix, a->name); + fprintf(self->dumper.out, "print \"%s->%s = [%s->%s]\";\n", prefix, a->name_, prefix, a->name_); } } if (self->isLeaf == 0) { - char* prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + char* prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -238,28 +238,28 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int err = 0; int r = 0; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; a->value_count(&count); size = count; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { if (self->isLeaf == 0) { char* prefix; int dofree = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -277,18 +277,18 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) self->empty = 0; if (size > 1) { - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name, r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name_, r, a->name_); else - fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name, a->name); + fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name_, a->name_); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_long(a, value)) { if (r != 0) - fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name, r, a->name); + fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name_, r, a->name_); else - fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name, a->name); + fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name_, a->name_); } } @@ -297,12 +297,12 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -316,18 +316,18 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr { grib_dumper_bufr_decode_filter* self = (grib_dumper_bufr_decode_filter*)d; int err = 0; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; self->empty = 0; if (!codes_bufr_key_exclude_from_dump(prefix)) { - fprintf(self->dumper.out, "print \"%s->%s = [%s->%s]\";\n", prefix, a->name, prefix, a->name); + fprintf(self->dumper.out, "print \"%s->%s = [%s->%s]\";\n", prefix, a->name_, prefix, a->name_); } if (self->isLeaf == 0) { - char* prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + char* prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -350,19 +350,19 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); grib_context* c = h->context; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->unpack_double(&value, &size); self->begin = 0; self->empty = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_double(a, value)) { if (r != 0) - fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name, r, a->name); + fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name_, r, a->name_); else - fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name, a->name); + fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name_, a->name_); } if (self->isLeaf == 0) { @@ -370,12 +370,12 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -394,9 +394,9 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int r = 0; grib_handle* h = grib_handle_of_accessor(a); - c = a->context; + c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -410,10 +410,10 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm if (self->isLeaf == 0) { depth += 2; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name, r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name_, r, a->name_); else - fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name, a->name); + fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name_, a->name_); } self->empty = 0; @@ -423,12 +423,12 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -446,11 +446,11 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char value[MAX_STRING_SIZE] = {0,}; /* See ECC-710 */ size_t size = MAX_STRING_SIZE; char* p = NULL; - grib_context* c = a->context; + grib_context* c = a->context_; int r =0, err = 0; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; self->begin = 0; @@ -459,7 +459,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) err = a->unpack_string(value, &size); p = value; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (grib_is_missing_string(a, (unsigned char*)value, size)) { return; } @@ -473,9 +473,9 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (self->isLeaf == 0) { depth += 2; if (r != 0) - fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name, r, a->name); + fprintf(self->dumper.out, "print \"#%d#%s=[#%d#%s]\";\n", r, a->name_, r, a->name_); else - fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name, a->name); + fprintf(self->dumper.out, "print \"%s=[%s]\";\n", a->name_, a->name_); } if (self->isLeaf == 0) { @@ -483,12 +483,12 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -521,9 +521,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_decode_filter* self = (grib_dumper_bufr_decode_filter*)d; - if (strcmp(a->name, "BUFR")==0 || - strcmp(a->name, "GRIB")==0 || - strcmp(a->name, "META")==0) { + if (strcmp(a->name_, "BUFR")==0 || + strcmp(a->name_, "GRIB")==0 || + strcmp(a->name_, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->begin = 1; @@ -538,8 +538,8 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (strcmp(a->name, "groupNumber")==0) { - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + else if (strcmp(a->name_, "groupNumber")==0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->begin = 1; self->empty = 1; @@ -557,29 +557,29 @@ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix int i = 0; grib_dumper_bufr_decode_filter* self = (grib_dumper_bufr_decode_filter*)d; unsigned long flags; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { + while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes_[i]) { self->isAttribute = 1; - if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes_[i]->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { i++; continue; } - self->isLeaf = a->attributes[i]->attributes[0] == NULL ? 1 : 0; + self->isLeaf = a->attributes_[i]->attributes_[0] == NULL ? 1 : 0; /* fprintf(self->dumper.out,","); */ /* fprintf(self->dumper.out,"\n%-*s",depth," "); */ - /* fprintf(out,"\"%s\" : ",a->attributes[i]->name); */ - flags = a->attributes[i]->flags; - a->attributes[i]->flags |= GRIB_ACCESSOR_FLAG_DUMP; - switch (a->attributes[i]->get_native_type()) { + /* fprintf(out,"\"%s\" : ",a->attributes_[i]->name); */ + flags = a->attributes_[i]->flags_; + a->attributes_[i]->flags_ |= GRIB_ACCESSOR_FLAG_DUMP; + switch (a->attributes_[i]->get_native_type()) { case GRIB_TYPE_LONG: - dump_long_attribute(d, a->attributes[i], prefix); + dump_long_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_DOUBLE: - dump_values_attribute(d, a->attributes[i], prefix); + dump_values_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_STRING: break; } - a->attributes[i]->flags = flags; + a->attributes_[i]->flags_ = flags; i++; } self->isLeaf = 0; diff --git a/src/grib_dumper_class_bufr_decode_fortran.cc b/src/grib_dumper_class_bufr_decode_fortran.cc index dbc4ed271..10570df50 100644 --- a/src/grib_dumper_class_bufr_decode_fortran.cc +++ b/src/grib_dumper_class_bufr_decode_fortran.cc @@ -136,10 +136,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int err = 0; int r = 0; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -154,18 +154,18 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (size > 1) { depth -= 2; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " call codes_get(ibufr, '#%d#%s', rValues)\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " call codes_get(ibufr, '#%d#%s', rValues)\n", r, a->name_); else - fprintf(self->dumper.out, " call codes_get(ibufr, '%s', rValues)\n", a->name); + fprintf(self->dumper.out, " call codes_get(ibufr, '%s', rValues)\n", a->name_); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_double(a, value)) { if (r != 0) - fprintf(self->dumper.out, " call codes_get(ibufr, '#%d#%s', rVal)\n", r, a->name); + fprintf(self->dumper.out, " call codes_get(ibufr, '#%d#%s', rVal)\n", r, a->name_); else - fprintf(self->dumper.out, " call codes_get(ibufr, '%s', rVal)\n", a->name); + fprintf(self->dumper.out, " call codes_get(ibufr, '%s', rVal)\n", a->name_); } } @@ -174,12 +174,12 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -197,9 +197,9 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* size_t size = 0; int err = 0; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -212,19 +212,19 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* self->empty = 0; if (size > 1) { - fprintf(self->dumper.out, " call codes_get(ibufr, '%s->%s', rValues)\n", prefix, a->name); + fprintf(self->dumper.out, " call codes_get(ibufr, '%s->%s', rValues)\n", prefix, a->name_); } else { if (!grib_is_missing_double(a, value)) { - fprintf(self->dumper.out, " call codes_get(ibufr, '%s->%s', rVal)\n", prefix, a->name); + fprintf(self->dumper.out, " call codes_get(ibufr, '%s->%s', rVal)\n", prefix, a->name_); } } if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -243,28 +243,28 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int err = 0; int r = 0; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; a->value_count(&count); size = count; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { if (self->isLeaf == 0) { char* prefix; int dofree = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -284,18 +284,18 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) depth -= 2; fprintf(self->dumper.out, " if(allocated(iValues)) deallocate(iValues)\n"); - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " call codes_get(ibufr, '#%d#%s', iValues)\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " call codes_get(ibufr, '#%d#%s', iValues)\n", r, a->name_); else - fprintf(self->dumper.out, " call codes_get(ibufr, '%s', iValues)\n", a->name); + fprintf(self->dumper.out, " call codes_get(ibufr, '%s', iValues)\n", a->name_); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_long(a, value)) { if (r != 0) - fprintf(self->dumper.out, " call codes_get(ibufr, '#%d#%s', iVal)\n", r, a->name); + fprintf(self->dumper.out, " call codes_get(ibufr, '#%d#%s', iVal)\n", r, a->name_); else - fprintf(self->dumper.out, " call codes_get(ibufr, '%s', iVal)\n", a->name); + fprintf(self->dumper.out, " call codes_get(ibufr, '%s', iVal)\n", a->name_); } } @@ -304,12 +304,12 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024,"#%d#%s", r, a->name); + snprintf(prefix, 1024,"#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -326,9 +326,9 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr size_t size = 0; int err = 0; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -344,12 +344,12 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr depth -= 2; fprintf(self->dumper.out, " if(allocated(iValues)) deallocate(iValues)\n"); - fprintf(self->dumper.out, " call codes_get(ibufr, '%s->%s', iValues)\n", prefix, a->name); + fprintf(self->dumper.out, " call codes_get(ibufr, '%s->%s', iValues)\n", prefix, a->name_); } else { if (!codes_bufr_key_exclude_from_dump(prefix)) { if (!grib_is_missing_long(a, value)) { - fprintf(self->dumper.out, " call codes_get(ibufr, '%s->%s', iVal)\n", prefix, a->name); + fprintf(self->dumper.out, " call codes_get(ibufr, '%s->%s', iVal)\n", prefix, a->name_); } } } @@ -357,8 +357,8 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024,"%s->%s", prefix, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024,"%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -381,18 +381,18 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); grib_context* c = h->context; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->unpack_double(&value, &size); self->empty = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_double(a, value)) { if (r != 0) - fprintf(self->dumper.out, " call codes_get(ibufr,'#%d#%s', rVal)\n", r, a->name); + fprintf(self->dumper.out, " call codes_get(ibufr,'#%d#%s', rVal)\n", r, a->name_); else - fprintf(self->dumper.out, " call codes_get(ibufr,'%s', rVal)\n", a->name); + fprintf(self->dumper.out, " call codes_get(ibufr,'%s', rVal)\n", a->name_); } if (self->isLeaf == 0) { @@ -400,12 +400,12 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -424,9 +424,9 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int r = 0; grib_handle* h = grib_handle_of_accessor(a); - c = a->context; + c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -442,10 +442,10 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm self->empty = 0; if (self->isLeaf == 0) { - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " call codes_get_string_array(ibufr,'#%d#%s',sValues)\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " call codes_get_string_array(ibufr,'#%d#%s',sValues)\n", r, a->name_); else - fprintf(self->dumper.out, " call codes_get_string_array(ibufr,'%s',sValues)\n", a->name); + fprintf(self->dumper.out, " call codes_get_string_array(ibufr,'%s',sValues)\n", a->name_); } if (self->isLeaf == 0) { @@ -453,12 +453,12 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -476,18 +476,18 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char value[MAX_STRING_SIZE] = {0,}; /* See ECC-710 */ size_t size = MAX_STRING_SIZE; char* p = NULL; - grib_context* c = a->context; + grib_context* c = a->context_; int r = 0, err = 0; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; self->empty = 0; err = a->unpack_string(value, &size); p = value; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (grib_is_missing_string(a, (unsigned char*)value, size)) { return; } @@ -501,9 +501,9 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (self->isLeaf == 0) { depth += 2; if (r != 0) - fprintf(self->dumper.out, " call codes_get(ibufr, '#%d#%s', sVal)\n", r, a->name); + fprintf(self->dumper.out, " call codes_get(ibufr, '#%d#%s', sVal)\n", r, a->name_); else - fprintf(self->dumper.out, " call codes_get(ibufr, '%s', sVal)\n", a->name); + fprintf(self->dumper.out, " call codes_get(ibufr, '%s', sVal)\n", a->name_); } /*fprintf(self->dumper.out,"\'%s\')\n",value);*/ @@ -513,12 +513,12 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -552,9 +552,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_decode_fortran* self = (grib_dumper_bufr_decode_fortran*)d; - if (strcmp(a->name, "BUFR")==0 || - strcmp(a->name, "GRIB")==0 || - strcmp(a->name, "META")==0) { + if (strcmp(a->name_, "BUFR")==0 || + strcmp(a->name_, "GRIB")==0 || + strcmp(a->name_, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->empty = 1; @@ -568,8 +568,8 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (strcmp(a->name, "groupNumber")==0) { - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + else if (strcmp(a->name_, "groupNumber")==0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; depth += 2; @@ -586,26 +586,26 @@ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix int i = 0; grib_dumper_bufr_decode_fortran* self = (grib_dumper_bufr_decode_fortran*)d; unsigned long flags; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { + while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes_[i]) { self->isAttribute = 1; - if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes_[i]->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { i++; continue; } - self->isLeaf = a->attributes[i]->attributes[0] == NULL ? 1 : 0; - flags = a->attributes[i]->flags; - a->attributes[i]->flags |= GRIB_ACCESSOR_FLAG_DUMP; - switch (a->attributes[i]->get_native_type()) { + self->isLeaf = a->attributes_[i]->attributes_[0] == NULL ? 1 : 0; + flags = a->attributes_[i]->flags_; + a->attributes_[i]->flags_ |= GRIB_ACCESSOR_FLAG_DUMP; + switch (a->attributes_[i]->get_native_type()) { case GRIB_TYPE_LONG: - dump_long_attribute(d, a->attributes[i], prefix); + dump_long_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_DOUBLE: - dump_values_attribute(d, a->attributes[i], prefix); + dump_values_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_STRING: break; } - a->attributes[i]->flags = flags; + a->attributes_[i]->flags_ = flags; i++; } self->isLeaf = 0; diff --git a/src/grib_dumper_class_bufr_decode_python.cc b/src/grib_dumper_class_bufr_decode_python.cc index 3e2edc70a..0ab837040 100644 --- a/src/grib_dumper_class_bufr_decode_python.cc +++ b/src/grib_dumper_class_bufr_decode_python.cc @@ -144,10 +144,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int r = 0; long count = 0; char* sval = NULL; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -161,19 +161,19 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (size > 1) { depth -= 2; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " dVals = codes_get_array(ibufr, '#%d#%s')\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " dVals = codes_get_array(ibufr, '#%d#%s')\n", r, a->name_); else - fprintf(self->dumper.out, " dVals = codes_get_array(ibufr, '%s')\n", a->name); + fprintf(self->dumper.out, " dVals = codes_get_array(ibufr, '%s')\n", a->name_); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_double(a, value)) { sval = dval_to_string(c, value); if (r != 0) - fprintf(self->dumper.out, " dVal = codes_get(ibufr, '#%d#%s')\n", r, a->name); + fprintf(self->dumper.out, " dVal = codes_get(ibufr, '#%d#%s')\n", r, a->name_); else - fprintf(self->dumper.out, " dVal = codes_get(ibufr, '%s')\n", a->name); + fprintf(self->dumper.out, " dVal = codes_get(ibufr, '%s')\n", a->name_); grib_context_free(c, sval); } @@ -184,12 +184,12 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -208,9 +208,9 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* int err = 0; long count = 0; char* sval; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -224,13 +224,13 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* if (size > 1) { depth -= 2; - fprintf(self->dumper.out, " dVals = codes_get_array(ibufr, '%s->%s')\n", prefix, a->name); + fprintf(self->dumper.out, " dVals = codes_get_array(ibufr, '%s->%s')\n", prefix, a->name_); } else { - /* int r=compute_bufr_key_rank(h,self->keys,a->name); */ + /* int r=compute_bufr_key_rank(h,self->keys,a->name_); */ if (!grib_is_missing_double(a, value)) { sval = dval_to_string(c, value); - fprintf(self->dumper.out, " dVal = codes_get(ibufr, '%s->%s')\n", prefix, a->name); + fprintf(self->dumper.out, " dVal = codes_get(ibufr, '%s->%s')\n", prefix, a->name_); grib_context_free(c, sval); } @@ -239,8 +239,8 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -259,28 +259,28 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int err = 0; int r = 0; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; a->value_count(&count); size = count; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { if (self->isLeaf == 0) { char* prefix; int dofree = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -298,18 +298,18 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (size > 1) { depth -= 2; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " iValues = codes_get_array(ibufr, '#%d#%s')\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " iValues = codes_get_array(ibufr, '#%d#%s')\n", r, a->name_); else - fprintf(self->dumper.out, " iValues = codes_get_array(ibufr, '%s')\n", a->name); + fprintf(self->dumper.out, " iValues = codes_get_array(ibufr, '%s')\n", a->name_); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_long(a, value)) { if (r != 0) - fprintf(self->dumper.out, " iVal = codes_get(ibufr, '#%d#%s')\n", r, a->name); + fprintf(self->dumper.out, " iVal = codes_get(ibufr, '#%d#%s')\n", r, a->name_); else - fprintf(self->dumper.out, " iVal = codes_get(ibufr, '%s')\n", a->name); + fprintf(self->dumper.out, " iVal = codes_get(ibufr, '%s')\n", a->name_); } } @@ -318,12 +318,12 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -340,9 +340,9 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr size_t size = 0; int err = 0; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -356,12 +356,12 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr if (size > 1) { depth -= 2; - fprintf(self->dumper.out, " iVals = codes_get_array(ibufr, '%s->%s')\n", prefix, a->name); + fprintf(self->dumper.out, " iVals = codes_get_array(ibufr, '%s->%s')\n", prefix, a->name_); } else { if (!codes_bufr_key_exclude_from_dump(prefix)) { if (!grib_is_missing_long(a, value)) { - fprintf(self->dumper.out, " iVal = codes_get(ibufr, '%s->%s')\n", prefix, a->name); + fprintf(self->dumper.out, " iVal = codes_get(ibufr, '%s->%s')\n", prefix, a->name_); } } } @@ -369,8 +369,8 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -394,19 +394,19 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); grib_context* c = h->context; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->unpack_double(&value, &size); self->empty = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_double(a, value)) { sval = dval_to_string(c, value); if (r != 0) - fprintf(self->dumper.out, " dVal = codes_get(ibufr, '#%d#%s')\n", r, a->name); + fprintf(self->dumper.out, " dVal = codes_get(ibufr, '#%d#%s')\n", r, a->name_); else - fprintf(self->dumper.out, " dVal = codes_get(ibufr, '%s')\n", a->name); + fprintf(self->dumper.out, " dVal = codes_get(ibufr, '%s')\n", a->name_); grib_context_free(c, sval); } @@ -416,12 +416,12 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -440,9 +440,9 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int r = 0; grib_handle* h = grib_handle_of_accessor(a); - c = a->context; + c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -455,10 +455,10 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm self->empty = 0; if (self->isLeaf == 0) { - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " sVals = codes_get_string_array(ibufr, '#%d#%s')\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " sVals = codes_get_string_array(ibufr, '#%d#%s')\n", r, a->name_); else - fprintf(self->dumper.out, " sVals = codes_get_string_array(ibufr, '%s')\n", a->name); + fprintf(self->dumper.out, " sVals = codes_get_string_array(ibufr, '%s')\n", a->name_); } if (self->isLeaf == 0) { @@ -466,12 +466,12 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -489,18 +489,18 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char value[MAX_STRING_SIZE] = {0,}; /* See ECC-710 */ char* p = NULL; size_t size = MAX_STRING_SIZE; - grib_context* c = a->context; + grib_context* c = a->context_; int r = 0, err = 0; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; self->empty = 0; err = a->unpack_string(value, &size); p = value; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (grib_is_missing_string(a, (unsigned char*)value, size)) { return; } @@ -514,9 +514,9 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (self->isLeaf == 0) { depth += 2; if (r != 0) - fprintf(self->dumper.out, " sVal = codes_get(ibufr, '#%d#%s')\n", r, a->name); + fprintf(self->dumper.out, " sVal = codes_get(ibufr, '#%d#%s')\n", r, a->name_); else - fprintf(self->dumper.out, " sVal = codes_get(ibufr, '%s')\n", a->name); + fprintf(self->dumper.out, " sVal = codes_get(ibufr, '%s')\n", a->name_); } if (self->isLeaf == 0) { @@ -524,12 +524,12 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -562,9 +562,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_decode_python* self = (grib_dumper_bufr_decode_python*)d; - if (strcmp(a->name, "BUFR")==0 || - strcmp(a->name, "GRIB")==0 || - strcmp(a->name, "META")==0) { + if (strcmp(a->name_, "BUFR")==0 || + strcmp(a->name_, "GRIB")==0 || + strcmp(a->name_, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->empty = 1; @@ -578,8 +578,8 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (strcmp(a->name, "groupNumber")==0) { - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + else if (strcmp(a->name_, "groupNumber")==0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; depth += 2; @@ -596,26 +596,26 @@ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix int i = 0; grib_dumper_bufr_decode_python* self = (grib_dumper_bufr_decode_python*)d; unsigned long flags; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { + while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes_[i]) { self->isAttribute = 1; - if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes_[i]->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { i++; continue; } - self->isLeaf = a->attributes[i]->attributes[0] == NULL ? 1 : 0; - flags = a->attributes[i]->flags; - a->attributes[i]->flags |= GRIB_ACCESSOR_FLAG_DUMP; - switch (a->attributes[i]->get_native_type()) { + self->isLeaf = a->attributes_[i]->attributes_[0] == NULL ? 1 : 0; + flags = a->attributes_[i]->flags_; + a->attributes_[i]->flags_ |= GRIB_ACCESSOR_FLAG_DUMP; + switch (a->attributes_[i]->get_native_type()) { case GRIB_TYPE_LONG: - dump_long_attribute(d, a->attributes[i], prefix); + dump_long_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_DOUBLE: - dump_values_attribute(d, a->attributes[i], prefix); + dump_values_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_STRING: break; } - a->attributes[i]->flags = flags; + a->attributes_[i]->flags_ = flags; i++; } self->isLeaf = 0; diff --git a/src/grib_dumper_class_bufr_encode_C.cc b/src/grib_dumper_class_bufr_encode_C.cc index 915649814..7813ec140 100644 --- a/src/grib_dumper_class_bufr_encode_C.cc +++ b/src/grib_dumper_class_bufr_encode_C.cc @@ -162,10 +162,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int cols = 2; long count = 0; char* sval; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -186,7 +186,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) fprintf(self->dumper.out, " free(rvalues); rvalues = NULL;\n\n"); fprintf(self->dumper.out, " size = %lu;\n", (unsigned long)size); fprintf(self->dumper.out, " rvalues = (double*)malloc(size * sizeof(double));\n"); - fprintf(self->dumper.out, " if (!rvalues) { fprintf(stderr, \"Failed to allocate memory (%s).\\n\"); return 1; }", a->name); + fprintf(self->dumper.out, " if (!rvalues) { fprintf(stderr, \"Failed to allocate memory (%s).\\n\"); return 1; }", a->name_); icount = 0; for (i = 0; i < size - 1; ++i) { @@ -210,18 +210,18 @@ static void dump_values(grib_dumper* d, grib_accessor* a) fprintf(self->dumper.out, "\n"); grib_context_free(c, values); - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " CODES_CHECK(codes_set_double_array(h, \"#%d#%s\",rvalues, size), 0);\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " CODES_CHECK(codes_set_double_array(h, \"#%d#%s\",rvalues, size), 0);\n", r, a->name_); else - fprintf(self->dumper.out, " CODES_CHECK(codes_set_double_array(h, \"%s\", rvalues, size), 0);\n", a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_set_double_array(h, \"%s\", rvalues, size), 0);\n", a->name_); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); sval = dval_to_string(c, value); if (r != 0) - fprintf(self->dumper.out, " CODES_CHECK(codes_set_double(h, \"#%d#%s\", %s), 0);\n", r, a->name, sval); + fprintf(self->dumper.out, " CODES_CHECK(codes_set_double(h, \"#%d#%s\", %s), 0);\n", r, a->name_, sval); else - fprintf(self->dumper.out, " CODES_CHECK(codes_set_double(h, \"%s\", %s), 0);\n", a->name, sval); + fprintf(self->dumper.out, " CODES_CHECK(codes_set_double(h, \"%s\", %s), 0);\n", a->name_, sval); grib_context_free(c, sval); } @@ -230,13 +230,13 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int dofree = 0; if (r != 0) { - const size_t prefixMaxLen = strlen(a->name) + 10; + const size_t prefixMaxLen = strlen(a->name_) + 10; prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * prefixMaxLen); dofree = 1; - snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name); + snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -259,9 +259,9 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* int cols = 2; long count = 0; char* sval; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -282,7 +282,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* fprintf(self->dumper.out, " free(rvalues); rvalues = NULL;\n"); fprintf(self->dumper.out, " size = %lu;\n", (unsigned long)size); fprintf(self->dumper.out, " rvalues = (double*)malloc(size * sizeof(double));\n"); - fprintf(self->dumper.out, " if (!rvalues) { fprintf(stderr, \"Failed to allocate memory (%s).\\n\"); return 1; }", a->name); + fprintf(self->dumper.out, " if (!rvalues) { fprintf(stderr, \"Failed to allocate memory (%s).\\n\"); return 1; }", a->name_); icount = 0; for (i = 0; i < size - 1; ++i) { @@ -306,18 +306,18 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* fprintf(self->dumper.out, "\n"); grib_context_free(c, values); - fprintf(self->dumper.out, " CODES_CHECK(codes_set_double_array(h, \"%s->%s\", rvalues, size), 0);\n", prefix, a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_set_double_array(h, \"%s->%s\", rvalues, size), 0);\n", prefix, a->name_); } else { sval = dval_to_string(c, value); - fprintf(self->dumper.out, " CODES_CHECK(codes_set_double(h, \"%s->%s\", %s), 0);\n", prefix, a->name, sval); + fprintf(self->dumper.out, " CODES_CHECK(codes_set_double(h, \"%s->%s\", %s), 0);\n", prefix, a->name_, sval); grib_context_free(c, sval); } if (self->isLeaf == 0) { - const size_t prefix1MaxLen = strlen(a->name) + strlen(prefix) + 5; + const size_t prefix1MaxLen = strlen(a->name_) + strlen(prefix) + 5; char* prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * prefix1MaxLen); - snprintf(prefix1, prefix1MaxLen, "%s->%s", prefix, a->name); + snprintf(prefix1, prefix1MaxLen, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -330,7 +330,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* static int is_hidden(grib_accessor* a) { - return ( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ); + return ( (a->flags_ & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ); } static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) @@ -345,35 +345,35 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int cols = 4; long count = 0; char* sval = NULL; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); int doing_unexpandedDescriptors = 0; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { /* key does not have the dump attribute */ + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { /* key does not have the dump attribute */ int skip = 1; /* See ECC-1107 */ - if (!is_hidden(a) && strcmp(a->name, "messageLength") == 0) skip = 0; + if (!is_hidden(a) && strcmp(a->name_, "messageLength") == 0) skip = 0; if (skip) return; } - doing_unexpandedDescriptors = (strcmp(a->name, "unexpandedDescriptors") == 0); + doing_unexpandedDescriptors = (strcmp(a->name_, "unexpandedDescriptors") == 0); a->value_count(&count); size = size2 = count; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { if (self->isLeaf == 0) { char* prefix; int dofree = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (r != 0) { - const size_t prefixMaxLen = strlen(a->name) + 10; + const size_t prefixMaxLen = strlen(a->name_) + 10; prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * prefixMaxLen); dofree = 1; - snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name); + snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -384,7 +384,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) } if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size2); } else { @@ -398,7 +398,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, " free(ivalues); ivalues = NULL;\n\n"); fprintf(self->dumper.out, " size = %lu;\n", (unsigned long)size); fprintf(self->dumper.out, " ivalues = (long*)malloc(size * sizeof(long));\n"); - fprintf(self->dumper.out, " if (!ivalues) { fprintf(stderr, \"Failed to allocate memory (%s).\\n\"); return 1; }", a->name); + fprintf(self->dumper.out, " if (!ivalues) { fprintf(stderr, \"Failed to allocate memory (%s).\\n\"); return 1; }", a->name_); icount = 0; for (i = 0; i < size - 1; i++) { @@ -416,33 +416,33 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) depth -= 2; fprintf(self->dumper.out, "\n"); - grib_context_free(a->context, values); + grib_context_free(a->context_, values); - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) { - fprintf(self->dumper.out, " CODES_CHECK(codes_set_long_array(h, \"#%d#%s\", ivalues, size), 0);\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) { + fprintf(self->dumper.out, " CODES_CHECK(codes_set_long_array(h, \"#%d#%s\", ivalues, size), 0);\n", r, a->name_); } else { if (doing_unexpandedDescriptors) { fprintf(self->dumper.out, "\n /* Create the structure of the data section */\n"); /* fprintf(self->dumper.out," CODES_CHECK(codes_set_long(h, \"skipExtraKeyAttributes\", 1), 0);\n"); */ } - fprintf(self->dumper.out, " CODES_CHECK(codes_set_long_array(h, \"%s\", ivalues, size), 0);\n", a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_set_long_array(h, \"%s\", ivalues, size), 0);\n", a->name_); if (doing_unexpandedDescriptors) fprintf(self->dumper.out, "\n"); } } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); sval = lval_to_string(c, value); if (r != 0) { - fprintf(self->dumper.out, " CODES_CHECK(codes_set_long(h, \"#%d#%s\", ", r, a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_set_long(h, \"#%d#%s\", ", r, a->name_); } else { if (doing_unexpandedDescriptors) { fprintf(self->dumper.out, "\n /* Create the structure of the data section */\n"); /* fprintf(self->dumper.out," CODES_CHECK(codes_set_long(h, \"skipExtraKeyAttributes\", 1), 0);\n"); */ } - fprintf(self->dumper.out, " CODES_CHECK(codes_set_long(h, \"%s\", ", a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_set_long(h, \"%s\", ", a->name_); } fprintf(self->dumper.out, "%s), 0);\n", sval); @@ -456,13 +456,13 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - const size_t prefixMaxLen = strlen(a->name) + 10; + const size_t prefixMaxLen = strlen(a->name_) + 10; prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * prefixMaxLen); dofree = 1; - snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name); + snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -483,16 +483,16 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr int i, icount; int cols = 4; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); size = size2 = count; if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size2); } else { @@ -506,7 +506,7 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr fprintf(self->dumper.out, " free(ivalues); ivalues = NULL;\n"); fprintf(self->dumper.out, " size = %lu;\n", (unsigned long)size); fprintf(self->dumper.out, " ivalues = (long*)malloc(size * sizeof(long));\n"); - fprintf(self->dumper.out, " if (!ivalues) { fprintf(stderr, \"Failed to allocate memory (%s).\\n\"); return 1; }", a->name); + fprintf(self->dumper.out, " if (!ivalues) { fprintf(stderr, \"Failed to allocate memory (%s).\\n\"); return 1; }", a->name_); icount = 0; for (i = 0; i < size - 1; i++) { @@ -524,23 +524,23 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr depth -= 2; fprintf(self->dumper.out, "\n"); - grib_context_free(a->context, values); + grib_context_free(a->context_, values); - fprintf(self->dumper.out, " CODES_CHECK(codes_set_long_array(h, \"%s->%s\", ivalues, size), 0);\n", prefix, a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_set_long_array(h, \"%s->%s\", ivalues, size), 0);\n", prefix, a->name_); } else { if (!codes_bufr_key_exclude_from_dump(prefix)) { char* sval = lval_to_string(c, value); - fprintf(self->dumper.out, " CODES_CHECK(codes_set_long(h, \"%s->%s\", ", prefix, a->name); + fprintf(self->dumper.out, " CODES_CHECK(codes_set_long(h, \"%s->%s\", ", prefix, a->name_); fprintf(self->dumper.out, "%s), 0);\n", sval); grib_context_free(c, sval); } } if (self->isLeaf == 0) { - const size_t prefix1MaxLen = strlen(a->name) + strlen(prefix) + 5; + const size_t prefix1MaxLen = strlen(a->name_) + strlen(prefix) + 5; char* prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * prefix1MaxLen); - snprintf(prefix1, prefix1MaxLen, "%s->%s", prefix, a->name); + snprintf(prefix1, prefix1MaxLen, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -565,19 +565,19 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); grib_context* c = h->context; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->unpack_double(&value, &size); self->empty = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); sval = dval_to_string(c, value); if (r != 0) - fprintf(self->dumper.out, " CODES_CHECK(codes_set_double(h, \"#%d#%s\", %s), 0);\n", r, a->name, sval); + fprintf(self->dumper.out, " CODES_CHECK(codes_set_double(h, \"#%d#%s\", %s), 0);\n", r, a->name_, sval); else - fprintf(self->dumper.out, " CODES_CHECK(codes_set_double(h, \"%s\", %s), 0);\n", a->name, sval); + fprintf(self->dumper.out, " CODES_CHECK(codes_set_double(h, \"%s\", %s), 0);\n", a->name_, sval); grib_context_free(c, sval); if (self->isLeaf == 0) { @@ -585,13 +585,13 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - const size_t prefixMaxLen = strlen(a->name) + 10; + const size_t prefixMaxLen = strlen(a->name_) + 10; prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * prefixMaxLen); dofree = 1; - snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name); + snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -605,13 +605,13 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; char** values; size_t size = 0, i = 0; - grib_context* c = a->context; + grib_context* c = a->context_; int err = 0; long count = 0; int r = 0; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -624,7 +624,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm fprintf(self->dumper.out, " free(svalues);\n"); fprintf(self->dumper.out, " size = %lu;\n", (unsigned long)size); fprintf(self->dumper.out, " svalues = (char**)malloc(size * sizeof(char*));\n"); - fprintf(self->dumper.out, " if (!svalues) { fprintf(stderr, \"Failed to allocate memory (%s).\\n\"); return 1; }\n", a->name); + fprintf(self->dumper.out, " if (!svalues) { fprintf(stderr, \"Failed to allocate memory (%s).\\n\"); return 1; }\n", a->name_); self->empty = 0; values = (char**)grib_context_malloc_clear(c, size * sizeof(char*)); @@ -640,10 +640,10 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm fprintf(self->dumper.out, " svalues[%lu]=\"%s\";\n", (unsigned long)i, values[i]); if (self->isLeaf == 0) { - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " codes_set_string_array(h, \"#%d#%s\", (const char **)svalues, size);\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " codes_set_string_array(h, \"#%d#%s\", (const char **)svalues, size);\n", r, a->name_); else - fprintf(self->dumper.out, " codes_set_string_array(h, \"%s\", (const char **)svalues, size);\n", a->name); + fprintf(self->dumper.out, " codes_set_string_array(h, \"%s\", (const char **)svalues, size);\n", a->name_); } if (self->isLeaf == 0) { @@ -651,13 +651,13 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int dofree = 0; if (r != 0) { - const size_t prefixMaxLen = strlen(a->name) + 10; + const size_t prefixMaxLen = strlen(a->name_) + 10; prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * prefixMaxLen); dofree = 1; - snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name); + snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -677,16 +677,16 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char* value = NULL; char* p = NULL; size_t size = 0; - grib_context* c = a->context; + grib_context* c = a->context_; int r = 0, err = 0; grib_handle* h = grib_handle_of_accessor(a); - const char* acc_name = a->name; + const char* acc_name = a->name_; grib_get_string_length_acc(a, &size); if (size == 0) return; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; value = (char*)grib_context_malloc_clear(c, size); @@ -791,9 +791,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key, const cha static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; - if (strcmp(a->name, "BUFR")==0 || - strcmp(a->name, "GRIB")==0 || - strcmp(a->name, "META")==0) { + if (strcmp(a->name_, "BUFR")==0 || + strcmp(a->name_, "GRIB")==0 || + strcmp(a->name_, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->empty = 1; @@ -806,8 +806,8 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (strcmp(a->name, "groupNumber")==0) { - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + else if (strcmp(a->name_, "groupNumber")==0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; depth += 2; @@ -824,26 +824,26 @@ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix int i = 0; grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; unsigned long flags; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { + while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes_[i]) { self->isAttribute = 1; - if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes_[i]->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { i++; continue; } - self->isLeaf = a->attributes[i]->attributes[0] == NULL ? 1 : 0; - flags = a->attributes[i]->flags; - a->attributes[i]->flags |= GRIB_ACCESSOR_FLAG_DUMP; - switch (a->attributes[i]->get_native_type()) { + self->isLeaf = a->attributes_[i]->attributes_[0] == NULL ? 1 : 0; + flags = a->attributes_[i]->flags_; + a->attributes_[i]->flags_ |= GRIB_ACCESSOR_FLAG_DUMP; + switch (a->attributes_[i]->get_native_type()) { case GRIB_TYPE_LONG: - dump_long_attribute(d, a->attributes[i], prefix); + dump_long_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_DOUBLE: - dump_values_attribute(d, a->attributes[i], prefix); + dump_values_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_STRING: break; } - a->attributes[i]->flags = flags; + a->attributes_[i]->flags_ = flags; i++; } self->isLeaf = 0; diff --git a/src/grib_dumper_class_bufr_encode_filter.cc b/src/grib_dumper_class_bufr_encode_filter.cc index a90ab0f56..6ccee0088 100644 --- a/src/grib_dumper_class_bufr_encode_filter.cc +++ b/src/grib_dumper_class_bufr_encode_filter.cc @@ -138,10 +138,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int i, r; int cols = 9; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -162,10 +162,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (size > 1) { int icount = 0; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, "set #%d#%s=", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, "set #%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "set %s=", a->name); + fprintf(self->dumper.out, "set %s=", a->name_); fprintf(self->dumper.out, "{"); @@ -187,12 +187,12 @@ static void dump_values(grib_dumper* d, grib_accessor* a) grib_context_free(c, values); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_double(a, value)) { if (r != 0) - fprintf(self->dumper.out, "set #%d#%s=", r, a->name); + fprintf(self->dumper.out, "set #%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "set %s=", a->name); + fprintf(self->dumper.out, "set %s=", a->name_); fprintf(self->dumper.out, "%.18e;\n", value); } @@ -203,12 +203,12 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -229,9 +229,9 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* int i, icount; int cols = 2; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -249,7 +249,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* self->empty = 0; if (size > 1) { - fprintf(self->dumper.out, "set %s->%s = {", prefix, a->name); + fprintf(self->dumper.out, "set %s->%s = {", prefix, a->name_); icount = 0; for (i = 0; i < size - 1; ++i) { if (icount > cols || i == 0) { @@ -269,17 +269,17 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* grib_context_free(c, values); } else { - /* int r=compute_bufr_key_rank(h,self->keys,a->name); */ + /* int r=compute_bufr_key_rank(h,self->keys,a->name_); */ if (!grib_is_missing_double(a, value)) { - fprintf(self->dumper.out, "set %s->%s = %.18e;\n", prefix, a->name, value); + fprintf(self->dumper.out, "set %s->%s = %.18e;\n", prefix, a->name_, value); } } if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -300,28 +300,28 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int i, r, icount; int cols = 9; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; a->value_count(&count); size = size2 = count; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { if (self->isLeaf == 0) { char* prefix; int dofree = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -332,7 +332,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) } if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size2); } else { @@ -345,10 +345,10 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (size > 1) { icount = 0; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, "set #%d#%s=", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, "set #%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "set %s=", a->name); + fprintf(self->dumper.out, "set %s=", a->name_); fprintf(self->dumper.out, "{"); @@ -367,15 +367,15 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) depth -= 2; fprintf(self->dumper.out, "};\n"); - grib_context_free(a->context, values); + grib_context_free(a->context_, values); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_long(a, value)) { if (r != 0) - fprintf(self->dumper.out, "set #%d#%s=", r, a->name); + fprintf(self->dumper.out, "set #%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "set %s=", a->name); + fprintf(self->dumper.out, "set %s=", a->name_); fprintf(self->dumper.out, "%ld;\n", value); } @@ -386,12 +386,12 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -411,16 +411,16 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr int i, icount; int cols = 4; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); size = size2 = count; if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size2); } else { @@ -431,7 +431,7 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr self->empty = 0; if (size > 1) { - fprintf(self->dumper.out, "set %s->%s = {", prefix, a->name); + fprintf(self->dumper.out, "set %s->%s = {", prefix, a->name_); icount = 0; for (i = 0; i < size - 1; i++) { if (icount > cols || i == 0) { @@ -447,13 +447,13 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr fprintf(self->dumper.out, "%ld ", values[i]); depth -= 2; fprintf(self->dumper.out, "};\n"); - grib_context_free(a->context, values); + grib_context_free(a->context_, values); } else { - /* int r=compute_bufr_key_rank(h,self->keys,a->name); */ + /* int r=compute_bufr_key_rank(h,self->keys,a->name_); */ if (!codes_bufr_key_exclude_from_dump(prefix)) { if (!grib_is_missing_long(a, value)) { - fprintf(self->dumper.out, "set %s->%s = ", prefix, a->name); + fprintf(self->dumper.out, "set %s->%s = ", prefix, a->name_); fprintf(self->dumper.out, "%ld ;\n", value); } } @@ -462,8 +462,8 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -486,19 +486,19 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); grib_context* c = h->context; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->unpack_double(&value, &size); self->begin = 0; self->empty = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (!grib_is_missing_double(a, value)) { if (r != 0) - fprintf(self->dumper.out, "set #%d#%s=", r, a->name); + fprintf(self->dumper.out, "set #%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "set %s=", a->name); + fprintf(self->dumper.out, "set %s=", a->name_); fprintf(self->dumper.out, "%.18e;\n", value); } @@ -508,12 +508,12 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -533,9 +533,9 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int r = 0; grib_handle* h = grib_handle_of_accessor(a); - c = a->context; + c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -549,10 +549,10 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm if (self->isLeaf == 0) { depth += 2; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, "set #%d#%s=", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, "set #%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "set %s=", a->name); + fprintf(self->dumper.out, "set %s=", a->name_); } self->empty = 0; @@ -581,12 +581,12 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -604,11 +604,11 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char* value = NULL; char* p = NULL; size_t size = 0; - grib_context* c = a->context; + grib_context* c = a->context_; int r = 0, err = 0; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; grib_get_string_length_acc(a, &size); @@ -626,7 +626,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) err = a->unpack_string(value, &size); p = value; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (grib_is_missing_string(a, (unsigned char*)value, size)) { strcpy(value, ""); /* Empty string means MISSING string */ } @@ -642,9 +642,9 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (self->isLeaf == 0) { depth += 2; if (r != 0) - fprintf(self->dumper.out, "set #%d#%s=", r, a->name); + fprintf(self->dumper.out, "set #%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "set %s=", a->name); + fprintf(self->dumper.out, "set %s=", a->name_); } fprintf(self->dumper.out, "\"%s\";\n", value); @@ -654,12 +654,12 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -712,9 +712,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key, const cha static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_encode_filter* self = (grib_dumper_bufr_encode_filter*)d; - if (strcmp(a->name, "BUFR")==0 || - strcmp(a->name, "GRIB")==0 || - strcmp(a->name, "META")==0) { + if (strcmp(a->name_, "BUFR")==0 || + strcmp(a->name_, "GRIB")==0 || + strcmp(a->name_, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->begin = 1; @@ -728,8 +728,8 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (strcmp(a->name, "groupNumber")==0) { - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + else if (strcmp(a->name_, "groupNumber")==0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->begin = 1; self->empty = 1; @@ -747,29 +747,29 @@ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix int i = 0; grib_dumper_bufr_encode_filter* self = (grib_dumper_bufr_encode_filter*)d; unsigned long flags; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { + while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes_[i]) { self->isAttribute = 1; - if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes_[i]->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { i++; continue; } - self->isLeaf = a->attributes[i]->attributes[0] == NULL ? 1 : 0; + self->isLeaf = a->attributes_[i]->attributes_[0] == NULL ? 1 : 0; /* fprintf(self->dumper.out,","); */ /* fprintf(self->dumper.out,"\n%-*s",depth," "); */ - /* fprintf(out,"\"%s\" : ",a->attributes[i]->name); */ - flags = a->attributes[i]->flags; - a->attributes[i]->flags |= GRIB_ACCESSOR_FLAG_DUMP; - switch (a->attributes[i]->get_native_type()) { + /* fprintf(out,"\"%s\" : ",a->attributes_[i]->name); */ + flags = a->attributes_[i]->flags_; + a->attributes_[i]->flags_ |= GRIB_ACCESSOR_FLAG_DUMP; + switch (a->attributes_[i]->get_native_type()) { case GRIB_TYPE_LONG: - dump_long_attribute(d, a->attributes[i], prefix); + dump_long_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_DOUBLE: - dump_values_attribute(d, a->attributes[i], prefix); + dump_values_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_STRING: break; } - a->attributes[i]->flags = flags; + a->attributes_[i]->flags_ = flags; i++; } self->isLeaf = 0; diff --git a/src/grib_dumper_class_bufr_encode_fortran.cc b/src/grib_dumper_class_bufr_encode_fortran.cc index 1e6cd3bd7..5c3004696 100644 --- a/src/grib_dumper_class_bufr_encode_fortran.cc +++ b/src/grib_dumper_class_bufr_encode_fortran.cc @@ -211,10 +211,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int cols = 2; long count = 0; char* sval; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -259,18 +259,18 @@ static void dump_values(grib_dumper* d, grib_accessor* a) fprintf(self->dumper.out, "/)\n"); grib_context_free(c, values); - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " call codes_set(ibufr,'#%d#%s',rvalues)\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " call codes_set(ibufr,'#%d#%s',rvalues)\n", r, a->name_); else - fprintf(self->dumper.out, " call codes_set(ibufr,'%s',rvalues)\n", a->name); + fprintf(self->dumper.out, " call codes_set(ibufr,'%s',rvalues)\n", a->name_); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); sval = dval_to_string(c, value); if (r != 0) - fprintf(self->dumper.out, " call codes_set(ibufr,'#%d#%s',%s)\n", r, a->name, sval); + fprintf(self->dumper.out, " call codes_set(ibufr,'#%d#%s',%s)\n", r, a->name_, sval); else - fprintf(self->dumper.out, " call codes_set(ibufr,'%s',%s)\n", a->name, sval); + fprintf(self->dumper.out, " call codes_set(ibufr,'%s',%s)\n", a->name_, sval); grib_context_free(c, sval); } @@ -279,12 +279,12 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -307,9 +307,9 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* int cols = 2; long count = 0; char* sval; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -354,19 +354,19 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* fprintf(self->dumper.out, "/)\n"); grib_context_free(c, values); - fprintf(self->dumper.out, " call codes_set(ibufr,'%s->%s' &\n,rvalues)\n", prefix, a->name); + fprintf(self->dumper.out, " call codes_set(ibufr,'%s->%s' &\n,rvalues)\n", prefix, a->name_); } else { sval = dval_to_string(c, value); - fprintf(self->dumper.out, " call codes_set(ibufr,'%s->%s' &\n,%s)\n", prefix, a->name, sval); + fprintf(self->dumper.out, " call codes_set(ibufr,'%s->%s' &\n,%s)\n", prefix, a->name_, sval); grib_context_free(c, sval); } if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -379,7 +379,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* static int is_hidden(grib_accessor* a) { - return ( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ); + return ( (a->flags_ & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ); } static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) @@ -394,34 +394,34 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int cols = 4; long count = 0; char* sval = NULL; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); int doing_unexpandedDescriptors = 0; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { /* key does not have the dump attribute */ + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { /* key does not have the dump attribute */ int skip = 1; /* See ECC-1107 */ - if (!is_hidden(a) && strcmp(a->name, "messageLength") == 0) skip = 0; + if (!is_hidden(a) && strcmp(a->name_, "messageLength") == 0) skip = 0; if (skip) return; } - doing_unexpandedDescriptors = (strcmp(a->name, "unexpandedDescriptors") == 0); + doing_unexpandedDescriptors = (strcmp(a->name_, "unexpandedDescriptors") == 0); a->value_count(&count); size = size2 = count; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { if (self->isLeaf == 0) { char* prefix; int dofree = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -432,7 +432,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) } if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size2); } else { @@ -463,33 +463,33 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) depth -= 2; fprintf(self->dumper.out, "/)\n"); - grib_context_free(a->context, values); + grib_context_free(a->context_, values); - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) { - fprintf(self->dumper.out, " call codes_set(ibufr,'#%d#%s',ivalues)\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) { + fprintf(self->dumper.out, " call codes_set(ibufr,'#%d#%s',ivalues)\n", r, a->name_); } else { if (doing_unexpandedDescriptors) { fprintf(self->dumper.out, "\n ! Create the structure of the data section\n"); /* fprintf(self->dumper.out," call codes_set(ibufr,'skipExtraKeyAttributes',1)\n"); */ } - fprintf(self->dumper.out, " call codes_set(ibufr,'%s',ivalues)\n", a->name); + fprintf(self->dumper.out, " call codes_set(ibufr,'%s',ivalues)\n", a->name_); if (doing_unexpandedDescriptors) fprintf(self->dumper.out, "\n"); } } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); sval = lval_to_string(c, value); if (r != 0) { - fprintf(self->dumper.out, " call codes_set(ibufr,'#%d#%s',", r, a->name); + fprintf(self->dumper.out, " call codes_set(ibufr,'#%d#%s',", r, a->name_); } else { if (doing_unexpandedDescriptors) { fprintf(self->dumper.out, "\n ! Create the structure of the data section\n"); /* fprintf(self->dumper.out," call codes_set(ibufr,'skipExtraKeyAttributes',1)\n"); */ } - fprintf(self->dumper.out, " call codes_set(ibufr,'%s',", a->name); + fprintf(self->dumper.out, " call codes_set(ibufr,'%s',", a->name_); } fprintf(self->dumper.out, "%s)\n", sval); @@ -503,12 +503,12 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -530,16 +530,16 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr int cols = 4; long count = 0; char* pref = NULL; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); size = size2 = count; if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size2); } else { @@ -574,14 +574,14 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr depth -= 2; fprintf(self->dumper.out, "/)\n"); - grib_context_free(a->context, values); + grib_context_free(a->context_, values); - fprintf(self->dumper.out, " call codes_set(ibufr,'%s->%s' &\n,ivalues)\n", pref, a->name); + fprintf(self->dumper.out, " call codes_set(ibufr,'%s->%s' &\n,ivalues)\n", pref, a->name_); } else { if (!codes_bufr_key_exclude_from_dump(prefix)) { char* sval = lval_to_string(c, value); - fprintf(self->dumper.out, " call codes_set(ibufr,'%s->%s'&\n,", pref, a->name); + fprintf(self->dumper.out, " call codes_set(ibufr,'%s->%s'&\n,", pref, a->name_); fprintf(self->dumper.out, "%s)\n", sval); grib_context_free(c, sval); } @@ -590,8 +590,8 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(pref) + 5)); - snprintf(prefix1, 1024, "%s->%s", pref, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(pref) + 5)); + snprintf(prefix1, 1024, "%s->%s", pref, a->name_); dump_attributes(d, a, prefix1); @@ -617,19 +617,19 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); grib_context* c = h->context; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->unpack_double(&value, &size); self->empty = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); sval = dval_to_string(c, value); if (r != 0) - fprintf(self->dumper.out, " call codes_set(ibufr,'#%d#%s',%s)\n", r, a->name, sval); + fprintf(self->dumper.out, " call codes_set(ibufr,'#%d#%s',%s)\n", r, a->name_, sval); else - fprintf(self->dumper.out, " call codes_set(ibufr,'%s',%s)\n", a->name, sval); + fprintf(self->dumper.out, " call codes_set(ibufr,'%s',%s)\n", a->name_, sval); grib_context_free(c, sval); if (self->isLeaf == 0) { @@ -637,12 +637,12 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -656,13 +656,13 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; char** values; size_t size = 0, i = 0; - grib_context* c = a->context; + grib_context* c = a->context_; int err = 0; long count = 0; int r = 0; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -696,18 +696,18 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm char* prefix; int dofree = 0; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " call codes_set_string_array(ibufr,'#%d#%s',svalues)\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " call codes_set_string_array(ibufr,'#%d#%s',svalues)\n", r, a->name_); else - fprintf(self->dumper.out, " call codes_set_string_array(ibufr,'%s',svalues)\n", a->name); + fprintf(self->dumper.out, " call codes_set_string_array(ibufr,'%s',svalues)\n", a->name_); if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -726,17 +726,17 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char* value = NULL; char* p = NULL; size_t size = 0; - grib_context* c = a->context; + grib_context* c = a->context_; int r; int err = 0; grib_handle* h = grib_handle_of_accessor(a); - const char* acc_name = a->name; + const char* acc_name = a->name_; grib_get_string_length_acc(a, &size); if (size == 0) return; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; value = (char*)grib_context_malloc_clear(c, size); @@ -838,9 +838,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key, const cha static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; - if (strcmp(a->name, "BUFR")==0 || - strcmp(a->name, "GRIB")==0 || - strcmp(a->name, "META")==0) { + if (strcmp(a->name_, "BUFR")==0 || + strcmp(a->name_, "GRIB")==0 || + strcmp(a->name_, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->empty = 1; @@ -853,8 +853,8 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (strcmp(a->name, "groupNumber")==0) { - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + else if (strcmp(a->name_, "groupNumber")==0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; depth += 2; @@ -871,26 +871,26 @@ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix int i = 0; grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; unsigned long flags; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { + while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes_[i]) { self->isAttribute = 1; - if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes_[i]->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { i++; continue; } - self->isLeaf = a->attributes[i]->attributes[0] == NULL ? 1 : 0; - flags = a->attributes[i]->flags; - a->attributes[i]->flags |= GRIB_ACCESSOR_FLAG_DUMP; - switch (a->attributes[i]->get_native_type()) { + self->isLeaf = a->attributes_[i]->attributes_[0] == NULL ? 1 : 0; + flags = a->attributes_[i]->flags_; + a->attributes_[i]->flags_ |= GRIB_ACCESSOR_FLAG_DUMP; + switch (a->attributes_[i]->get_native_type()) { case GRIB_TYPE_LONG: - dump_long_attribute(d, a->attributes[i], prefix); + dump_long_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_DOUBLE: - dump_values_attribute(d, a->attributes[i], prefix); + dump_values_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_STRING: break; } - a->attributes[i]->flags = flags; + a->attributes_[i]->flags_ = flags; i++; } self->isLeaf = 0; diff --git a/src/grib_dumper_class_bufr_encode_python.cc b/src/grib_dumper_class_bufr_encode_python.cc index 565bc34ac..48494fb06 100644 --- a/src/grib_dumper_class_bufr_encode_python.cc +++ b/src/grib_dumper_class_bufr_encode_python.cc @@ -158,10 +158,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int cols = 2; long count = 0; char* sval; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -207,18 +207,18 @@ static void dump_values(grib_dumper* d, grib_accessor* a) fprintf(self->dumper.out, ",)\n"); grib_context_free(c, values); - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " codes_set_array(ibufr, '#%d#%s', rvalues)\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " codes_set_array(ibufr, '#%d#%s', rvalues)\n", r, a->name_); else - fprintf(self->dumper.out, " codes_set_array(ibufr, '%s', rvalues)\n", a->name); + fprintf(self->dumper.out, " codes_set_array(ibufr, '%s', rvalues)\n", a->name_); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); sval = dval_to_string(c, value); if (r != 0) - fprintf(self->dumper.out, " codes_set(ibufr, '#%d#%s', %s)\n", r, a->name, sval); + fprintf(self->dumper.out, " codes_set(ibufr, '#%d#%s', %s)\n", r, a->name_, sval); else - fprintf(self->dumper.out, " codes_set(ibufr, '%s', %s)\n", a->name, sval); + fprintf(self->dumper.out, " codes_set(ibufr, '%s', %s)\n", a->name_, sval); grib_context_free(c, sval); } @@ -227,12 +227,12 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -253,9 +253,9 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* int cols = 2; long count = 0; char* sval; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -301,19 +301,19 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* fprintf(self->dumper.out, ",)\n"); grib_context_free(c, values); - fprintf(self->dumper.out, " codes_set_array(ibufr, '%s->%s' \n, rvalues)\n", prefix, a->name); + fprintf(self->dumper.out, " codes_set_array(ibufr, '%s->%s' \n, rvalues)\n", prefix, a->name_); } else { sval = dval_to_string(c, value); - fprintf(self->dumper.out, " codes_set(ibufr, '%s->%s' \n,%s)\n", prefix, a->name, sval); + fprintf(self->dumper.out, " codes_set(ibufr, '%s->%s' \n,%s)\n", prefix, a->name_, sval); grib_context_free(c, sval); } if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -326,7 +326,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* static int is_hidden(grib_accessor* a) { - return ( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ); + return ( (a->flags_ & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ); } static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) @@ -339,34 +339,34 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int cols = 4; long count = 0; char* sval = NULL; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); int doing_unexpandedDescriptors = 0; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { /* key does not have the dump attribute */ + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { /* key does not have the dump attribute */ int skip = 1; /* See ECC-1107 */ - if (!is_hidden(a) && strcmp(a->name, "messageLength") == 0) skip = 0; + if (!is_hidden(a) && strcmp(a->name_, "messageLength") == 0) skip = 0; if (skip) return; } - doing_unexpandedDescriptors = (strcmp(a->name, "unexpandedDescriptors") == 0); + doing_unexpandedDescriptors = (strcmp(a->name_, "unexpandedDescriptors") == 0); a->value_count(&count); size = size2 = count; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { if (self->isLeaf == 0) { char* prefix; int dofree = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -377,7 +377,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) } if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size2); } else { @@ -409,33 +409,33 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, ",) # %lu values\n", (unsigned long)size); else fprintf(self->dumper.out, ",)\n"); - grib_context_free(a->context, values); + grib_context_free(a->context_, values); - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) { - fprintf(self->dumper.out, " codes_set_array(ibufr, '#%d#%s', ivalues)\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) { + fprintf(self->dumper.out, " codes_set_array(ibufr, '#%d#%s', ivalues)\n", r, a->name_); } else { if (doing_unexpandedDescriptors) { fprintf(self->dumper.out, "\n # Create the structure of the data section\n"); /* fprintf(self->dumper.out," codes_set(ibufr, 'skipExtraKeyAttributes', 1)\n"); */ } - fprintf(self->dumper.out, " codes_set_array(ibufr, '%s', ivalues)\n", a->name); + fprintf(self->dumper.out, " codes_set_array(ibufr, '%s', ivalues)\n", a->name_); if (doing_unexpandedDescriptors) fprintf(self->dumper.out, "\n"); } } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); sval = lval_to_string(c, value); if (r != 0) { - fprintf(self->dumper.out, " codes_set(ibufr, '#%d#%s', ", r, a->name); + fprintf(self->dumper.out, " codes_set(ibufr, '#%d#%s', ", r, a->name_); } else { if (doing_unexpandedDescriptors) { fprintf(self->dumper.out, "\n # Create the structure of the data section\n"); /* fprintf(self->dumper.out," codes_set(ibufr, 'skipExtraKeyAttributes', 1)\n"); */ } - fprintf(self->dumper.out, " codes_set(ibufr, '%s', ", a->name); + fprintf(self->dumper.out, " codes_set(ibufr, '%s', ", a->name_); } fprintf(self->dumper.out, "%s)\n", sval); @@ -449,12 +449,12 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -473,16 +473,16 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr int err = 0, i = 0, icount = 0; int cols = 4; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); size = size2 = count; if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size2); } else { @@ -514,14 +514,14 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr fprintf(self->dumper.out, ",) # %lu values\n", (unsigned long)size); else fprintf(self->dumper.out, ",)\n"); - grib_context_free(a->context, values); + grib_context_free(a->context_, values); - fprintf(self->dumper.out, " codes_set_array(ibufr, '%s->%s', ivalues)\n", prefix, a->name); + fprintf(self->dumper.out, " codes_set_array(ibufr, '%s->%s', ivalues)\n", prefix, a->name_); } else { if (!codes_bufr_key_exclude_from_dump(prefix)) { char* sval = lval_to_string(c, value); - fprintf(self->dumper.out, " codes_set(ibufr, '%s->%s', ", prefix, a->name); + fprintf(self->dumper.out, " codes_set(ibufr, '%s->%s', ", prefix, a->name_); fprintf(self->dumper.out, "%s)\n", sval); grib_context_free(c, sval); } @@ -530,8 +530,8 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -555,19 +555,19 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); grib_context* c = h->context; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->unpack_double(&value, &size); self->empty = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); sval = dval_to_string(c, value); if (r != 0) - fprintf(self->dumper.out, " codes_set(ibufr, '#%d#%s', %s)\n", r, a->name, sval); + fprintf(self->dumper.out, " codes_set(ibufr, '#%d#%s', %s)\n", r, a->name_, sval); else - fprintf(self->dumper.out, " codes_set(ibufr, '%s', %s)\n", a->name, sval); + fprintf(self->dumper.out, " codes_set(ibufr, '%s', %s)\n", a->name_, sval); grib_context_free(c, sval); if (self->isLeaf == 0) { @@ -575,12 +575,12 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -594,13 +594,13 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm grib_dumper_bufr_encode_python* self = (grib_dumper_bufr_encode_python*)d; char** values; size_t size = 0, i = 0; - grib_context* c = a->context; + grib_context* c = a->context_; int err = 0; long count = 0; int r = 0; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -631,18 +631,18 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm char* prefix; int dofree = 0; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, " codes_set_array(ibufr, '#%d#%s', svalues)\n", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, " codes_set_array(ibufr, '#%d#%s', svalues)\n", r, a->name_); else - fprintf(self->dumper.out, " codes_set_array(ibufr, '%s', svalues)\n", a->name); + fprintf(self->dumper.out, " codes_set_array(ibufr, '%s', svalues)\n", a->name_); if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -660,16 +660,16 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char* value = NULL; char* p = NULL; size_t size = 0; - grib_context* c = a->context; + grib_context* c = a->context_; int r = 0, err = 0; grib_handle* h = grib_handle_of_accessor(a); - const char* acc_name = a->name; + const char* acc_name = a->name_; grib_get_string_length_acc(a, &size); if (size == 0) return; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; value = (char*)grib_context_malloc_clear(c, size); @@ -772,9 +772,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key, const cha static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_encode_python* self = (grib_dumper_bufr_encode_python*)d; - if (strcmp(a->name, "BUFR")==0 || - strcmp(a->name, "GRIB")==0 || - strcmp(a->name, "META")==0) { + if (strcmp(a->name_, "BUFR")==0 || + strcmp(a->name_, "GRIB")==0 || + strcmp(a->name_, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->empty = 1; @@ -787,8 +787,8 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (strcmp(a->name, "groupNumber")==0) { - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + else if (strcmp(a->name_, "groupNumber")==0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; depth += 2; @@ -805,26 +805,26 @@ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix int i = 0; grib_dumper_bufr_encode_python* self = (grib_dumper_bufr_encode_python*)d; unsigned long flags; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { + while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes_[i]) { self->isAttribute = 1; - if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes_[i]->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { i++; continue; } - self->isLeaf = a->attributes[i]->attributes[0] == NULL ? 1 : 0; - flags = a->attributes[i]->flags; - a->attributes[i]->flags |= GRIB_ACCESSOR_FLAG_DUMP; - switch (a->attributes[i]->get_native_type()) { + self->isLeaf = a->attributes_[i]->attributes_[0] == NULL ? 1 : 0; + flags = a->attributes_[i]->flags_; + a->attributes_[i]->flags_ |= GRIB_ACCESSOR_FLAG_DUMP; + switch (a->attributes_[i]->get_native_type()) { case GRIB_TYPE_LONG: - dump_long_attribute(d, a->attributes[i], prefix); + dump_long_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_DOUBLE: - dump_values_attribute(d, a->attributes[i], prefix); + dump_values_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_STRING: break; } - a->attributes[i]->flags = flags; + a->attributes_[i]->flags_ = flags; i++; } self->isLeaf = 0; diff --git a/src/grib_dumper_class_bufr_simple.cc b/src/grib_dumper_class_bufr_simple.cc index 868b81ba5..eb9206cef 100644 --- a/src/grib_dumper_class_bufr_simple.cc +++ b/src/grib_dumper_class_bufr_simple.cc @@ -135,10 +135,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int i, r; int cols = 9; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -158,10 +158,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (size > 1) { int icount = 0; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, "#%d#%s=", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, "#%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "%s=", a->name); + fprintf(self->dumper.out, "%s=", a->name_); fprintf(self->dumper.out, "{"); @@ -182,11 +182,11 @@ static void dump_values(grib_dumper* d, grib_accessor* a) grib_context_free(c, values); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (r != 0) - fprintf(self->dumper.out, "#%d#%s=", r, a->name); + fprintf(self->dumper.out, "#%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "%s=", a->name); + fprintf(self->dumper.out, "%s=", a->name_); if (!grib_is_missing_double(a, value)) { fprintf(self->dumper.out, "%g\n", value); @@ -201,12 +201,12 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -226,9 +226,9 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* int i, icount; int cols = 9; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -246,7 +246,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* self->empty = 0; if (size > 1) { - fprintf(self->dumper.out, "%s->%s = {", prefix, a->name); + fprintf(self->dumper.out, "%s->%s = {", prefix, a->name_); icount = 0; for (i = 0; i < size - 1; ++i) { if (icount > cols || i == 0) { @@ -265,20 +265,20 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* grib_context_free(c, values); } else { - /* int r=compute_bufr_key_rank(h,self->keys,a->name); */ + /* int r=compute_bufr_key_rank(h,self->keys,a->name_); */ if (!grib_is_missing_double(a, value)) { - fprintf(self->dumper.out, "%s->%s = %g\n", prefix, a->name, value); + fprintf(self->dumper.out, "%s->%s = %g\n", prefix, a->name_, value); } else { - fprintf(self->dumper.out, "%s->%s = MISSING\n", prefix, a->name); + fprintf(self->dumper.out, "%s->%s = MISSING\n", prefix, a->name_); } } if (self->isLeaf == 0) { char* prefix1; - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -298,38 +298,38 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int i, r, icount; int cols = 9; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; a->value_count(&count); size = size2 = count; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { if (self->isLeaf == 0) { char* prefix; int dofree = 0; /* Note: the "subsetNumber" key is only there for UNCOMPRESSED BUFR messages */ - if (self->numberOfSubsets > 1 && strcmp(a->name, "subsetNumber") == 0) { + if (self->numberOfSubsets > 1 && strcmp(a->name_, "subsetNumber") == 0) { err = a->unpack_long(&value, &size); DEBUG_ASSERT(!err); - fprintf(self->dumper.out, "%s=%ld\n", a->name, value); + fprintf(self->dumper.out, "%s=%ld\n", a->name_, value); DEBUG_ASSERT(!grib_is_missing_long(a, value)); (void)err; return; } - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -339,7 +339,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) } if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size2); } else { @@ -352,13 +352,13 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (size > 1) { int doing_unexpandedDescriptors = 0; icount = 0; - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, "#%d#%s=", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, "#%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "%s=", a->name); + fprintf(self->dumper.out, "%s=", a->name_); fprintf(self->dumper.out, "{"); - if (strcmp(a->name, "unexpandedDescriptors") == 0) + if (strcmp(a->name_, "unexpandedDescriptors") == 0) doing_unexpandedDescriptors = 1; for (i = 0; i < size - 1; i++) { @@ -381,14 +381,14 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, "%ld ", values[i]); fprintf(self->dumper.out, "}\n"); - grib_context_free(a->context, values); + grib_context_free(a->context_, values); } else { - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (r != 0) - fprintf(self->dumper.out, "#%d#%s=", r, a->name); + fprintf(self->dumper.out, "#%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "%s=", a->name); + fprintf(self->dumper.out, "%s=", a->name_); if (!grib_is_missing_long(a, value)) { fprintf(self->dumper.out, "%ld\n", value); @@ -403,12 +403,12 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -427,16 +427,16 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr int i, icount; int cols = 9; long count = 0; - grib_context* c = a->context; + grib_context* c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); size = size2 = count; if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size2); } else { @@ -447,7 +447,7 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr self->empty = 0; if (size > 1) { - fprintf(self->dumper.out, "%s->%s = {", prefix, a->name); + fprintf(self->dumper.out, "%s->%s = {", prefix, a->name_); icount = 0; for (i = 0; i < size - 1; i++) { if (icount > cols || i == 0) { @@ -462,24 +462,24 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr } fprintf(self->dumper.out, "%ld ", values[i]); fprintf(self->dumper.out, "}\n"); - grib_context_free(a->context, values); + grib_context_free(a->context_, values); } else { - /* int r=compute_bufr_key_rank(h,self->keys,a->name); */ + /* int r=compute_bufr_key_rank(h,self->keys,a->name_); */ if (!codes_bufr_key_exclude_from_dump(prefix)) { if (!grib_is_missing_long(a, value)) { - fprintf(self->dumper.out, "%s->%s = ", prefix, a->name); + fprintf(self->dumper.out, "%s->%s = ", prefix, a->name_); fprintf(self->dumper.out, "%ld\n", value); } else { - fprintf(self->dumper.out, "%s->%s = MISSING\n", prefix, a->name); + fprintf(self->dumper.out, "%s->%s = MISSING\n", prefix, a->name_); } } } if (self->isLeaf == 0) { - char* prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - snprintf(prefix1, 1024, "%s->%s", prefix, a->name); + char* prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + strlen(prefix) + 5)); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name_); dump_attributes(d, a, prefix1); @@ -501,18 +501,18 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); grib_context* c = h->context; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->unpack_double(&value, &size); self->empty = 0; - r = compute_bufr_key_rank(h, self->keys, a->name); + r = compute_bufr_key_rank(h, self->keys, a->name_); if (r != 0) - fprintf(self->dumper.out, "#%d#%s=", r, a->name); + fprintf(self->dumper.out, "#%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "%s=", a->name); + fprintf(self->dumper.out, "%s=", a->name_); if (!grib_is_missing_double(a, value)) { fprintf(self->dumper.out, "%g\n", value); @@ -526,12 +526,12 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -544,14 +544,14 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm grib_dumper_bufr_simple* self = (grib_dumper_bufr_simple*)d; char** values = NULL; size_t size = 0, i = 0; - grib_context* c = a->context; + grib_context* c = a->context_; int err = 0; int is_missing = 0; long count = 0; int r = 0; grib_handle* h = grib_handle_of_accessor(a); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; a->value_count(&count); @@ -562,10 +562,10 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm } if (self->isLeaf == 0) { - if ((r = compute_bufr_key_rank(h, self->keys, a->name)) != 0) - fprintf(self->dumper.out, "#%d#%s=", r, a->name); + if ((r = compute_bufr_key_rank(h, self->keys, a->name_)) != 0) + fprintf(self->dumper.out, "#%d#%s=", r, a->name_); else - fprintf(self->dumper.out, "%s=", a->name); + fprintf(self->dumper.out, "%s=", a->name_); } self->empty = 0; @@ -595,12 +595,12 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name_) + 10)); dofree = 1; - snprintf(prefix, 1024, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name_); } else - prefix = (char*)a->name; + prefix = (char*)a->name_; dump_attributes(d, a, prefix); if (dofree) @@ -618,14 +618,14 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char value[MAX_STRING_SIZE] = {0,}; /* See ECC-710 */ char* p = NULL; size_t size = MAX_STRING_SIZE; - grib_context* c = a->context; + grib_context* c = a->context_; int r = 0; int is_missing = 0; int err = 0; grib_handle* h = grib_handle_of_accessor(a); - const char* acc_name = a->name; + const char* acc_name = a->name_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { return; } @@ -723,9 +723,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_simple* self = (grib_dumper_bufr_simple*)d; - if (strcmp(a->name, "BUFR")==0 || - strcmp(a->name, "GRIB")==0 || - strcmp(a->name, "META")==0) { + if (strcmp(a->name_, "BUFR")==0 || + strcmp(a->name_, "GRIB")==0 || + strcmp(a->name_, "META")==0) { int err = 0; grib_handle* h = grib_handle_of_accessor(a); self->empty = 1; @@ -740,8 +740,8 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso /*_dump_long_array(h,self->dumper.out,"inputOverriddenReferenceValues","inputOverriddenReferenceValues");*/ grib_dump_accessors_block(d, block); } - else if (strcmp(a->name, "groupNumber")==0) { - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + else if (strcmp(a->name_, "groupNumber")==0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; grib_dump_accessors_block(d, block); @@ -756,29 +756,29 @@ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix int i = 0; grib_dumper_bufr_simple* self = (grib_dumper_bufr_simple*)d; unsigned long flags; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { + while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes_[i]) { self->isAttribute = 1; - if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes_[i]->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { i++; continue; } - self->isLeaf = a->attributes[i]->attributes[0] == NULL ? 1 : 0; + self->isLeaf = a->attributes_[i]->attributes_[0] == NULL ? 1 : 0; /* fprintf(self->dumper.out,","); */ /* fprintf(self->dumper.out,"\n%-*s",depth," "); */ - /* fprintf(out,"\"%s\" : ",a->attributes[i]->name); */ - flags = a->attributes[i]->flags; - a->attributes[i]->flags |= GRIB_ACCESSOR_FLAG_DUMP; - switch (a->attributes[i]->get_native_type()) { + /* fprintf(out,"\"%s\" : ",a->attributes_[i]->name); */ + flags = a->attributes_[i]->flags_; + a->attributes_[i]->flags_ |= GRIB_ACCESSOR_FLAG_DUMP; + switch (a->attributes_[i]->get_native_type()) { case GRIB_TYPE_LONG: - dump_long_attribute(d, a->attributes[i], prefix); + dump_long_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_DOUBLE: - dump_values_attribute(d, a->attributes[i], prefix); + dump_values_attribute(d, a->attributes_[i], prefix); break; case GRIB_TYPE_STRING: break; } - a->attributes[i]->flags = flags; + a->attributes_[i]->flags_ = flags; i++; } self->isLeaf = 0; diff --git a/src/grib_dumper_class_debug.cc b/src/grib_dumper_class_debug.cc index d740e4523..3bfd48217 100644 --- a/src/grib_dumper_class_debug.cc +++ b/src/grib_dumper_class_debug.cc @@ -16,7 +16,7 @@ START_CLASS_DEF CLASS = dumper IMPLEMENTS = dump_long;dump_bits - IMPLEMENTS = dump_double;dump_string + IMPLEMENTS = dump_double;dump_string;dump_string_array IMPLEMENTS = dump_bytes;dump_values IMPLEMENTS = dump_label;dump_section IMPLEMENTS = init;destroy @@ -45,6 +45,7 @@ static void dump_long (grib_dumper* d, grib_accessor* a,const char* commen static void dump_bits (grib_dumper* d, grib_accessor* a,const char* comment); static void dump_double (grib_dumper* d, grib_accessor* a,const char* comment); static void dump_string (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_string_array (grib_dumper* d, grib_accessor* a,const char* comment); static void dump_bytes (grib_dumper* d, grib_accessor* a,const char* comment); static void dump_values (grib_dumper* d, grib_accessor* a); static void dump_label (grib_dumper* d, grib_accessor* a,const char* comment); @@ -70,7 +71,7 @@ static grib_dumper_class _grib_dumper_class_debug = { &dump_long, /* dump long */ &dump_double, /* dump double */ &dump_string, /* dump string */ - 0, /* dump string array */ + &dump_string_array, /* dump string array */ &dump_label, /* dump labels */ &dump_bytes, /* dump bytes */ &dump_bits, /* dump bits */ @@ -103,7 +104,7 @@ static int destroy(grib_dumper* d) static void default_long_value(grib_dumper* d, grib_accessor* a, long actualValue) { grib_dumper_debug* self = (grib_dumper_debug*)d; - grib_action* act = a->creator; + grib_action* act = a->creator_; if (act->default_value == NULL) return; @@ -127,7 +128,7 @@ static void default_long_value(grib_dumper* d, grib_accessor* a, long actualValu // static void default_string_value(grib_dumper* d, grib_accessor* a, const char* actualValue) // { // grib_dumper_debug* self = (grib_dumper_debug*)d; -// grib_action* act = a->creator; +// grib_action* act = a->creator_; // if (act->default_value == NULL) // return; @@ -154,16 +155,16 @@ static void aliases(grib_dumper* d, grib_accessor* a) int i; grib_dumper_debug* self = (grib_dumper_debug*)d; - if (a->all_names[1]) { + if (a->all_names_[1]) { const char* sep = ""; fprintf(self->dumper.out, " ["); for (i = 1; i < MAX_ACCESSOR_NAMES; i++) { - if (a->all_names[i]) { - if (a->all_name_spaces[i]) - fprintf(self->dumper.out, "%s%s.%s", sep, a->all_name_spaces[i], a->all_names[i]); + if (a->all_names_[i]) { + if (a->all_name_spaces_[i]) + fprintf(self->dumper.out, "%s%s.%s", sep, a->all_name_spaces_[i], a->all_names_[i]); else - fprintf(self->dumper.out, "%s%s", sep, a->all_names[i]); + fprintf(self->dumper.out, "%s%s", sep, a->all_names_[i]); } sep = ", "; } @@ -181,17 +182,17 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) long count = 0; int err = 0, i = 0; - if (a->length == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + if (a->length_ == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) return; a->value_count(&count); size = count; if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size); } else { @@ -204,7 +205,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, " "); if (size > 1) { - fprintf(self->dumper.out, "%ld-%ld %s %s = {\n", self->begin, self->theEnd, a->creator->op, a->name); + fprintf(self->dumper.out, "%ld-%ld %s %s = {\n", self->begin, self->theEnd, a->creator_->op, a->name_); if (values) { int k = 0; if (size > 100) { @@ -229,22 +230,22 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) } for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "} # %s %s \n", a->creator->op, a->name); - grib_context_free(a->context, values); + fprintf(self->dumper.out, "} # %s %s \n", a->creator_->op, a->name_); + grib_context_free(a->context_, values); } } else { - if (((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) - fprintf(self->dumper.out, "%ld-%ld %s %s = MISSING", self->begin, self->theEnd, a->creator->op, a->name); + if (((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) + fprintf(self->dumper.out, "%ld-%ld %s %s = MISSING", self->begin, self->theEnd, a->creator_->op, a->name_); else - fprintf(self->dumper.out, "%ld-%ld %s %s = %ld", self->begin, self->theEnd, a->creator->op, a->name, value); + fprintf(self->dumper.out, "%ld-%ld %s %s = %ld", self->begin, self->theEnd, a->creator_->op, a->name_, value); if (comment) fprintf(self->dumper.out, " [%s]", comment); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) fprintf(self->dumper.out, " (%s)", grib_get_type_name(a->get_native_type())); - if ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) fprintf(self->dumper.out, " %s", "(can be missing)"); - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) fprintf(self->dumper.out, " %s", "(read-only)"); } if (err) @@ -265,7 +266,7 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) { grib_dumper_debug* self = (grib_dumper_debug*)d; - if (a->length == 0 && + if (a->length_ == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; @@ -276,10 +277,10 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) for (int i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "%ld-%ld %s %s = %ld [", self->begin, self->theEnd, a->creator->op, a->name, value); + fprintf(self->dumper.out, "%ld-%ld %s %s = %ld [", self->begin, self->theEnd, a->creator_->op, a->name_, value); - for (long i = 0; i < (a->length * 8); i++) { - if (test_bit(value, a->length * 8 - i - 1)) + for (long i = 0; i < (a->length_ * 8); i++) { + if (test_bit(value, a->length_ * 8 - i - 1)) fprintf(self->dumper.out, "1"); else fprintf(self->dumper.out, "0"); @@ -305,7 +306,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) int err = a->unpack_double(&value, &size); int i; - if (a->length == 0 && + if (a->length_ == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; @@ -314,10 +315,10 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - if (((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) - fprintf(self->dumper.out, "%ld-%ld %s %s = MISSING", self->begin, self->theEnd, a->creator->op, a->name); + if (((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) + fprintf(self->dumper.out, "%ld-%ld %s %s = MISSING", self->begin, self->theEnd, a->creator_->op, a->name_); else - fprintf(self->dumper.out, "%ld-%ld %s %s = %g", self->begin, self->theEnd, a->creator->op, a->name, value); + fprintf(self->dumper.out, "%ld-%ld %s %s = %g", self->begin, self->theEnd, a->creator_->op, a->name_, value); if (comment) fprintf(self->dumper.out, " [%s]", comment); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) @@ -337,7 +338,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char* value = NULL; char* p = NULL; - if (a->length == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + if (a->length_ == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; grib_get_string_length_acc(a, &size); @@ -346,7 +347,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) size = 10; /* big enough to hold the string "missing" */ } - value = (char*)grib_context_malloc_clear(a->context, size); + value = (char*)grib_context_malloc_clear(a->context_, size); if (!value) return; err = a->unpack_string(value, &size); @@ -366,7 +367,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "%ld-%ld %s %s = %s", self->begin, self->theEnd, a->creator->op, a->name, value); + fprintf(self->dumper.out, "%ld-%ld %s %s = %s", self->begin, self->theEnd, a->creator_->op, a->name_, value); if (comment) fprintf(self->dumper.out, " [%s]", comment); @@ -378,7 +379,77 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) aliases(d, a); fprintf(self->dumper.out, "\n"); - grib_context_free(a->context, value); + grib_context_free(a->context_, value); +} + +static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comment) +{ + grib_dumper_debug* self = (grib_dumper_debug*)d; + + char** values; + size_t size = 0, i = 0; + grib_context* c = NULL; + int err = 0; + int tab = 0; + long count = 0; + + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) + return; + + c = a->context_; + a->value_count(&count); + if (count == 0) + return; + size = count; + if (size == 1) { + dump_string(d, a, comment); + return; + } + + values = (char**)grib_context_malloc_clear(c, size * sizeof(char*)); + if (!values) { + grib_context_log(c, GRIB_LOG_ERROR, "unable to allocate %zu bytes", size); + return; + } + + err = a->unpack_string_array(values, &size); + + // print_offset(self->dumper.out,d,a); + //print_offset(self->dumper.out, self->begin, self->theEnd); + + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { + fprintf(self->dumper.out, " "); + fprintf(self->dumper.out, "# type %s (str) \n", a->creator_->op); + } + + aliases(d, a); + if (comment) { + fprintf(self->dumper.out, " "); + fprintf(self->dumper.out, "# %s \n", comment); + } + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) { + fprintf(self->dumper.out, " "); + fprintf(self->dumper.out, "#-READ ONLY- "); + tab = 13; + } + else + fprintf(self->dumper.out, " "); + + tab++; + fprintf(self->dumper.out, "%s = {\n", a->name_); + for (i = 0; i < size; i++) { + fprintf(self->dumper.out, "%-*s\"%s\",\n", (int)(tab + strlen(a->name_) + 4), " ", values[i]); + } + fprintf(self->dumper.out, " }"); + + if (err) { + fprintf(self->dumper.out, " "); + fprintf(self->dumper.out, "# *** ERR=%d (%s)", err, grib_get_error_message(err)); + } + + fprintf(self->dumper.out, "\n"); + for (i=0; ilength; + size_t size = a->length_; unsigned char* buf = (unsigned char*)grib_context_malloc(d->context, size); - if (a->length == 0 && + if (a->length_ == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; @@ -397,7 +468,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "%ld-%ld %s %s = %ld", self->begin, self->theEnd, a->creator->op, a->name, a->length); + fprintf(self->dumper.out, "%ld-%ld %s %s = %ld", self->begin, self->theEnd, a->creator_->op, a->name_, a->length_); aliases(d, a); fprintf(self->dumper.out, " {"); @@ -445,7 +516,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "} # %s %s \n", a->creator->op, a->name); + fprintf(self->dumper.out, "} # %s %s \n", a->creator_->op, a->name_); grib_context_free(d->context, buf); } @@ -458,7 +529,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) size_t size = 0; long count = 0; - if (a->length == 0 && + if (a->length_ == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; @@ -474,7 +545,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "%ld-%ld %s %s = (%ld,%ld)", self->begin, self->theEnd, a->creator->op, a->name, (long)size, a->length); + fprintf(self->dumper.out, "%ld-%ld %s %s = (%ld,%ld)", self->begin, self->theEnd, a->creator_->op, a->name_, (long)size, a->length_); aliases(d, a); fprintf(self->dumper.out, " {"); @@ -520,7 +591,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "} # %s %s \n", a->creator->op, a->name); + fprintf(self->dumper.out, "} # %s %s \n", a->creator_->op, a->name_); grib_context_free(d->context, buf); } @@ -530,7 +601,7 @@ static void dump_label(grib_dumper* d, grib_accessor* a, const char* comment) int i; for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "----> %s %s %s\n", a->creator->op, a->name, comment ? comment : ""); + fprintf(self->dumper.out, "----> %s %s %s\n", a->creator_->op, a->name_, comment ? comment : ""); } static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) @@ -538,19 +609,19 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dumper_debug* self = (grib_dumper_debug*)d; int i; /* grib_section* s = grib_get_sub_section(a); */ - grib_section* s = a->sub_section; + grib_section* s = a->sub_section_; - if (a->name[0] == '_') { + if (a->name_[0] == '_') { grib_dump_accessors_block(d, block); return; } for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "======> %s %s (%ld,%ld,%ld)\n", a->creator->op, - a->name, a->length, (long)s->length, (long)s->padding); - if (!strncmp(a->name, "section", 7)) - self->section_offset = a->offset; + fprintf(self->dumper.out, "======> %s %s (%ld,%ld,%ld)\n", a->creator_->op, + a->name_, a->length_, (long)s->length, (long)s->padding); + if (!strncmp(a->name_, "section", 7)) + self->section_offset = a->offset_; /*printf("------------- section_offset = %ld\n",self->section_offset);*/ d->depth += 3; grib_dump_accessors_block(d, block); @@ -558,18 +629,18 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "<===== %s %s\n", a->creator->op, a->name); + fprintf(self->dumper.out, "<===== %s %s\n", a->creator_->op, a->name_); } static void set_begin_end(grib_dumper* d, grib_accessor* a) { grib_dumper_debug* self = (grib_dumper_debug*)d; if ((d->option_flags & GRIB_DUMP_FLAG_OCTET) != 0) { - self->begin = a->offset - self->section_offset + 1; + self->begin = a->offset_ - self->section_offset + 1; self->theEnd = a->get_next_position_offset() - self->section_offset; } else { - self->begin = a->offset; + self->begin = a->offset_; self->theEnd = a->get_next_position_offset(); } } diff --git a/src/grib_dumper_class_default.cc b/src/grib_dumper_class_default.cc index ab7d9fe75..0a8411a82 100644 --- a/src/grib_dumper_class_default.cc +++ b/src/grib_dumper_class_default.cc @@ -111,17 +111,17 @@ static void aliases(grib_dumper* d, grib_accessor* a) if ((d->option_flags & GRIB_DUMP_FLAG_ALIASES) == 0) return; - if (a->all_names[1]) { + if (a->all_names_[1]) { const char* sep = ""; fprintf(self->dumper.out, " "); fprintf(self->dumper.out, "# ALIASES: "); for (i = 1; i < MAX_ACCESSOR_NAMES; i++) { - if (a->all_names[i]) { - if (a->all_name_spaces[i]) - fprintf(self->dumper.out, "%s%s.%s", sep, a->all_name_spaces[i], a->all_names[i]); + if (a->all_names_[i]) { + if (a->all_name_spaces_[i]) + fprintf(self->dumper.out, "%s%s.%s", sep, a->all_name_spaces_[i], a->all_names_[i]); else - fprintf(self->dumper.out, "%s%s", sep, a->all_names[i]); + fprintf(self->dumper.out, "%s%s", sep, a->all_names_[i]); } sep = ", "; } @@ -139,7 +139,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int i; long count = 0; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; a->value_count(&count); @@ -149,11 +149,11 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "# type %s (int)\n", a->creator->op); + fprintf(self->dumper.out, "# type %s (int)\n", a->creator_->op); } if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size2); } else { @@ -167,7 +167,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, "# %s \n", comment); } - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) { fprintf(self->dumper.out, " "); fprintf(self->dumper.out, "#-READ ONLY- "); } @@ -177,7 +177,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (size > 1) { int cols = 19; int icount = 0; - fprintf(self->dumper.out, "%s = { \t", a->name); + fprintf(self->dumper.out, "%s = { \t", a->name_); for (i = 0; i < size; i++) { if (icount > cols) { fprintf(self->dumper.out, "\n\t\t\t\t"); @@ -187,13 +187,13 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) icount++; } fprintf(self->dumper.out, "}\n"); - grib_context_free(a->context, values); + grib_context_free(a->context_, values); } else { - if (((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) - fprintf(self->dumper.out, "%s = MISSING;", a->name); + if (((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) + fprintf(self->dumper.out, "%s = MISSING;", a->name_); else - fprintf(self->dumper.out, "%s = %ld;", a->name, value); + fprintf(self->dumper.out, "%s = %ld;", a->name_, value); } if (err) { @@ -216,7 +216,7 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) size_t size = 1; int err = 0; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; err = a->unpack_long(&lvalue, &size); @@ -225,7 +225,7 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "# type %s \n", a->creator->op); + fprintf(self->dumper.out, "# type %s \n", a->creator_->op); } aliases(d, a); @@ -236,15 +236,15 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, " "); fprintf(self->dumper.out, "# flags: "); - for (long i = 0; i < (a->length * 8); i++) { - if (test_bit(lvalue, a->length * 8 - i - 1)) + for (long i = 0; i < (a->length_ * 8); i++) { + if (test_bit(lvalue, a->length_ * 8 - i - 1)) fprintf(self->dumper.out, "1"); else fprintf(self->dumper.out, "0"); } fprintf(self->dumper.out, "\n"); - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) { fprintf(self->dumper.out, " "); fprintf(self->dumper.out, "#-READ ONLY- "); } @@ -252,10 +252,10 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, " "); } - if (((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) - fprintf(self->dumper.out, "%s = MISSING;", a->name); + if (((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) + fprintf(self->dumper.out, "%s = MISSING;", a->name_); else { - fprintf(self->dumper.out, "%s = %ld;", a->name, lvalue); + fprintf(self->dumper.out, "%s = %ld;", a->name_, lvalue); } if (err) { @@ -273,14 +273,14 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) size_t size = 1; int err = a->unpack_double(&value, &size); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; print_offset(self->dumper.out, d, a); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "# type %s (double)\n", a->creator->op); + fprintf(self->dumper.out, "# type %s (double)\n", a->creator_->op); } aliases(d, a); @@ -290,17 +290,17 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) } - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) { fprintf(self->dumper.out, " "); fprintf(self->dumper.out, "#-READ ONLY- "); } else fprintf(self->dumper.out, " "); - if (((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) - fprintf(self->dumper.out, "%s = MISSING;", a->name); + if (((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) + fprintf(self->dumper.out, "%s = MISSING;", a->name_); else - fprintf(self->dumper.out, "%s = %g;", a->name, value); + fprintf(self->dumper.out, "%s = %g;", a->name_, value); if (err) { fprintf(self->dumper.out, " "); @@ -315,7 +315,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm grib_dumper_default* self = (grib_dumper_default*)d; char** values; size_t size = 0, i = 0; - grib_context* c = a->context; + grib_context* c = a->context_; int err = 0; int tab = 0; long count = 0; @@ -335,14 +335,14 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm err = a->unpack_string_array(values, &size); - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; print_offset(self->dumper.out, d, a); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "# type %s (str)\n", a->creator->op); + fprintf(self->dumper.out, "# type %s (str)\n", a->creator_->op); } aliases(d, a); @@ -351,7 +351,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm fprintf(self->dumper.out, "# %s \n", comment); } - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) { fprintf(self->dumper.out, " "); fprintf(self->dumper.out, "#-READ ONLY- "); tab = 13; @@ -361,9 +361,9 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm } tab++; - fprintf(self->dumper.out, "%s = {\n", a->name); + fprintf(self->dumper.out, "%s = {\n", a->name_); for (i = 0; i < size; i++) { - fprintf(self->dumper.out, "%-*s\"%s\",\n", (int)(tab + strlen(a->name) + 4), " ", values[i]); + fprintf(self->dumper.out, "%-*s\"%s\",\n", (int)(tab + strlen(a->name_) + 4), " ", values[i]); } fprintf(self->dumper.out, " }"); @@ -382,10 +382,10 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char* value = NULL; char* p = NULL; size_t size = 0; - grib_context* c = a->context; + grib_context* c = a->context_; int err = 0; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { return; } @@ -412,7 +412,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "# type %s (str)\n", a->creator->op); + fprintf(self->dumper.out, "# type %s (str)\n", a->creator_->op); } aliases(d, a); @@ -421,17 +421,17 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, "# %s \n", comment); } - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) { fprintf(self->dumper.out, " "); fprintf(self->dumper.out, "#-READ ONLY- "); } else fprintf(self->dumper.out, " "); - if (((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) - fprintf(self->dumper.out, "%s = MISSING;", a->name); + if (((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) + fprintf(self->dumper.out, "%s = MISSING;", a->name_); else - fprintf(self->dumper.out, "%s = %s;", a->name, value); + fprintf(self->dumper.out, "%s = %s;", a->name_, value); if (err) { @@ -448,22 +448,22 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) // grib_dumper_default *self = (grib_dumper_default*)d; // int i,k,err =0; // size_t more = 0; -// size_t size = a->length; +// size_t size = a->length_; // unsigned char* buf = grib_context_malloc(d->context,size); -// if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) +// if ( (a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) // return; -// if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) +// if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) // fprintf(self->dumper.out,"-READ ONLY- "); // /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ // /*print_offset(self->dumper.out,self->begin,self->theEnd);*/ // if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) -// fprintf(self->dumper.out,"%s ",a->creator->op); +// fprintf(self->dumper.out,"%s ",a->creator_->op); -// fprintf(self->dumper.out,"%s = %ld",a->name,a->length); +// fprintf(self->dumper.out,"%s = %ld",a->name_,a->length_); // aliases(d,a); // fprintf(self->dumper.out," {"); @@ -512,7 +512,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) // } // for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); -// fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name); +// fprintf(self->dumper.out,"} # %s %s \n",a->creator_->op, a->name_); // grib_context_free(d->context,buf); } @@ -525,7 +525,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) size_t size = 0; long count = 0; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; a->value_count(&count); @@ -549,19 +549,19 @@ static void dump_values(grib_dumper* d, grib_accessor* a) else if (native_type == GRIB_TYPE_STRING) strcpy(type_name, "(str)"); fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "# type %s %s\n", a->creator->op, type_name); + fprintf(self->dumper.out, "# type %s %s\n", a->creator_->op, type_name); } aliases(d, a); - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) { fprintf(self->dumper.out, " "); fprintf(self->dumper.out, "#-READ ONLY- "); } else fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "%s(%zu) = ", a->name, size); + fprintf(self->dumper.out, "%s(%zu) = ", a->name_, size); aliases(d, a); fprintf(self->dumper.out, " {"); @@ -614,7 +614,7 @@ static void dump_label(grib_dumper* d, grib_accessor* a, const char* comment) /*grib_dumper_default *self = (grib_dumper_default*)d; for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); - fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:"");*/ + fprintf(self->dumper.out,"----> %s %s %s\n",a->creator_->op, a->name_,comment?comment:"");*/ } static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) @@ -624,9 +624,9 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso int is_default_section = 0; char* upper = NULL; char *p = NULL, *q = NULL; - if (!strncmp(a->name, "section", 7)) + if (!strncmp(a->name_, "section", 7)) is_default_section = 1; - if (!strcmp(a->creator->op, "bufr_group")) { + if (!strcmp(a->creator_->op, "bufr_group")) { dump_long(d, a, NULL); } @@ -634,9 +634,9 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso if (is_default_section) { /* char tmp[512]; */ /* grib_section* s = a->sub_section; */ - upper = (char*)malloc(strlen(a->name) + 1); + upper = (char*)malloc(strlen(a->name_) + 1); Assert(upper); - p = (char*)a->name; + p = (char*)a->name_; q = upper; while (*p != '\0') { *q = toupper(*p); @@ -648,7 +648,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso /* snprintf(tmp, sizeof(tmp), "%s ( length=%ld, padding=%ld )", upper, (long)s->length, (long)s->padding); */ /* fprintf(self->dumper.out,"#============== %-38s ==============\n",tmp); */ free(upper); - self->section_offset = a->offset; + self->section_offset = a->offset_; } /*printf("------------- section_offset = %ld\n",self->section_offset);*/ @@ -656,7 +656,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); d->depth -= 3; /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ - /*fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name);*/ + /*fprintf(self->dumper.out,"<===== %s %s\n",a->creator_->op, a->name_);*/ } static void print_offset(FILE* out, grib_dumper* d, grib_accessor* a) @@ -668,10 +668,10 @@ static void print_offset(FILE* out, grib_dumper* d, grib_accessor* a) grib_dumper_default* self = (grib_dumper_default*)d; grib_handle* h = grib_handle_of_accessor(a); - theBegin = a->offset - self->section_offset + 1; + theBegin = a->offset_ - self->section_offset + 1; theEnd = a->get_next_position_offset() - self->section_offset; - if ((d->option_flags & GRIB_DUMP_FLAG_HEXADECIMAL) != 0 && a->length != 0) { + if ((d->option_flags & GRIB_DUMP_FLAG_HEXADECIMAL) != 0 && a->length_ != 0) { if (theBegin == theEnd) { fprintf(self->dumper.out, " "); fprintf(out, "# Octet: "); @@ -683,7 +683,7 @@ static void print_offset(FILE* out, grib_dumper* d, grib_accessor* a) fprintf(out, "%ld-%ld", theBegin, theEnd); } fprintf(out, " = "); - size = a->length; + size = a->length_; if (!(d->option_flags & GRIB_DUMP_FLAG_ALL_DATA) && size > 112) { more = size - 112; @@ -692,7 +692,7 @@ static void print_offset(FILE* out, grib_dumper* d, grib_accessor* a) k = 0; while (k < size) { - offset = a->offset; + offset = a->offset_; for (i = 0; i < 14 && k < size; i++, k++) { fprintf(out, " 0x%.2X", h->buffer->data[offset]); offset++; diff --git a/src/grib_dumper_class_grib_encode_C.cc b/src/grib_dumper_class_grib_encode_C.cc index 5c41e11a0..208f7bc90 100644 --- a/src/grib_dumper_class_grib_encode_C.cc +++ b/src/grib_dumper_class_grib_encode_C.cc @@ -132,19 +132,19 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) size_t size = 1; int err = a->unpack_long(&value, &size); - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY)) return; if (comment) pcomment(self->dumper.out, value, comment); - if (((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_LONG)) - fprintf(self->dumper.out, " GRIB_CHECK(grib_set_missing(h,\"%s\"),%d);\n", a->name, 0); + if (((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_LONG)) + fprintf(self->dumper.out, " GRIB_CHECK(grib_set_missing(h,\"%s\"),%d);\n", a->name_, 0); else - fprintf(self->dumper.out, " GRIB_CHECK(grib_set_long(h,\"%s\",%ld),%d);\n", a->name, value, 0); + fprintf(self->dumper.out, " GRIB_CHECK(grib_set_long(h,\"%s\",%ld),%d);\n", a->name_, value, 0); if (err) - fprintf(self->dumper.out, " /* Error accessing %s (%s) */", a->name, grib_get_error_message(err)); + fprintf(self->dumper.out, " /* Error accessing %s (%s) */", a->name_, grib_get_error_message(err)); if (comment) fprintf(self->dumper.out, "\n"); @@ -166,16 +166,16 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) char buf[1024]; - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) return; - if (a->length == 0) + if (a->length_ == 0) return; buf[0] = 0; - for (i = 0; i < (a->length * 8); i++) { - if (test_bit(value, a->length * 8 - i - 1)) + for (i = 0; i < (a->length_ * 8); i++) { + if (test_bit(value, a->length_ * 8 - i - 1)) strcat(buf, "1"); else strcat(buf, "0"); @@ -189,9 +189,9 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) pcomment(self->dumper.out, value, buf); if (err) - fprintf(self->dumper.out, " /* Error accessing %s (%s) */", a->name, grib_get_error_message(err)); + fprintf(self->dumper.out, " /* Error accessing %s (%s) */", a->name_, grib_get_error_message(err)); else - fprintf(self->dumper.out, " GRIB_CHECK(grib_set_long(h,\"%s\",%ld),%d);\n", a->name, value, 0); + fprintf(self->dumper.out, " GRIB_CHECK(grib_set_long(h,\"%s\",%ld),%d);\n", a->name_, value, 0); fprintf(self->dumper.out, "\n"); } @@ -202,18 +202,18 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) double value; size_t size = 1; int err = a->unpack_double(&value, &size); - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) return; - if (a->length == 0) + if (a->length_ == 0) return; //if(comment) fprintf(self->dumper.out,"/* %s */\n",comment); - fprintf(self->dumper.out, " GRIB_CHECK(grib_set_double(h,\"%s\",%g),%d);\n", a->name, value, 0); + fprintf(self->dumper.out, " GRIB_CHECK(grib_set_double(h,\"%s\",%g),%d);\n", a->name_, value, 0); if (err) - fprintf(self->dumper.out, " /* Error accessing %s (%s) */", a->name, grib_get_error_message(err)); + fprintf(self->dumper.out, " /* Error accessing %s (%s) */", a->name_, grib_get_error_message(err)); } static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) @@ -223,10 +223,10 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) size_t size = sizeof(value); int err = a->unpack_string(value, &size); - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) return; - if (a->length == 0) + if (a->length_ == 0) return; if (comment) @@ -234,20 +234,20 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, " p = \"%s\";\n", value); fprintf(self->dumper.out, " size = strlen(p);\n"); - fprintf(self->dumper.out, " GRIB_CHECK(grib_set_string(h,\"%s\",p,&size),%d);\n", a->name, 0); + fprintf(self->dumper.out, " GRIB_CHECK(grib_set_string(h,\"%s\",p,&size),%d);\n", a->name_, 0); if (err) - fprintf(self->dumper.out, " /* Error accessing %s (%s) */", a->name, grib_get_error_message(err)); + fprintf(self->dumper.out, " /* Error accessing %s (%s) */", a->name_, grib_get_error_message(err)); } static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) { grib_dumper_grib_encode_C* self = (grib_dumper_grib_encode_C*)d; int err = 0; - size_t size = a->length; + size_t size = a->length_; unsigned char* buf; - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) return; if (size == 0) @@ -256,7 +256,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) buf = (unsigned char*)grib_context_malloc(d->context, size); if (!buf) { - fprintf(self->dumper.out, "/* %s: cannot malloc(%zu) */\n", a->name, size); + fprintf(self->dumper.out, "/* %s: cannot malloc(%zu) */\n", a->name_, size); return; } @@ -302,7 +302,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) stype[0] = '\0'; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) || ((a->flags & GRIB_ACCESSOR_FLAG_DATA) && (d->option_flags & GRIB_DUMP_FLAG_NO_DATA))) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) || ((a->flags_ & GRIB_ACCESSOR_FLAG_DATA) && (d->option_flags & GRIB_DUMP_FLAG_NO_DATA))) return; a->value_count(&count); @@ -327,7 +327,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) buf = (double*)grib_context_malloc(d->context, size * sizeof(double)); if (!buf) { - fprintf(self->dumper.out, "/* %s: cannot malloc(%zu) */\n", a->name, size); + fprintf(self->dumper.out, "/* %s: cannot malloc(%zu) */\n", a->name_, size); return; } @@ -335,7 +335,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (err) { grib_context_free(d->context, buf); - fprintf(self->dumper.out, " /* Error accessing %s (%s) */", a->name, grib_get_error_message(err)); + fprintf(self->dumper.out, " /* Error accessing %s (%s) */", a->name_, grib_get_error_message(err)); return; } @@ -358,7 +358,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (size % 4) fprintf(self->dumper.out, "\n"); fprintf(self->dumper.out, "\n"); - fprintf(self->dumper.out, " GRIB_CHECK(grib_set_%s_array(h,\"%s\",v%s,size),%d);\n", stype, a->name, stype, 0); + fprintf(self->dumper.out, " GRIB_CHECK(grib_set_%s_array(h,\"%s\",v%s,size),%d);\n", stype, a->name_, stype, 0); fprintf(self->dumper.out, " free(v%s);\n", stype); grib_context_free(d->context, buf); @@ -367,7 +367,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) static void dump_label(grib_dumper* d, grib_accessor* a, const char* comment) { grib_dumper_grib_encode_C* self = (grib_dumper_grib_encode_C*)d; - fprintf(self->dumper.out, "\n /* %s */\n\n", a->name); + fprintf(self->dumper.out, "\n /* %s */\n\n", a->name_); } static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) diff --git a/src/grib_dumper_class_json.cc b/src/grib_dumper_class_json.cc index dd0210521..c7cdbbe80 100644 --- a/src/grib_dumper_class_json.cc +++ b/src/grib_dumper_class_json.cc @@ -125,7 +125,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) double missing_value = GRIB_MISSING_DOUBLE; grib_handle* h = NULL; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; h = grib_handle_of_accessor(a); @@ -133,7 +133,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) size = size2 = count; if (size > 1) { - values = (double*)grib_context_malloc_clear(a->context, sizeof(double) * size); + values = (double*)grib_context_malloc_clear(a->context_, sizeof(double) * size); err = a->unpack_double(values, &size2); } else { @@ -153,7 +153,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) fprintf(self->dumper.out, "\n%-*s{\n", depth, " "); depth += 2; fprintf(self->dumper.out, "%-*s", depth, " "); - fprintf(self->dumper.out, "\"key\" : \"%s\",\n", a->name); + fprintf(self->dumper.out, "\"key\" : \"%s\",\n", a->name_); } err = grib_set_double(h, "missingValue", missing_value); @@ -185,8 +185,8 @@ static void dump_values(grib_dumper* d, grib_accessor* a) depth -= 2; fprintf(self->dumper.out, "\n%-*s]", depth, " "); - /* if (a->attributes[0]) fprintf(self->dumper.out,","); */ - grib_context_free(a->context, values); + /* if (a->attributes_[0]) fprintf(self->dumper.out,","); */ + grib_context_free(a->context_, values); } else { if (self->isLeaf == 0) { @@ -219,14 +219,14 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int cols = 9; long count = 0; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; a->value_count(&count); size = size2 = count; if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size2); } else { @@ -245,7 +245,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, "\n%-*s{\n", depth, " "); depth += 2; fprintf(self->dumper.out, "%-*s", depth, " "); - fprintf(self->dumper.out, "\"key\" : \"%s\",\n", a->name); + fprintf(self->dumper.out, "\"key\" : \"%s\",\n", a->name_); } if (size > 1) { @@ -258,7 +258,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, "%-*s[", depth, " "); /* See ECC-637: unfortunately json_xs says: * malformed number (leading zero must not be followed by another digit - if (strcmp(a->name, "unexpandedDescriptors")==0) + if (strcmp(a->name_, "unexpandedDescriptors")==0) doing_unexpandedDescriptors = 1; */ depth += 2; @@ -291,8 +291,8 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) depth -= 2; fprintf(self->dumper.out, "\n%-*s]", depth, " "); - /* if (a->attributes[0]) fprintf(self->dumper.out,","); */ - grib_context_free(a->context, values); + /* if (a->attributes_[0]) fprintf(self->dumper.out,","); */ + grib_context_free(a->context_, values); } else { if (self->isLeaf == 0) { @@ -303,7 +303,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, "null"); else fprintf(self->dumper.out, "%ld", value); - /* if (a->attributes[0]) fprintf(self->dumper.out,","); */ + /* if (a->attributes_[0]) fprintf(self->dumper.out,","); */ } if (self->isLeaf == 0) { @@ -324,7 +324,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) double value = 0; size_t size = 1; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; a->unpack_double(&value, &size); @@ -340,7 +340,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, "%-*s{\n", depth, " "); depth += 2; fprintf(self->dumper.out, "%-*s", depth, " "); - fprintf(self->dumper.out, "\"key\" : \"%s\",\n", a->name); + fprintf(self->dumper.out, "\"key\" : \"%s\",\n", a->name_); fprintf(self->dumper.out, "%-*s", depth, " "); fprintf(self->dumper.out, "\"value\" : "); @@ -351,7 +351,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) else fprintf(self->dumper.out, "%g", value); - /* if (a->attributes[0]) fprintf(self->dumper.out,","); */ + /* if (a->attributes_[0]) fprintf(self->dumper.out,","); */ if (self->isLeaf == 0) { dump_attributes(d, a); @@ -369,9 +369,9 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int err = 0; int is_missing = 0; long count = 0; - c = a->context; + c = a->context_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; a->value_count(&count); @@ -390,7 +390,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm fprintf(self->dumper.out, "\n%-*s{\n", depth, " "); depth += 2; fprintf(self->dumper.out, "%-*s", depth, " "); - fprintf(self->dumper.out, "\"key\" : \"%s\",\n", a->name); + fprintf(self->dumper.out, "\"key\" : \"%s\",\n", a->name_); } self->empty = 0; @@ -421,7 +421,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm depth -= 2; fprintf(self->dumper.out, "\n%-*s]", depth, " "); - /* if (a->attributes[0]) fprintf(self->dumper.out,","); */ + /* if (a->attributes_[0]) fprintf(self->dumper.out,","); */ if (self->isLeaf == 0) { dump_attributes(d, a); @@ -445,9 +445,9 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char* p = NULL; int is_missing = 0; int err = 0; - const char* acc_name = a->name; + const char* acc_name = a->name_; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { return; } @@ -456,9 +456,9 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) * Specially for BUFR elements */ /* err = grib_get_string_length_acc(a,&size); * if (size==0) return; - * value=(char*)grib_context_malloc_clear(a->context,size); + * value=(char*)grib_context_malloc_clear(a->context_,size); * if (!value) { - * grib_context_log(a->context,GRIB_LOG_ERROR,"Unable to allocate %zu bytes",size); + * grib_context_log(a->context_,GRIB_LOG_ERROR,"Unable to allocate %zu bytes",size); * return; * } */ @@ -473,7 +473,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) err = a->unpack_string(value, &size); if (err) { snprintf(value, sizeof(value), " *** ERR=%d (%s) [dump_string on '%s']", - err, grib_get_error_message(err), a->name); + err, grib_get_error_message(err), a->name_); } else { Assert(size < MAX_STRING_SIZE); } @@ -503,7 +503,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) else fprintf(self->dumper.out, "\"%s\"", value); - /* if (a->attributes[0]) fprintf(self->dumper.out,","); */ + /* if (a->attributes_[0]) fprintf(self->dumper.out,","); */ if (self->isLeaf == 0) { dump_attributes(d, a); @@ -511,7 +511,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, "\n%-*s}", depth, " "); } - /* grib_context_free(a->context,value); */ + /* grib_context_free(a->context_,value); */ (void)err; /* TODO */ } @@ -526,9 +526,9 @@ static void dump_label(grib_dumper* d, grib_accessor* a, const char* comment) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_json* self = (grib_dumper_json*)d; - if (strcmp(a->name, "BUFR")==0 || - strcmp(a->name, "GRIB")==0 || - strcmp(a->name, "META")==0) { + if (strcmp(a->name_, "BUFR")==0 || + strcmp(a->name_, "GRIB")==0 || + strcmp(a->name_, "META")==0) { depth = 2; fprintf(self->dumper.out, "%-*s", depth, " "); fprintf(self->dumper.out, "[\n"); @@ -539,8 +539,8 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso depth -= 2; fprintf(self->dumper.out, "\n]\n"); } - else if (strcmp(a->name, "groupNumber")==0) { - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + else if (strcmp(a->name_, "groupNumber")==0) { + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; if (!self->empty) fprintf(self->dumper.out, ",\n"); @@ -570,30 +570,30 @@ static void dump_attributes(grib_dumper* d, grib_accessor* a) grib_dumper_json* self = (grib_dumper_json*)d; FILE* out = self->dumper.out; unsigned long flags; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { + while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes_[i]) { self->isAttribute = 1; - if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES) == 0 && (a->attributes_[i]->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { i++; continue; } - self->isLeaf = a->attributes[i]->attributes[0] == NULL ? 1 : 0; + self->isLeaf = a->attributes_[i]->attributes_[0] == NULL ? 1 : 0; fprintf(self->dumper.out, ","); fprintf(self->dumper.out, "\n%-*s", depth, " "); - fprintf(out, "\"%s\" : ", a->attributes[i]->name); - flags = a->attributes[i]->flags; - a->attributes[i]->flags |= GRIB_ACCESSOR_FLAG_DUMP; - switch (a->attributes[i]->get_native_type()) { + fprintf(out, "\"%s\" : ", a->attributes_[i]->name_); + flags = a->attributes_[i]->flags_; + a->attributes_[i]->flags_ |= GRIB_ACCESSOR_FLAG_DUMP; + switch (a->attributes_[i]->get_native_type()) { case GRIB_TYPE_LONG: - dump_long(d, a->attributes[i], 0); + dump_long(d, a->attributes_[i], 0); break; case GRIB_TYPE_DOUBLE: - dump_values(d, a->attributes[i]); + dump_values(d, a->attributes_[i]); break; case GRIB_TYPE_STRING: - dump_string_array(d, a->attributes[i], 0); + dump_string_array(d, a->attributes_[i], 0); break; } - a->attributes[i]->flags = flags; + a->attributes_[i]->flags_ = flags; i++; } self->isLeaf = 0; diff --git a/src/grib_dumper_class_serialize.cc b/src/grib_dumper_class_serialize.cc index 4df3af737..11844997e 100644 --- a/src/grib_dumper_class_serialize.cc +++ b/src/grib_dumper_class_serialize.cc @@ -100,21 +100,21 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) size_t size = 1; int err = a->unpack_long(&value, &size); - if ((a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_HIDDEN) != 0) return; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0 && - (strcmp(a->cclass->name, "lookup") != 0)) + (strcmp(a->class_name_, "lookup") != 0)) return; - if (((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_LONG)) - fprintf(self->dumper.out, "%s = MISSING", a->name); + if (((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_LONG)) + fprintf(self->dumper.out, "%s = MISSING", a->name_); else - fprintf(self->dumper.out, "%s = %ld", a->name, value); + fprintf(self->dumper.out, "%s = %ld", a->name_, value); - if (((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) && - (strcmp(a->cclass->name, "lookup") != 0)) + if (((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) && + (strcmp(a->class_name_, "lookup") != 0)) fprintf(self->dumper.out, " (read_only)"); //if(comment) fprintf(self->dumper.out," [%s]",comment); @@ -134,18 +134,18 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) size_t size = 1; int err = a->unpack_long(&value, &size); - if ((a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_HIDDEN) != 0) return; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) return; - fprintf(self->dumper.out, "%s = %ld ", a->name, value); + fprintf(self->dumper.out, "%s = %ld ", a->name_, value); // fprintf(self->dumper.out,"["); - // for(i=0;i<(a->length*8);i++) { - // if(test_bit(value,a->length*8-i-1)) + // for(i=0;i<(a->length_*8);i++) { + // if(test_bit(value,a->length_*8-i-1)) // fprintf(self->dumper.out,"1"); // else // fprintf(self->dumper.out,"0"); @@ -169,19 +169,19 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) size_t size = 1; int err = a->unpack_double(&value, &size); - if ((a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_HIDDEN) != 0) return; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) return; - if (((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_DOUBLE)) - fprintf(self->dumper.out, "%s = MISSING", a->name); + if (((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_DOUBLE)) + fprintf(self->dumper.out, "%s = MISSING", a->name_); else - fprintf(self->dumper.out, "%s = %g", a->name, value); + fprintf(self->dumper.out, "%s = %g", a->name_, value); - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) fprintf(self->dumper.out, " (read_only)"); //if (comment) fprintf(self->dumper.out," [%s]",comment); @@ -201,10 +201,10 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char* p = value; - if ((a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_HIDDEN) != 0) return; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) return; @@ -217,8 +217,8 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "%s = %s", a->name, value); - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) + fprintf(self->dumper.out, "%s = %s", a->name_, value); + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) fprintf(self->dumper.out, " (read_only)"); // if(comment) fprintf(self->dumper.out," [%s]",comment); @@ -233,19 +233,19 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) grib_dumper_serialize* self = (grib_dumper_serialize*)d; int i, k, err = 0; size_t more = 0; - size_t size = a->length; + size_t size = a->length_; unsigned char* buf = (unsigned char*)grib_context_malloc(d->context, size); - if ((a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_HIDDEN) != 0) return; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) return; for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "%s = (%ld) {", a->name, a->length); + fprintf(self->dumper.out, "%s = (%ld) {", a->name_, a->length_); if (!buf) { if (size == 0) @@ -291,7 +291,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "} # %s %s \n", a->creator->op, a->name); + fprintf(self->dumper.out, "} # %s %s \n", a->creator_->op, a->name_); grib_context_free(d->context, buf); } @@ -312,7 +312,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) long count = 0; values_format = default_format; - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY)) return; a->value_count(&count); @@ -360,7 +360,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) buf = (double*)grib_context_malloc(d->context, size * sizeof(double)); - fprintf(self->dumper.out, "%s (%zu) {", a->name, size); + fprintf(self->dumper.out, "%s (%zu) {", a->name_, size); if (!buf) { if (size == 0) @@ -399,7 +399,7 @@ static void dump_label(grib_dumper* d, grib_accessor* a, const char* comment) // grib_dumper_serialize *self = (grib_dumper_serialize*)d; // int i; // for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); - // fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:""); + // fprintf(self->dumper.out,"----> %s %s %s\n",a->creator_->op, a->name_,comment?comment:""); } static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) @@ -409,15 +409,15 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso size_t len = strlen(secstr); - if (a->name[0] == '_') { + if (a->name_[0] == '_') { grib_dump_accessors_block(d, block); return; } - if (strncmp(secstr, a->name, len) == 0) - fprintf(self->dumper.out, "#------ %s -------\n", a->name); + if (strncmp(secstr, a->name_, len) == 0) + fprintf(self->dumper.out, "#------ %s -------\n", a->name_); grib_dump_accessors_block(d, block); - //fprintf(self->dumper.out,"<------ %s %s\n",a->creator->op, a->name); + //fprintf(self->dumper.out,"<------ %s %s\n",a->creator_->op, a->name_); } diff --git a/src/grib_dumper_class_wmo.cc b/src/grib_dumper_class_wmo.cc index 77c8b1ccd..723a09eae 100644 --- a/src/grib_dumper_class_wmo.cc +++ b/src/grib_dumper_class_wmo.cc @@ -122,16 +122,16 @@ static void aliases(grib_dumper* d, grib_accessor* a) if ((d->option_flags & GRIB_DUMP_FLAG_ALIASES) == 0) return; - if (a->all_names[1]) { + if (a->all_names_[1]) { const char* sep = ""; fprintf(self->dumper.out, " ["); for (i = 1; i < MAX_ACCESSOR_NAMES; i++) { - if (a->all_names[i]) { - if (a->all_name_spaces[i]) - fprintf(self->dumper.out, "%s%s.%s", sep, a->all_name_spaces[i], a->all_names[i]); + if (a->all_names_[i]) { + if (a->all_name_spaces_[i]) + fprintf(self->dumper.out, "%s%s.%s", sep, a->all_name_spaces_[i], a->all_names_[i]); else - fprintf(self->dumper.out, "%s%s", sep, a->all_names[i]); + fprintf(self->dumper.out, "%s%s", sep, a->all_names_[i]); } sep = ", "; } @@ -148,7 +148,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int err = 0, i = 0; long count = 0; - if (a->length == 0 && + if (a->length_ == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; @@ -156,14 +156,14 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) size = count; if (size > 1) { - values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); + values = (long*)grib_context_malloc_clear(a->context_, sizeof(long) * size); err = a->unpack_long(values, &size); } else { err = a->unpack_long(&value, &size); } - if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + if ((a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) return; @@ -172,12 +172,12 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) print_offset(self->dumper.out, self->begin, self->theEnd); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) - fprintf(self->dumper.out, "%s (int) ", a->creator->op); + fprintf(self->dumper.out, "%s (int) ", a->creator_->op); if (size > 1) { int cols = 19; int icount = 0; - fprintf(self->dumper.out, "%s = { \t", a->name); + fprintf(self->dumper.out, "%s = { \t", a->name_); if (values) { for (i = 0; i < size; i++) { if (icount > cols) { @@ -188,14 +188,14 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) icount++; } fprintf(self->dumper.out, "}\n"); - grib_context_free(a->context, values); + grib_context_free(a->context_, values); } } else { - if (((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) - fprintf(self->dumper.out, "%s = MISSING", a->name); + if (((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) + fprintf(self->dumper.out, "%s = MISSING", a->name_); else - fprintf(self->dumper.out, "%s = %ld", a->name, value); + fprintf(self->dumper.out, "%s = %ld", a->name_, value); print_hexadecimal(self->dumper.out, d->option_flags, a); @@ -223,7 +223,7 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) size_t size = 1; int err = 0; - if (a->length == 0 && + if (a->length_ == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; @@ -233,12 +233,12 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) //for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); print_offset(self->dumper.out, self->begin, self->theEnd); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) - fprintf(self->dumper.out, "%s (int) ", a->creator->op); + fprintf(self->dumper.out, "%s (int) ", a->creator_->op); - fprintf(self->dumper.out, "%s = %ld [", a->name, value); + fprintf(self->dumper.out, "%s = %ld [", a->name_, value); - for (long i = 0; i < (a->length * 8); i++) { - if (test_bit(value, a->length * 8 - i - 1)) + for (long i = 0; i < (a->length_ * 8); i++) { + if (test_bit(value, a->length_ * 8 - i - 1)) fprintf(self->dumper.out, "1"); else fprintf(self->dumper.out, "0"); @@ -270,7 +270,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) size_t size = 1; int err = 0; - if (a->length == 0 && + if (a->length_ == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; @@ -281,12 +281,12 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) print_offset(self->dumper.out, self->begin, self->theEnd); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) - fprintf(self->dumper.out, "%s (double) ", a->creator->op); + fprintf(self->dumper.out, "%s (double) ", a->creator_->op); - if (((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) - fprintf(self->dumper.out, "%s = MISSING", a->name); + if (((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && a->is_missing_internal()) + fprintf(self->dumper.out, "%s = MISSING", a->name_); else - fprintf(self->dumper.out, "%s = %g", a->name, value); + fprintf(self->dumper.out, "%s = %g", a->name_, value); // if(comment) fprintf(self->dumper.out," [%s]",comment); if (err == 0) @@ -306,15 +306,15 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) char* p = NULL; int err = 0; - if (a->length == 0 && + if (a->length_ == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) { return; } grib_get_string_length_acc(a, &size); - value = (char*)grib_context_malloc_clear(a->context, size); + value = (char*)grib_context_malloc_clear(a->context_, size); if (!value) { - grib_context_log(a->context, GRIB_LOG_ERROR, "unable to allocate %zu bytes", size); + grib_context_log(a->context_, GRIB_LOG_ERROR, "unable to allocate %zu bytes", size); return; } err = a->unpack_string(value, &size); @@ -331,9 +331,9 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) //for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); print_offset(self->dumper.out, self->begin, self->theEnd); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) - fprintf(self->dumper.out, "%s (str) ", a->creator->op); + fprintf(self->dumper.out, "%s (str) ", a->creator_->op); - fprintf(self->dumper.out, "%s = %s", a->name, value); + fprintf(self->dumper.out, "%s = %s", a->name_, value); if (err == 0) print_hexadecimal(self->dumper.out, d->option_flags, a); @@ -343,7 +343,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, " *** ERR=%d (%s) [grib_dumper_wmo::dump_string]", err, grib_get_error_message(err)); aliases(d, a); fprintf(self->dumper.out, "\n"); - grib_context_free(a->context, value); + grib_context_free(a->context_, value); } static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) @@ -351,10 +351,10 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) grib_dumper_wmo* self = (grib_dumper_wmo*)d; int i, k, err = 0; size_t more = 0; - size_t size = a->length; + size_t size = a->length_; unsigned char* buf = (unsigned char*)grib_context_malloc(d->context, size); - if (a->length == 0 && + if (a->length_ == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; @@ -363,9 +363,9 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) // for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); print_offset(self->dumper.out, self->begin, self->theEnd); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) - fprintf(self->dumper.out, "%s ", a->creator->op); + fprintf(self->dumper.out, "%s ", a->creator_->op); - fprintf(self->dumper.out, "%s = %ld", a->name, a->length); + fprintf(self->dumper.out, "%s = %ld", a->name_, a->length_); aliases(d, a); fprintf(self->dumper.out, " {"); @@ -415,7 +415,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "} # %s %s \n", a->creator->op, a->name); + fprintf(self->dumper.out, "} # %s %s \n", a->creator_->op, a->name_); grib_context_free(d->context, buf); } @@ -429,7 +429,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) long count = 0; int is_char = 0; - if (a->length == 0 && + if (a->length_ == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; @@ -445,7 +445,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) set_begin_end(d, a); // For the DIAG pseudo GRIBs. Key charValues uses 1-byte integers to represent a character - if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) { + if (a->flags_ & GRIB_ACCESSOR_FLAG_STRING_TYPE) { is_char = 1; } @@ -459,10 +459,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) strcpy(type_name, "(double)"); else if (native_type == GRIB_TYPE_STRING) strcpy(type_name, "(str)"); - fprintf(self->dumper.out, "%s %s ", a->creator->op, type_name); + fprintf(self->dumper.out, "%s %s ", a->creator_->op, type_name); } - fprintf(self->dumper.out, "%s = (%ld,%ld)", a->name, (long)size, a->length); + fprintf(self->dumper.out, "%s = (%ld,%ld)", a->name_, (long)size, a->length_); aliases(d, a); fprintf(self->dumper.out, " {"); @@ -511,7 +511,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) fprintf(self->dumper.out, "... %lu more values\n", (unsigned long)more); } - fprintf(self->dumper.out, "} # %s %s \n", a->creator->op, a->name); + fprintf(self->dumper.out, "} # %s %s \n", a->creator_->op, a->name_); grib_context_free(d->context, buf); } @@ -519,24 +519,24 @@ static void dump_label(grib_dumper* d, grib_accessor* a, const char* comment) { // grib_dumper_wmo *self = (grib_dumper_wmo*)d; // for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); -// fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:""); +// fprintf(self->dumper.out,"----> %s %s %s\n",a->creator_->op, a->name_,comment?comment:""); } static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_wmo* self = (grib_dumper_wmo*)d; - grib_section* s = a->sub_section; + grib_section* s = a->sub_section_; int is_wmo_section = 0; char* upper = NULL; char tmp[512]; char *p = NULL, *q = NULL; - if (!strncmp(a->name, "section", 7)) + if (!strncmp(a->name_, "section", 7)) is_wmo_section = 1; if (is_wmo_section) { - upper = (char*)malloc(strlen(a->name) + 1); + upper = (char*)malloc(strlen(a->name_) + 1); Assert(upper); - p = (char*)a->name; + p = (char*)a->name_; q = upper; while (*p != '\0') { *q = toupper(*p); @@ -547,7 +547,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso snprintf(tmp, sizeof(tmp), "%s ( length=%ld, padding=%ld )", upper, (long)s->length, (long)s->padding); fprintf(self->dumper.out, "====================== %-35s ======================\n", tmp); free(upper); - self->section_offset = a->offset; + self->section_offset = a->offset_; } else { } @@ -558,18 +558,18 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso d->depth -= 3; //for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); - //fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name); + //fprintf(self->dumper.out,"<===== %s %s\n",a->creator_->op, a->name_); } static void set_begin_end(grib_dumper* d, grib_accessor* a) { grib_dumper_wmo* self = (grib_dumper_wmo*)d; if ((d->option_flags & GRIB_DUMP_FLAG_OCTET) != 0) { - self->begin = a->offset - self->section_offset + 1; + self->begin = a->offset_ - self->section_offset + 1; self->theEnd = a->get_next_position_offset() - self->section_offset; } else { - self->begin = a->offset; + self->begin = a->offset_; self->theEnd = a->get_next_position_offset(); } } @@ -579,10 +579,10 @@ static void print_hexadecimal(FILE* out, unsigned long flags, grib_accessor* a) int i = 0; unsigned long offset = 0; grib_handle* h = grib_handle_of_accessor(a); - if ((flags & GRIB_DUMP_FLAG_HEXADECIMAL) != 0 && a->length != 0) { + if ((flags & GRIB_DUMP_FLAG_HEXADECIMAL) != 0 && a->length_ != 0) { fprintf(out, " ("); - offset = a->offset; - for (i = 0; i < a->length; i++) { + offset = a->offset_; + for (i = 0; i < a->length_; i++) { fprintf(out, " 0x%.2X", h->buffer->data[offset]); offset++; } @@ -600,10 +600,10 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int tab = 0; long count = 0; - if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if ((a->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; - c = a->context; + c = a->context_; a->value_count(&count); if (count == 0) return; @@ -626,7 +626,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "# type %s (str) \n", a->creator->op); + fprintf(self->dumper.out, "# type %s (str) \n", a->creator_->op); } aliases(d, a); @@ -634,7 +634,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm fprintf(self->dumper.out, " "); fprintf(self->dumper.out, "# %s \n", comment); } - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) { fprintf(self->dumper.out, " "); fprintf(self->dumper.out, "#-READ ONLY- "); tab = 13; @@ -643,9 +643,9 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm fprintf(self->dumper.out, " "); tab++; - fprintf(self->dumper.out, "%s = {\n", a->name); + fprintf(self->dumper.out, "%s = {\n", a->name_); for (i = 0; i < size; i++) { - fprintf(self->dumper.out, "%-*s\"%s\",\n", (int)(tab + strlen(a->name) + 4), " ", values[i]); + fprintf(self->dumper.out, "%-*s\"%s\",\n", (int)(tab + strlen(a->name_) + 4), " ", values[i]); } fprintf(self->dumper.out, " }"); diff --git a/src/grib_expression_class_accessor.cc b/src/grib_expression_class_accessor.cc index ed3fcd9fe..71bc70526 100644 --- a/src/grib_expression_class_accessor.cc +++ b/src/grib_expression_class_accessor.cc @@ -42,7 +42,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*, FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static string get_name(grib_expression* e); static int native_type(grib_expression*,grib_handle*); @@ -60,12 +60,12 @@ typedef struct grib_expression_accessor{ static grib_expression_class _grib_expression_class_accessor = { - 0, /* super */ - "accessor", /* name */ - sizeof(grib_expression_accessor),/* size of instance */ + 0, /* super */ + "accessor", /* name */ + sizeof(grib_expression_accessor),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_binop.cc b/src/grib_expression_class_binop.cc index c9b603497..60547ec2f 100644 --- a/src/grib_expression_class_binop.cc +++ b/src/grib_expression_class_binop.cc @@ -42,7 +42,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*, FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static int native_type(grib_expression*,grib_handle*); static int evaluate_long(grib_expression*,grib_handle*,long*); @@ -60,12 +60,12 @@ typedef struct grib_expression_binop{ static grib_expression_class _grib_expression_class_binop = { - 0, /* super */ - "binop", /* name */ - sizeof(grib_expression_binop),/* size of instance */ + 0, /* super */ + "binop", /* name */ + sizeof(grib_expression_binop),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_double.cc b/src/grib_expression_class_double.cc index 52d40832f..14e38e973 100644 --- a/src/grib_expression_class_double.cc +++ b/src/grib_expression_class_double.cc @@ -38,7 +38,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*, FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static int native_type(grib_expression*,grib_handle*); static int evaluate_long(grib_expression*,grib_handle*,long*); @@ -52,12 +52,12 @@ typedef struct grib_expression_double{ static grib_expression_class _grib_expression_class_double = { - 0, /* super */ - "double", /* name */ - sizeof(grib_expression_double),/* size of instance */ + 0, /* super */ + "double", /* name */ + sizeof(grib_expression_double),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_functor.cc b/src/grib_expression_class_functor.cc index 0f1d80214..a85374886 100644 --- a/src/grib_expression_class_functor.cc +++ b/src/grib_expression_class_functor.cc @@ -9,6 +9,8 @@ */ #include "grib_api_internal.h" +#include +#include /* This is used by make_class.pl @@ -38,7 +40,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*,FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static int native_type(grib_expression*,grib_handle*); static int evaluate_long(grib_expression*,grib_handle*,long*); @@ -52,12 +54,12 @@ typedef struct grib_expression_functor{ static grib_expression_class _grib_expression_class_functor = { - 0, /* super */ - "functor", /* name */ - sizeof(grib_expression_functor),/* size of instance */ + 0, /* super */ + "functor", /* name */ + sizeof(grib_expression_functor),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, @@ -71,28 +73,22 @@ grib_expression_class* grib_expression_class_functor = &_grib_expression_class_f /* END_CLASS_IMP */ - -#ifdef ECCODES_ON_WINDOWS -// Windows does not have strcasestr -static char* strcasestr(const char *haystack, const char* needle) +// See ECC-1936. We cannot use strcasestr (not on Windows and non-standard) +static bool string_contains_case(const char* haystack, const char* needle, bool case_sensitive) { - char c, sc; - size_t len = 0; + std::string copy_haystack = haystack; + std::string copy_needle = needle; - if ((c = *needle++) != 0) { - c = tolower((unsigned char)c); - len = strlen(needle); - do { - do { - if ((sc = *haystack++) == 0) - return (NULL); - } while ((char)tolower((unsigned char)sc) != c); - } while (_strnicmp(haystack, needle, len) != 0); - haystack--; + if (!case_sensitive) { + // Convert both strings to lowercase if we don't care about case + std::transform(copy_needle.begin(), copy_needle.end(), copy_needle.begin(), + [](unsigned char c) { return std::tolower(c); }); + std::transform(copy_haystack.begin(), copy_haystack.end(), copy_haystack.begin(), + [](unsigned char c) { return std::tolower(c); }); } - return ((char *)haystack); + // Perform the search + return copy_haystack.find(copy_needle) != std::string::npos; } -#endif static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) { @@ -214,9 +210,10 @@ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) err = grib_get_string(h, keyName, keyValue, &len); if (err) return err; const char* sValue = grib_arguments_get_string(h, e->args, 1); - const bool case_sens = grib_arguments_get_long(h, e->args, 2) != 0; - const bool contains = case_sens? strcasestr(keyValue, sValue) : strstr(keyValue, sValue); - if (sValue && contains) { + if (!sValue) return GRIB_INVALID_ARGUMENT; + const bool case_sens = grib_arguments_get_long(h, e->args, 2) == 0; // 0=case-sensitive, 1=case-insensitive + const bool contains = string_contains_case(keyValue, sValue, case_sens); + if (contains) { *lres = 1; return GRIB_SUCCESS; } diff --git a/src/grib_expression_class_is_in_dict.cc b/src/grib_expression_class_is_in_dict.cc index 46e0833f6..8d86c24bf 100644 --- a/src/grib_expression_class_is_in_dict.cc +++ b/src/grib_expression_class_is_in_dict.cc @@ -39,7 +39,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ -static void print(grib_context*,grib_expression*,grib_handle*,FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static string get_name(grib_expression* e); static int native_type(grib_expression*,grib_handle*); @@ -56,12 +56,12 @@ typedef struct grib_expression_is_in_dict{ static grib_expression_class _grib_expression_class_is_in_dict = { - 0, /* super */ - "is_in_dict", /* name */ - sizeof(grib_expression_is_in_dict),/* size of instance */ + 0, /* super */ + "is_in_dict", /* name */ + sizeof(grib_expression_is_in_dict),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - 0, /* destructor */ + 0, /* constructor */ + 0, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_is_in_list.cc b/src/grib_expression_class_is_in_list.cc index 3e5e3728d..953481ad0 100644 --- a/src/grib_expression_class_is_in_list.cc +++ b/src/grib_expression_class_is_in_list.cc @@ -41,7 +41,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*,FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static string get_name(grib_expression* e); static int native_type(grib_expression*,grib_handle*); @@ -58,12 +58,12 @@ typedef struct grib_expression_is_in_list{ static grib_expression_class _grib_expression_class_is_in_list = { - 0, /* super */ - "is_in_list", /* name */ - sizeof(grib_expression_is_in_list),/* size of instance */ + 0, /* super */ + "is_in_list", /* name */ + sizeof(grib_expression_is_in_list),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_is_integer.cc b/src/grib_expression_class_is_integer.cc index bf203bc81..d88756974 100644 --- a/src/grib_expression_class_is_integer.cc +++ b/src/grib_expression_class_is_integer.cc @@ -42,7 +42,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*, FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static string get_name(grib_expression* e); static int native_type(grib_expression*,grib_handle*); @@ -60,12 +60,12 @@ typedef struct grib_expression_is_integer{ static grib_expression_class _grib_expression_class_is_integer = { - 0, /* super */ - "is_integer", /* name */ - sizeof(grib_expression_is_integer),/* size of instance */ + 0, /* super */ + "is_integer", /* name */ + sizeof(grib_expression_is_integer),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_length.cc b/src/grib_expression_class_length.cc index c8c63f8e8..e2c0d3202 100644 --- a/src/grib_expression_class_length.cc +++ b/src/grib_expression_class_length.cc @@ -42,7 +42,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*,FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static string get_name(grib_expression* e); static int native_type(grib_expression*,grib_handle*); @@ -60,12 +60,12 @@ typedef struct grib_expression_length{ static grib_expression_class _grib_expression_class_length = { - 0, /* super */ - "length", /* name */ - sizeof(grib_expression_length),/* size of instance */ + 0, /* super */ + "length", /* name */ + sizeof(grib_expression_length),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_logical_and.cc b/src/grib_expression_class_logical_and.cc index d95de8d92..419383373 100644 --- a/src/grib_expression_class_logical_and.cc +++ b/src/grib_expression_class_logical_and.cc @@ -39,7 +39,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*, FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static int native_type(grib_expression*,grib_handle*); static int evaluate_long(grib_expression*,grib_handle*,long*); @@ -54,12 +54,12 @@ typedef struct grib_expression_logical_and{ static grib_expression_class _grib_expression_class_logical_and = { - 0, /* super */ - "logical_and", /* name */ - sizeof(grib_expression_logical_and),/* size of instance */ + 0, /* super */ + "logical_and", /* name */ + sizeof(grib_expression_logical_and),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_logical_or.cc b/src/grib_expression_class_logical_or.cc index aed0618f3..88867f35f 100644 --- a/src/grib_expression_class_logical_or.cc +++ b/src/grib_expression_class_logical_or.cc @@ -39,7 +39,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*,FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static int native_type(grib_expression*,grib_handle*); static int evaluate_long(grib_expression*,grib_handle*,long*); @@ -54,12 +54,12 @@ typedef struct grib_expression_logical_or{ static grib_expression_class _grib_expression_class_logical_or = { - 0, /* super */ - "logical_or", /* name */ - sizeof(grib_expression_logical_or),/* size of instance */ + 0, /* super */ + "logical_or", /* name */ + sizeof(grib_expression_logical_or),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_long.cc b/src/grib_expression_class_long.cc index 774f736e6..946e6456d 100644 --- a/src/grib_expression_class_long.cc +++ b/src/grib_expression_class_long.cc @@ -38,7 +38,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*,FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static int native_type(grib_expression*,grib_handle*); static int evaluate_long(grib_expression*,grib_handle*,long*); @@ -52,12 +52,12 @@ typedef struct grib_expression_long{ static grib_expression_class _grib_expression_class_long = { - 0, /* super */ - "long", /* name */ - sizeof(grib_expression_long),/* size of instance */ + 0, /* super */ + "long", /* name */ + sizeof(grib_expression_long),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_string.cc b/src/grib_expression_class_string.cc index 379140de7..a085ed69e 100644 --- a/src/grib_expression_class_string.cc +++ b/src/grib_expression_class_string.cc @@ -37,7 +37,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*,FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static int native_type(grib_expression*,grib_handle*); static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); @@ -50,12 +50,12 @@ typedef struct grib_expression_string{ static grib_expression_class _grib_expression_class_string = { - 0, /* super */ - "string", /* name */ - sizeof(grib_expression_string),/* size of instance */ + 0, /* super */ + "string", /* name */ + sizeof(grib_expression_string),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_string_compare.cc b/src/grib_expression_class_string_compare.cc index ac54cb6d2..603846b7b 100644 --- a/src/grib_expression_class_string_compare.cc +++ b/src/grib_expression_class_string_compare.cc @@ -40,7 +40,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*,FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static int native_type(grib_expression*,grib_handle*); static int evaluate_long(grib_expression*,grib_handle*,long*); @@ -56,12 +56,12 @@ typedef struct grib_expression_string_compare{ static grib_expression_class _grib_expression_class_string_compare = { - 0, /* super */ - "string_compare", /* name */ - sizeof(grib_expression_string_compare),/* size of instance */ + 0, /* super */ + "string_compare", /* name */ + sizeof(grib_expression_string_compare),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_sub_string.cc b/src/grib_expression_class_sub_string.cc index dd44ec323..8ed6c3dff 100644 --- a/src/grib_expression_class_sub_string.cc +++ b/src/grib_expression_class_sub_string.cc @@ -37,7 +37,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*,FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static int native_type(grib_expression*,grib_handle*); static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); @@ -50,12 +50,12 @@ typedef struct grib_expression_sub_string{ static grib_expression_class _grib_expression_class_sub_string = { - 0, /* super */ - "sub_string", /* name */ - sizeof(grib_expression_sub_string),/* size of instance */ + 0, /* super */ + "sub_string", /* name */ + sizeof(grib_expression_sub_string),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_true.cc b/src/grib_expression_class_true.cc index c2cd5faf6..41f3a40ae 100644 --- a/src/grib_expression_class_true.cc +++ b/src/grib_expression_class_true.cc @@ -37,7 +37,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*,FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static int native_type(grib_expression*,grib_handle*); static int evaluate_long(grib_expression*,grib_handle*,long*); @@ -50,12 +50,12 @@ typedef struct grib_expression_true{ static grib_expression_class _grib_expression_class_true = { - 0, /* super */ - "true", /* name */ - sizeof(grib_expression_true),/* size of instance */ + 0, /* super */ + "true", /* name */ + sizeof(grib_expression_true),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_expression_class_unop.cc b/src/grib_expression_class_unop.cc index 0de77a02d..18eb073fb 100644 --- a/src/grib_expression_class_unop.cc +++ b/src/grib_expression_class_unop.cc @@ -41,7 +41,7 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ static void destroy(grib_context*,grib_expression* e); -static void print(grib_context*,grib_expression*,grib_handle*,FILE*); +static void print(grib_context*, grib_expression*, grib_handle*, FILE*); static void add_dependency(grib_expression* e, grib_accessor* observer); static string get_name(grib_expression* e); static int native_type(grib_expression*,grib_handle*); @@ -58,12 +58,12 @@ typedef struct grib_expression_unop{ static grib_expression_class _grib_expression_class_unop = { - 0, /* super */ - "unop", /* name */ - sizeof(grib_expression_unop),/* size of instance */ + 0, /* super */ + "unop", /* name */ + sizeof(grib_expression_unop),/* size of instance */ 0, /* inited */ - 0, /* constructor */ - &destroy, /* destructor */ + 0, /* constructor */ + &destroy, /* destructor */ &print, &add_dependency, &native_type, diff --git a/src/grib_fieldset.cc b/src/grib_fieldset.cc index a37013844..5f691a49c 100644 --- a/src/grib_fieldset.cc +++ b/src/grib_fieldset.cc @@ -103,7 +103,6 @@ static int grib_fieldset_new_column(grib_fieldset* set, int id, char* key, int t return err; } - set->columns[id].context = c; set->columns[id].name = grib_context_strdup(c, key); set->columns[id].type = type; set->columns[id].values_array_size = GRIB_START_ARRAY_SIZE; @@ -113,14 +112,12 @@ static int grib_fieldset_new_column(grib_fieldset* set, int id, char* key, int t static void grib_fieldset_delete_columns(grib_fieldset* set) { - int i = 0; - grib_context* c; - if (!set) return; - c = set->context; - for (i = 0; i < set->columns_size; i++) { + const grib_context* c = set->context; + + for (size_t i = 0; i < set->columns_size; i++) { int j = 0; switch (set->columns[i].type) { case GRIB_TYPE_LONG: @@ -146,22 +143,19 @@ static void grib_fieldset_delete_columns(grib_fieldset* set) static int grib_fieldset_columns_resize(grib_fieldset* set, size_t newsize) { - double* newdoubles; - long* newlongs; - char** newstrings; - int* newerrors; - int i = 0; - grib_context* c; - if (!set || !set->columns) return GRIB_INVALID_ARGUMENT; - c = set->context; + double* newdoubles = NULL; + long* newlongs = NULL; + char** newstrings = NULL; + int* newerrors = NULL; + const grib_context* c = set->context; if (newsize <= set->columns[0].values_array_size) return 0; - for (i = 0; i < set->columns_size; i++) { + for (size_t i = 0; i < set->columns_size; i++) { switch (set->columns[i].type) { case GRIB_TYPE_LONG: newlongs = (long*)grib_context_realloc(c, set->columns[i].long_values, @@ -818,12 +812,9 @@ static int grib_fieldset_resize_int_array(grib_int_array* a, size_t newsize) static void grib_fieldset_delete_int_array(grib_int_array* f) { - grib_context* c = NULL; - - if (!f) - return; - c = f->context; + if (!f) return; + const grib_context* c = f->context; grib_context_free(c, f->el); grib_context_free(c, f); } diff --git a/src/grib_filepool.cc b/src/grib_filepool.cc index 21f0a5b22..4f98a33e3 100644 --- a/src/grib_filepool.cc +++ b/src/grib_filepool.cc @@ -9,6 +9,8 @@ */ #include "grib_api_internal.h" +#include + #define GRIB_MAX_OPENED_FILES 200 #if GRIB_PTHREADS @@ -287,8 +289,8 @@ void grib_file_pool_delete_file(grib_file* file) void grib_file_close(const char* filename, int force, int* err) { - grib_file* file = NULL; - grib_context* context = grib_context_get_default(); + grib_file* file = NULL; + const grib_context* context = grib_context_get_default(); /* Performance: keep the files open to avoid opening and closing files when writing the output. */ /* So only call fclose() when too many files are open. */ @@ -423,15 +425,22 @@ void grib_file_delete(grib_file* file) // } //} - if (file->name) - free(file->name); - if (file->mode) - free(file->mode); - - if (file->buffer) { - free(file->buffer); - } + free(file->name); file->name = 0; + free(file->mode); file->mode = 0; + free(file->buffer); file->buffer = 0; grib_context_free(file->context, file); /* file = NULL; */ GRIB_MUTEX_UNLOCK(&mutex1); } + +void grib_file_pool_print(const char* title, FILE* out) +{ + int i = 0; + grib_file* file = file_pool.first; + printf("%s: size=%zu, num_opened_files=%d\n", title, file_pool.size, file_pool.number_of_opened_files); + while (file) { + printf("%s:\tfile_pool entry %d = %s\n", title, i++, file->name); + file = file->next; + } + printf("\n"); +} diff --git a/src/grib_gaussian_N1280.h b/src/grib_gaussian_N1280.h new file mode 100644 index 000000000..637ae3daf --- /dev/null +++ b/src/grib_gaussian_N1280.h @@ -0,0 +1,259 @@ +// Num elements = 1280 from the north pole to equator +static const double lats_N1280[] = { + 89.946187715665616, 89.876478353332288, 89.806357319542244, 89.736143271609578, 89.6658939412157, + 89.595627537554492, 89.525351592371393, 89.45506977912261, 89.3847841013921, 89.314495744374256, + 89.24420545380525, 89.173913722284126, 89.103620888238879, 89.033327191845927, 88.96303280826325, + 88.892737868230952, 88.822442471310097, 88.752146694650691, 88.681850598961759, 88.611554232668382, + 88.541257634868515, 88.470960837474877, 88.40066386679355, 88.330366744702559, 88.26006948954614, + 88.189772116820762, 88.119474639706425, 88.049177069484486, 87.978879415867283, 87.908581687261687, + 87.838283890981543, 87.767986033419561, 87.697688120188062, 87.627390156234085, 87.557092145935584, + 87.486794093180748, 87.416496001434894, 87.346197873795816, 87.275899713041966, 87.205601521672108, + 87.135303301939786, 87.065005055882821, 86.994706785348129, 86.924408492014166, 86.854110177408927, + 86.783811842927179, 86.713513489844246, 86.643215119328573, 86.572916732453024, 86.502618330203831, + 86.432319913489792, 86.362021483149363, 86.291723039957418, 86.221424584631109, 86.151126117835304, + 86.080827640187209, 86.010529152260403, 85.940230654588888, 85.869932147670127, 85.799633631968391, + 85.729335107917464, 85.659036575922883, 85.588738036364362, 85.518439489597966, 85.448140935957483, + 85.377842375756586, 85.307543809290152, 85.237245236835548, 85.16694665865414, 85.09664807499216, + 85.026349486081983, 84.95605089214304, 84.885752293382765, 84.81545368999717, 84.745155082171991, + 84.674856470082915, 84.604557853896708, 84.534259233771479, 84.463960609857125, 84.393661982296322, + 84.323363351224444, 84.253064716770425, 84.18276607905679, 84.112467438200326, 84.042168794312317, + 83.971870147498763, 83.901571497860914, 83.831272845495249, 83.760974190494011, 83.690675532945292, + 83.620376872933264, 83.550078210538487, 83.479779545838113, 83.409480878905782, 83.339182209812321, + 83.268883538625232, 83.198584865409657, 83.128286190227698, 83.057987513139125, 82.987688834201322, + 82.917390153469313, 82.84709147099602, 82.77679278683226, 82.706494101026948, 82.63619541362705, + 82.56589672467787, 82.495598034222837, 82.425299342304029, 82.355000648961692, 82.284701954234833, + 82.214403258160871, 82.144104560776, 82.073805862115165, 82.003507162211946, 81.933208461098829, + 81.862909758807191, 81.792611055367345, 81.722312350808508, 81.652013645158945, 81.581714938445955, + 81.511416230696042, 81.441117521934686, 81.370818812186627, 81.300520101475826, 81.230221389825374, + 81.159922677257711, 81.089623963794551, 81.019325249456955, 80.949026534265244, 80.878727818239184, + 80.808429101397948, 80.73813038376008, 80.667831665343556, 80.59753294616587, 80.527234226243991, + 80.456935505594302, 80.386636784232863, 80.316338062175078, 80.246039339436052, 80.175740616030438, + 80.105441891972376, 80.035143167275749, 79.9648444419539, 79.894545716019948, 79.824246989486554, + 79.753948262366038, 79.683649534670437, 79.61335080641139, 79.543052077600308, 79.472753348248219, + 79.402454618365894, 79.332155887963822, 79.261857157052191, 79.191558425640977, 79.121259693739859, + 79.050960961358285, 78.980662228505423, 78.910363495190211, 78.840064761421445, 78.769766027207638, + 78.699467292557102, 78.629168557477882, 78.558869821977908, 78.488571086064923, 78.418272349746417, + 78.347973613029708, 78.277674875922045, 78.207376138430348, 78.137077400561424, 78.066778662322022, + 77.996479923718596, 77.926181184757539, 77.855882445445019, 77.785583705787161, 77.71528496578982, + 77.644986225458879, 77.574687484799924, 77.504388743818524, 77.434090002520122, 77.363791260909963, + 77.293492518993247, 77.22319377677502, 77.15289503426024, 77.082596291453768, 77.012297548360323, + 76.941998804984564, 76.871700061330955, 76.801401317404, 76.731102573208048, 76.660803828747362, + 76.59050508402602, 76.520206339048215, 76.449907593817869, 76.379608848338933, 76.3093101026152, + 76.239011356650423, 76.16871261044831, 76.098413864012443, 76.028115117346374, 75.957816370453543, + 75.887517623337317, 75.81721887600105, 75.746920128447996, 75.67662138068134, 75.60632263270422, + 75.536023884519707, 75.465725136130786, 75.395426387540439, 75.325127638751567, 75.254828889766983, + 75.184530140589501, 75.114231391221821, 75.043932641666672, 74.973633891926625, 74.903335142004323, + 74.833036391902269, 74.762737641622991, 74.692438891168877, 74.622140140542356, 74.551841389745761, + 74.481542638781434, 74.411243887651622, 74.340945136358584, 74.270646384904481, 74.200347633291472, + 74.13004888152166, 74.059750129597163, 73.98945137751997, 73.919152625292114, 73.848853872915541, + 73.778555120392184, 73.70825636772399, 73.637957614912779, 73.567658861960396, 73.497360108868662, + 73.427061355639339, 73.356762602274188, 73.2864638487749, 73.216165095143182, 73.145866341380668, + 73.075567587489019, 73.005268833469799, 72.934970079324657, 72.864671325055056, 72.794372570662574, + 72.724073816148703, 72.653775061514935, 72.583476306762691, 72.513177551893421, 72.442878796908545, + 72.3725800418094, 72.302281286597392, 72.231982531273843, 72.161683775840089, 72.091385020297409, + 72.02108626464711, 71.950787508890414, 71.880488753028587, 71.810189997062835, 71.739891240994368, + 71.669592484824364, 71.599293728553988, 71.528994972184378, 71.458696215716685, 71.388397459152031, + 71.318098702491469, 71.247799945736105, 71.177501188887007, 71.107202431945211, 71.036903674911756, + 70.966604917787635, 70.896306160573886, 70.826007403271475, 70.755708645881384, 70.685409888404578, + 70.615111130841967, 70.544812373194532, 70.474513615463138, 70.404214857648739, 70.333916099752187, + 70.263617341774406, 70.193318583716191, 70.123019825578467, 70.052721067362043, 69.982422309067744, + 69.912123550696421, 69.841824792248843, 69.771526033725834, 69.701227275128161, 69.630928516456592, + 69.560629757711908, 69.490330998894862, 69.420032240006194, 69.349733481046613, 69.279434722016902, + 69.209135962917699, 69.138837203749759, 69.068538444513763, 68.998239685210365, 68.927940925840304, + 68.85764216640419, 68.787343406902693, 68.717044647336493, 68.646745887706189, 68.576447128012447, + 68.506148368255865, 68.435849608437067, 68.365550848556666, 68.295252088615257, 68.224953328613438, + 68.154654568551791, 68.084355808430871, 68.014057048251274, 67.943758288013555, 67.873459527718282, + 67.803160767365966, 67.732862006957205, 67.662563246492482, 67.592264485972336, 67.521965725397308, + 67.451666964767895, 67.381368204084609, 67.311069443347961, 67.240770682558434, 67.170471921716526, + 67.100173160822706, 67.029874399877471, 66.95957563888129, 66.889276877834618, 66.818978116737924, + 66.748679355591662, 66.678380594396273, 66.608081833152212, 66.537783071859891, 66.467484310519808, + 66.397185549132331, 66.326886787697887, 66.256588026216932, 66.186289264689833, 66.115990503117033, + 66.045691741498899, 65.975392979835888, 65.905094218128355, 65.834795456376696, 65.764496694581283, + 65.694197932742526, 65.623899170860767, 65.553600408936404, 65.483301646969792, 65.413002884961315, + 65.342704122911286, 65.272405360820116, 65.202106598688133, 65.131807836515677, 65.061509074303089, + 64.991210312050711, 64.920911549758912, 64.850612787427963, 64.780314025058246, 64.710015262650074, + 64.639716500203733, 64.569417737719576, 64.499118975197902, 64.428820212639039, 64.358521450043284, + 64.288222687410922, 64.21792392474228, 64.147625162037642, 64.07732639929732, 64.00702763652157, + 63.93672887371072, 63.866430110865004, 63.796131347984762, 63.725832585070251, 63.655533822121711, + 63.585235059139464, 63.514936296123757, 63.444637533074854, 63.374338769993031, 63.304040006878537, + 63.23374124373165, 63.163442480552604, 63.093143717341647, 63.022844954099064, 62.952546190825068, + 62.882247427519928, 62.811948664183866, 62.741649900817137, 62.67135113741999, 62.60105237399263, + 62.530753610535321, 62.460454847048261, 62.3901560835317, 62.319857319985871, 62.249558556410982, + 62.179259792807258, 62.108961029174914, 62.038662265514176, 61.968363501825259, 61.898064738108381, + 61.827765974363729, 61.757467210591535, 61.687168446791986, 61.616869682965287, 61.546570919111666, + 61.476272155231321, 61.405973391324409, 61.335674627391185, 61.265375863431785, 61.195077099446451, + 61.124778335435344, 61.054479571398652, 60.984180807336578, 60.913882043249295, 60.843583279137007, + 60.773284514999872, 60.702985750838074, 60.632686986651805, 60.562388222441243, 60.492089458206543, + 60.421790693947884, 60.35149192966545, 60.28119316535939, 60.21089440102989, 60.140595636677112, + 60.070296872301235, 59.999998107902378, 59.929699343480763, 59.859400579036503, 59.78910181456979, + 59.718803050080759, 59.64850428556958, 59.578205521036402, 59.507906756481383, 59.43760799190467, + 59.3673092273064, 59.29701046268675, 59.226711698045854, 59.156412933383855, 59.086114168700909, + 59.015815403997145, 58.945516639272725, 58.875217874527763, 58.804919109762423, 58.73462034497684, + 58.664321580171141, 58.594022815345468, 58.523724050499972, 58.453425285634758, 58.383126520749968, + 58.312827755845746, 58.242528990922203, 58.172230225979497, 58.101931461017728, 58.031632696037022, + 57.961333931037537, 57.891035166019364, 57.820736400982646, 57.75043763592749, 57.680138870854037, + 57.60984010576238, 57.539541340652676, 57.469242575525016, 57.398943810379521, 57.328645045216312, + 57.258346280035504, 57.188047514837208, 57.117748749621541, 57.047449984388614, 56.977151219138541, + 56.90685245387143, 56.836553688587379, 56.766254923286517, 56.695956157968951, 56.625657392634771, + 56.555358627284086, 56.485059861917016, 56.41476109653366, 56.34446233113411, 56.274163565718467, + 56.203864800286865, 56.133566034839362, 56.063267269376091, 55.992968503897131, 55.922669738402583, + 55.852370972892551, 55.782072207367136, 55.711773441826416, 55.641474676270505, 55.571175910699488, + 55.500877145113449, 55.430578379512511, 55.360279613896743, 55.289980848266232, 55.219682082621084, + 55.149383316961377, 55.07908455128721, 55.008785785598668, 54.938487019895831, 54.868188254178797, + 54.797889488447652, 54.727590722702473, 54.657291956943347, 54.586993191170357, 54.516694425383605, + 54.446395659583146, 54.376096893769081, 54.305798127941479, 54.235499362100448, 54.165200596246031, + 54.094901830378333, 54.024603064497434, 53.954304298603383, 53.884005532696307, 53.813706766776235, + 53.743408000843282, 53.673109234897495, 53.602810468938962, 53.53251170296776, 53.462212936983953, + 53.391914170987633, 53.321615404978871, 53.251316638957725, 53.181017872924265, 53.110719106878584, + 53.040420340820731, 52.970121574750792, 52.899822808668837, 52.829524042574917, 52.759225276469131, + 52.688926510351514, 52.618627744222159, 52.548328978081123, 52.478030211928477, 52.407731445764284, + 52.337432679588609, 52.26713391340153, 52.196835147203096, 52.126536380993372, 52.056237614772435, + 51.985938848540336, 51.915640082297152, 51.845341316042933, 51.775042549777737, 51.704743783501634, + 51.634445017214695, 51.56414625091697, 51.493847484608516, 51.423548718289396, 51.353249951959683, + 51.282951185619417, 51.21265241926865, 51.14235365290746, 51.072054886535909, 51.001756120154049, + 50.931457353761914, 50.86115858735959, 50.790859820947119, 50.720561054524559, 50.650262288091959, + 50.579963521649397, 50.509664755196901, 50.439365988734544, 50.369067222262359, 50.298768455780426, + 50.228469689288779, 50.158170922787484, 50.087872156276575, 50.017573389756123, 49.947274623226157, + 49.876975856686762, 49.80667709013796, 49.736378323579807, 49.66607955701236, 49.595780790435676, + 49.525482023849783, 49.455183257254745, 49.384884490650613, 49.314585724037435, 49.244286957415234, + 49.173988190784094, 49.103689424144044, 49.03339065749514, 48.963091890837418, 48.892793124170929, + 48.822494357495721, 48.752195590811837, 48.681896824119335, 48.611598057418242, 48.541299290708608, + 48.47100052399049, 48.400701757263917, 48.330402990528938, 48.260104223785596, 48.189805457033941, + 48.119506690274015, 48.049207923505868, 47.978909156729507, 47.908610389945018, 47.838311623152421, + 47.76801285635176, 47.697714089543084, 47.627415322726435, 47.557116555901828, 47.486817789069342, + 47.416519022228997, 47.346220255380835, 47.275921488524894, 47.205622721661214, 47.13532395478984, + 47.065025187910805, 46.994726421024154, 46.924427654129929, 46.85412888722815, 46.783830120318882, + 46.713531353402139, 46.643232586477971, 46.572933819546414, 46.502635052607502, 46.432336285661272, + 46.362037518707766, 46.291738751747012, 46.221439984779053, 46.151141217803925, 46.080842450821663, + 46.01054368383231, 45.94024491683588, 45.869946149832437, 45.799647382821995, 45.729348615804589, + 45.659049848780263, 45.588751081749038, 45.51845231471097, 45.448153547666081, 45.377854780614399, + 45.30755601355596, 45.237257246490813, 45.166958479418959, 45.096659712340461, 45.026360945255341, + 44.956062178163634, 44.885763411065362, 44.81546464396056, 44.745165876849271, 44.674867109731515, + 44.604568342607337, 44.534269575476756, 44.463970808339802, 44.39367204119651, 44.323373274046915, + 44.253074506891046, 44.182775739728925, 44.112476972560586, 44.042178205386072, 43.971879438205391, + 43.9015806710186, 43.831281903825705, 43.760983136626741, 43.690684369421732, 43.620385602210717, + 43.550086834993728, 43.479788067770777, 43.409489300541907, 43.339190533307139, 43.26889176606651, + 43.19859299882004, 43.128294231567757, 43.057995464309691, 42.987696697045862, 42.917397929776307, + 42.847099162501053, 42.776800395220121, 42.706501627933541, 42.63620286064134, 42.565904093343548, + 42.495605326040177, 42.425306558731272, 42.355007791416853, 42.284709024096927, 42.214410256771551, + 42.144111489440725, 42.073812722104492, 42.003513954762873, 41.933215187415882, 41.862916420063563, + 41.792617652705921, 41.722318885343, 41.6520201179748, 41.581721350601363, 41.511422583222718, + 41.441123815838885, 41.370825048449873, 41.300526281055724, 41.230227513656445, 41.159928746252085, + 41.089629978842645, 41.01933121142816, 40.949032444008644, 40.878733676584126, 40.808434909154634, + 40.738136141720176, 40.667837374280786, 40.597538606836487, 40.527239839387299, 40.456941071933244, + 40.386642304474343, 40.316343537010617, 40.246044769542102, 40.175746002068806, 40.105447234590748, + 40.035148467107952, 39.964849699620437, 39.894550932128247, 39.824252164631375, 39.753953397129855, + 39.683654629623703, 39.613355862112947, 39.543057094597607, 39.472758327077692, 39.402459559553229, + 39.332160792024254, 39.261862024490775, 39.191563256952804, 39.121264489410365, 39.050965721863491, + 38.980666954312184, 38.910368186756479, 38.840069419196389, 38.769770651631937, 38.699471884063136, + 38.629173116490001, 38.558874348912568, 38.488575581330842, 38.418276813744846, 38.347978046154608, + 38.277679278560143, 38.20738051096145, 38.137081743358586, 38.066782975751536, 37.99648420814033, + 37.926185440524989, 37.855886672905527, 37.785587905281965, 37.715289137654317, 37.644990370022605, + 37.574691602386856, 37.504392834747065, 37.434094067103274, 37.363795299455489, 37.293496531803719, + 37.223197764147997, 37.152898996488332, 37.082600228824752, 37.012301461157264, 36.942002693485883, + 36.871703925810628, 36.801405158131523, 36.731106390448581, 36.660807622761808, 36.590508855071242, + 36.520210087376888, 36.449911319678755, 36.379612551976876, 36.309313784271254, 36.239015016561908, + 36.16871624884886, 36.098417481132117, 36.028118713411708, 35.957819945687639, 35.887521177959933, + 35.817222410228595, 35.746923642493655, 35.676624874755113, 35.606326107012997, 35.536027339267314, + 35.465728571518085, 35.395429803765317, 35.325131036009047, 35.254832268249267, 35.184533500486005, + 35.114234732719261, 35.043935964949064, 34.973637197175435, 34.903338429398374, 34.833039661617903, + 34.762740893834028, 34.692442126046771, 34.622143358256153, 34.551844590462188, 34.481545822664863, + 34.411247054864234, 34.340948287060286, 34.270649519253041, 34.200350751442521, 34.130051983628725, + 34.059753215811682, 33.989454447991392, 33.919155680167876, 33.848856912341155, 33.778558144511237, + 33.708259376678136, 33.637960608841851, 33.567661841002426, 33.497363073159853, 33.42706430531414, + 33.356765537465314, 33.286466769613391, 33.216168001758369, 33.145869233900278, 33.075570466039117, + 33.005271698174909, 32.934972930307666, 32.864674162437396, 32.794375394564113, 32.724076626687825, + 32.653777858808567, 32.583479090926325, 32.513180323041112, 32.442881555152965, 32.372582787261891, + 32.302284019367875, 32.231985251470959, 32.161686483571145, 32.091387715668439, 32.021088947762863, + 31.950790179854422, 31.880491411943137, 31.810192644029012, 31.739893876112063, 31.669595108192297, + 31.599296340269738, 31.528997572344384, 31.458698804416255, 31.388400036485361, 31.318101268551715, + 31.247802500615318, 31.177503732676204, 31.107204964734358, 31.036906196789811, 30.966607428842572, + 30.896308660892647, 30.826009892940046, 30.755711124984781, 30.685412357026873, 30.615113589066322, + 30.544814821103138, 30.47451605313735, 30.404217285168947, 30.333918517197947, 30.263619749224372, + 30.19332098124822, 30.123022213269511, 30.052723445288244, 29.98242467730444, 29.91212590931811, + 29.841827141329258, 29.771528373337894, 29.701229605344039, 29.630930837347698, 29.560632069348884, + 29.490333301347597, 29.420034533343859, 29.349735765337677, 29.279436997329057, 29.209138229318015, + 29.138839461304556, 29.068540693288696, 28.998241925270449, 28.927943157249814, 28.857644389226806, + 28.787345621201432, 28.717046853173709, 28.646748085143642, 28.576449317111244, 28.506150549076519, + 28.435851781039485, 28.365553013000145, 28.29525424495851, 28.224955476914594, 28.154656708868405, + 28.084357940819952, 28.014059172769244, 27.94376040471629, 27.873461636661098, 27.803162868603682, + 27.732864100544052, 27.662565332482213, 27.592266564418171, 27.521967796351948, 27.451669028283543, + 27.381370260212968, 27.311071492140236, 27.240772724065348, 27.170473955988321, 27.100175187909159, + 27.029876419827872, 26.959577651744471, 26.889278883658971, 26.818980115571364, 26.748681347481678, + 26.678382579389908, 26.608083811296069, 26.53778504320017, 26.467486275102218, 26.397187507002222, + 26.326888738900195, 26.256589970796135, 26.186291202690064, 26.115992434581983, 26.045693666471902, + 25.975394898359827, 25.90509613024577, 25.834797362129745, 25.764498594011751, 25.694199825891793, + 25.623901057769892, 25.553602289646051, 25.483303521520277, 25.413004753392578, 25.342705985262967, + 25.272407217131445, 25.202108448998025, 25.13180968086272, 25.061510912725527, 24.991212144586456, + 24.920913376445526, 24.850614608302738, 24.780315840158096, 24.710017072011613, 24.639718303863294, + 24.569419535713152, 24.499120767561195, 24.428821999407425, 24.358523231251851, 24.288224463094483, + 24.217925694935328, 24.1476269267744, 24.077328158611696, 24.007029390447226, 23.936730622281004, + 23.866431854113038, 23.796133085943328, 23.725834317771888, 23.655535549598721, 23.585236781423838, + 23.514938013247242, 23.444639245068949, 23.374340476888957, 23.304041708707278, 23.233742940523921, + 23.163444172338895, 23.0931454041522, 23.022846635963852, 22.952547867773848, 22.882249099582204, + 22.811950331388925, 22.741651563194019, 22.671352794997489, 22.60105402679935, 22.530755258599601, + 22.460456490398254, 22.390157722195315, 22.319858953990789, 22.249560185784691, 22.179261417577013, + 22.108962649367779, 22.038663881156989, 21.968365112944642, 21.898066344730758, 21.827767576515338, + 21.757468808298391, 21.687170040079913, 21.616871271859928, 21.546572503638437, 21.47627373541544, + 21.40597496719095, 21.335676198964972, 21.265377430737512, 21.195078662508585, 21.124779894278181, + 21.054481126046323, 20.984182357813012, 20.913883589578251, 20.843584821342048, 20.773286053104417, + 20.702987284865355, 20.632688516624874, 20.562389748382977, 20.492090980139672, 20.421792211894967, + 20.35149344364887, 20.28119467540138, 20.210895907152516, 20.140597138902272, 20.070298370650661, + 19.999999602397686, 19.929700834143357, 19.859402065887682, 19.789103297630657, 19.718804529372303, + 19.648505761112613, 19.578206992851602, 19.507908224589269, 19.437609456325632, 19.367310688060684, + 19.297011919794439, 19.226713151526898, 19.15641438325807, 19.086115614987968, 19.015816846716586, + 18.945518078443939, 18.875219310170031, 18.804920541894862, 18.734621773618446, 18.664323005340787, + 18.594024237061891, 18.523725468781763, 18.453426700500408, 18.383127932217832, 18.312829163934047, + 18.242530395649048, 18.172231627362851, 18.101932859075458, 18.031634090786874, 17.96133532249711, + 17.89103655420616, 17.820737785914044, 17.75043901762076, 17.680140249326314, 17.60984148103071, + 17.539542712733962, 17.469243944436066, 17.39894517613704, 17.328646407836878, 17.258347639535586, + 17.188048871233182, 17.117750102929655, 17.04745133462502, 16.977152566319283, 16.906853798012452, + 16.836555029704527, 16.766256261395515, 16.69595749308542, 16.625658724774254, 16.555359956462013, + 16.485061188148713, 16.41476241983435, 16.344463651518936, 16.274164883202477, 16.203866114884974, + 16.133567346566434, 16.063268578246863, 15.992969809926265, 15.922671041604652, 15.852372273282016, + 15.78207350495838, 15.711774736633735, 15.641475968308091, 15.571177199981456, 15.500878431653829, + 15.430579663325226, 15.360280894995643, 15.289982126665089, 15.219683358333569, 15.149384590001089, + 15.07908582166765, 15.008787053333259, 14.938488284997929, 14.868189516661655, 14.797890748324447, + 14.727591979986309, 14.657293211647247, 14.586994443307265, 14.516695674966371, 14.446396906624567, + 14.376098138281863, 14.305799369938256, 14.23550060159376, 14.165201833248371, 14.0949030649021, + 14.024604296554955, 13.954305528206934, 13.884006759858046, 13.813707991508297, 13.743409223157688, + 13.673110454806226, 13.602811686453919, 13.532512918100766, 13.46221414974678, 13.391915381391959, + 13.32161661303631, 13.251317844679837, 13.181019076322551, 13.110720307964451, 13.040421539605545, + 12.970122771245832, 12.899824002885323, 12.829525234524022, 12.759226466161934, 12.688927697799061, + 12.618628929435411, 12.548330161070988, 12.478031392705796, 12.407732624339841, 12.337433855973126, + 12.267135087605659, 12.196836319237443, 12.126537550868482, 12.056238782498781, 11.985940014128348, + 11.915641245757183, 11.845342477385294, 11.775043709012685, 11.704744940639358, 11.634446172265324, + 11.564147403890583, 11.493848635515141, 11.423549867139002, 11.35325109876217, 11.282952330384653, + 11.212653562006453, 11.142354793627575, 11.072056025248026, 11.001757256867807, 10.931458488486923, + 10.861159720105382, 10.790860951723188, 10.720562183340341, 10.65026341495685, 10.579964646572719, + 10.509665878187954, 10.439367109802557, 10.369068341416533, 10.298769573029887, 10.228470804642624, + 10.158172036254747, 10.087873267866264, 10.017574499477174, 9.9472757310874869, 9.8769769626972046, + 9.8066781943063344, 9.7363794259148779, 9.6660806575228388, 9.5957818891302242, 9.5254831207370376, + 9.4551843523432826, 9.3848855839489662, 9.3145868155540921, 9.2442880471586619, 9.1739892787626829, + 9.1036905103661585, 9.0333917419690941, 8.963092973571495, 8.8927942051733631, 8.8224954367747017, + 8.7521966683755217, 8.6818978999758194, 8.6115991315756055, 8.5413003631748801, 8.4710015947736537, + 8.4007028263719228, 8.3304040579696963, 8.2601052895669778, 8.1898065211637725, 8.1195077527600841, + 8.049208984355916, 7.9789102159512737, 7.9086114475461606, 7.8383126791405831, 7.7680139107345463, + 7.6977151423280494, 7.6274163739210996, 7.557117605513703, 7.4868188371058624, 7.4165200686975803, + 7.3462213002888648, 7.2759225318797176, 7.2056237634701441, 7.1353249950601469, 7.0650262266497315, + 6.994727458238903, 6.924428689827665, 6.8541299214160212, 6.7838311530039768, 6.7135323845915353, + 6.6432336161787013, 6.5729348477654792, 6.5026360793518734, 6.4323373109378874, 6.3620385425235257, + 6.2917397741087928, 6.2214410056936931, 6.151142237278231, 6.0808434688624091, 6.0105447004462347, + 5.9402459320297085, 5.869947163612836, 5.7996483951956233, 5.729349626778073, 5.6590508583601888, + 5.5887520899419751, 5.5184533215234373, 5.4481545531045787, 5.3778557846854023, 5.3075570162659149, + 5.2372582478461194, 5.1669594794260192, 5.0966607110056197, 5.0263619425849244, 4.9560631741639369, + 4.8857644057426626, 4.8154656373211049, 4.7451668688992683, 4.6748681004771564, 4.6045693320547736, + 4.5342705636321252, 4.4639717952092139, 4.3936730267860451, 4.3233742583626205, 4.2530754899389471, + 4.1827767215150269, 4.1124779530908659, 4.0421791846664661, 3.9718804162418326, 3.90158164781697, + 3.8312828793918823, 3.7609841109665734, 3.6906853425410477, 3.6203865741153085, 3.5500878056893601, + 3.4797890372632065, 3.4094902688368531, 3.339191500410303, 3.2688927319835597, 3.1985939635566285, + 3.1282951951295126, 3.0579964267022164, 2.9876976582747439, 2.9173988898470999, 2.8471001214192873, + 2.7768013529913107, 2.7065025845631743, 2.6362038161348824, 2.5659050477064382, 2.4956062792778466, + 2.4253075108491116, 2.3550087424202366, 2.2847099739912267, 2.2144112055620848, 2.1441124371328155, + 2.0738136687034232, 2.0035149002739114, 1.9332161318442849, 1.8629173634145471, 1.792618594984702, + 1.7223198265547539, 1.6520210581247066, 1.5817222896945646, 1.5114235212643317, 1.4411247528340119, + 1.3708259844036093, 1.300527215973128, 1.2302284475425722, 1.1599296791119456, 1.0896309106812523, + 1.0193321422504964, 0.949033373819682, 0.87873460538881287, 0.80843583695789356, 0.73813706852692773, + 0.66783830009591949, 0.59753953166487306, 0.52724076323379232, 0.45694199480268116, 0.3866432263715438, + 0.31634445794038429, 0.24604568950920663, 0.17574692107801482, 0.10544815264681295, 0.035149384215604956 +}; diff --git a/src/grib_gaussian_N640.h b/src/grib_gaussian_N640.h new file mode 100644 index 000000000..b82e1a97f --- /dev/null +++ b/src/grib_gaussian_N640.h @@ -0,0 +1,131 @@ +// Num elements = 640 from the north pole to equator +static const double lats_N640[] = { + 89.892396445590066, 89.753004943174034, 89.612790258599077, 89.472389582061126, 89.331918354381827, + 89.191412986832432, 89.050888539966436, 88.91035235926023, 88.76980845110036, 88.629259185411627, + 88.488706053376362, 88.348150039999084, 88.207591822004105, 88.067031879650926, 87.926470563186442, + 87.785908134040668, 87.645344791295628, 87.504780689222315, 87.364215949214667, 87.223650668104085, + 87.083084924070917, 86.942518780928566, 86.801952291278369, 86.661385498868242, 86.520818440379529, + 86.380251146798656, 86.239683644481104, 86.0991159559849, 85.958548100730781, 85.817980095529578, + 85.677411955006008, 85.536843691942948, 85.396275317562669, 85.255706841757572, 85.115138273281829, + 84.974569619910426, 84.834000888572191, 84.693432085462035, 84.552863216135577, 84.412294285589354, + 84.271725298329656, 84.131156258431133, 83.990587169587158, 83.850018035153667, 83.709448858186462, + 83.568879641474325, 83.428310387567549, 83.287741098802584, 83.147171777324388, 83.006602425105484, + 82.866033043962815, 82.725463635573107, 82.584894201485696, 82.444324743134914, 82.303755261850071, + 82.163185758865239, 82.022616235327504, 81.882046692304485, 81.741477130791196, 81.600907551715878, + 81.460337955945846, 81.319768344292086, 81.179198717514012, 81.038629076323318, 80.898059421387785, + 80.757489753334553, 80.616920072753146, 80.47635038019834, 80.335780676192584, 80.195210961228469, + 80.054641235770603, 79.914071500257819, 79.773501755104689, 79.632932000703448, 79.492362237425226, + 79.351792465621628, 79.211222685625927, 79.070652897754229, 78.930083102306568, 78.789513299567957, + 78.648943489809355, 78.508373673288318, 78.367803850250056, 78.227234020928066, 78.086664185544819, + 77.946094344312371, 77.805524497433041, 77.664954645099883, 77.524384787497311, 77.383814924801513, + 77.243245057180829, 77.102675184796354, 76.962105307802219, 76.821535426345932, 76.680965540568806, + 76.540395650606285, 76.399825756588143, 76.259255858638895, 76.118685956877997, 75.978116051420102, + 75.837546142375359, 75.69697622984954, 75.556406313944308, 75.41583639475742, 75.275266472382896, + 75.134696546911186, 74.994126618429377, 74.853556687021296, 74.712986752767719, 74.57241681574645, + 74.431846876032495, 74.291276933698185, 74.150706988813226, 74.010137041445006, 73.869567091658411, + 73.728997139516167, 73.588427185078871, 73.447857228405013, 73.307287269551111, 73.166717308571819, + 73.026147345520002, 72.885577380446747, 72.745007413401481, 72.604437444432065, 72.463867473584784, + 72.323297500904502, 72.182727526434604, 72.042157550217183, 71.901587572292982, 71.761017592701492, + 71.620447611481026, 71.47987762866866, 71.339307644300462, 71.198737658411332, 71.058167671035164, + 70.917597682204899, 70.777027691952398, 70.636457700308753, 70.495887707304007, 70.355317712967462, + 70.214747717327526, 70.074177720411782, 69.933607722247146, 69.793037722859665, 69.65246772227475, + 69.511897720517084, 69.37132771761064, 69.230757713578825, 69.090187708444333, 68.949617702229318, + 68.809047694955296, 68.668477686643286, 68.52790767731365, 68.387337666986312, 68.246767655680657, + 68.106197643415527, 67.965627630209354, 67.825057616080073, 67.684487601045149, 67.543917585121662, + 67.403347568326168, 67.262777550674912, 67.122207532183722, 66.981637512867991, 66.841067492742795, + 66.700497471822814, 66.559927450122359, 66.41935742765547, 66.278787404435761, 66.138217380476604, + 65.997647355791017, 65.85707733039176, 65.716507304291198, 65.575937277501538, 65.435367250034616, + 65.294797221902016, 65.154227193115119, 65.013657163684968, 64.873087133622406, 64.732517102938033, + 64.591947071642196, 64.451377039745026, 64.310807007256443, 64.170236974186125, 64.029666940543564, + 63.889096906338061, 63.748526871578648, 63.607956836274255, 63.467386800433559, 63.326816764065093, + 63.186246727177178, 63.045676689778013, 62.905106651875542, 62.764536613477638, 62.62396657459194, + 62.483396535225978, 62.342826495387122, 62.202256455082583, 62.061686414319418, 61.921116373104539, + 61.780546331444761, 61.639976289346727, 61.499406246816953, 61.358836203861841, 61.21826616048768, + 61.077696116700601, 60.937126072506608, 60.796556027911663, 60.655985982921543, 60.515415937541938, + 60.374845891778421, 60.234275845636503, 60.093705799121537, 59.953135752238794, 59.812565704993467, + 59.671995657390596, 59.531425609435225, 59.390855561132213, 59.250285512486386, 59.10971546350244, + 58.96914541418505, 58.828575364538722, 58.688005314567938, 58.547435264277105, 58.406865213670514, + 58.266295162752428, 58.125725111526968, 57.985155059998249, 57.844585008170284, 57.704014956047033, + 57.563444903632337, 57.422874850930043, 57.282304797943887, 57.141734744677549, 57.001164691134662, + 56.860594637318769, 56.720024583233375, 56.579454528881925, 56.438884474267795, 56.29831441939433, + 56.157744364264779, 56.017174308882367, 55.876604253250278, 55.736034197371588, 55.595464141249401, + 55.45489408488671, 55.314324028286471, 55.173753971451625, 55.033183914385013, 54.892613857089486, + 54.752043799567822, 54.611473741822735, 54.470903683856939, 54.330333625673063, 54.189763567273758, + 54.049193508661538, 53.90862344983897, 53.768053390808532, 53.627483331572677, 53.486913272133812, + 53.346343212494332, 53.205773152656562, 53.065203092622802, 52.924633032395342, 52.784062971976404, + 52.643492911368206, 52.502922850572908, 52.362352789592649, 52.221782728429538, 52.081212667085637, + 51.940642605563028, 51.800072543863692, 51.659502481989627, 51.518932419942786, 51.378362357725095, + 51.237792295338465, 51.097222232784773, 50.956652170065858, 50.81608210718354, 50.675512044139623, + 50.534941980935862, 50.39437191757402, 50.253801854055808, 50.113231790382912, 49.972661726557028, + 49.832091662579785, 49.691521598452823, 49.550951534177734, 49.410381469756118, 49.269811405189529, + 49.129241340479489, 48.988671275627539, 48.848101210635171, 48.707531145503857, 48.56696108023506, + 48.42639101483023, 48.285820949290759, 48.145250883618075, 48.004680817813544, 47.864110751878535, + 47.723540685814392, 47.582970619622444, 47.442400553303997, 47.301830486860368, 47.161260420292813, + 47.020690353602596, 46.880120286790955, 46.73955021985914, 46.598980152808338, 46.458410085639763, + 46.317840018354602, 46.177269950954006, 46.036699883439134, 45.896129815811136, 45.755559748071114, + 45.614989680220205, 45.474419612259481, 45.333849544190024, 45.193279476012933, 45.052709407729239, + 44.912139339339987, 44.771569270846214, 44.630999202248923, 44.490429133549149, 44.349859064747854, + 44.209288995846045, 44.068718926844674, 43.928148857744716, 43.787578788547094, 43.64700871925276, + 43.506438649862638, 43.365868580377636, 43.225298510798666, 43.0847284411266, 42.944158371362349, + 42.803588301506764, 42.663018231560706, 42.522448161525034, 42.381878091400594, 42.241308021188203, + 42.100737950888686, 41.960167880502873, 41.819597810031553, 41.679027739475522, 41.538457668835562, + 41.397887598112455, 41.257317527306981, 41.116747456419873, 40.976177385451912, 40.835607314403816, + 40.695037243276325, 40.554467172070169, 40.41389710078608, 40.273327029424742, 40.132756957986885, + 39.992186886473185, 39.851616814884331, 39.711046743220997, 39.570476671483874, 39.429906599673615, + 39.289336527790894, 39.148766455836338, 39.008196383810613, 38.867626311714339, 38.727056239548169, + 38.5864861673127, 38.44591609500857, 38.305346022636385, 38.164775950196741, 38.02420587769025, + 37.883635805117493, 37.743065732479067, 37.602495659775542, 37.461925587007492, 37.321355514175501, + 37.180785441280122, 37.040215368321896, 36.899645295301404, 36.759075222219167, 36.618505149075737, + 36.477935075871656, 36.33736500260742, 36.196794929283605, 36.056224855900687, 35.9156547824592, + 35.775084708959632, 35.634514635402525, 35.493944561788332, 35.353374488117588, 35.21280441439076, + 35.072234340608333, 34.931664266770788, 34.79109419287861, 34.650524118932253, 34.509954044932208, + 34.369383970878907, 34.228813896772813, 34.088243822614395, 33.9476737484041, 33.807103674142361, + 33.66653359982962, 33.525963525466317, 33.385393451052892, 33.244823376589757, 33.104253302077339, + 32.963683227516071, 32.823113152906366, 32.682543078248621, 32.541973003543255, 32.401402928790681, + 32.260832853991289, 32.120262779145477, 31.979692704253651, 31.839122629316183, 31.698552554333489, + 31.55798247930592, 31.417412404233875, 31.276842329117731, 31.136272253957859, 30.99570217875463, + 30.855132103508407, 30.71456202821955, 30.573991952888438, 30.433421877515418, 30.292851802100841, + 30.152281726645064, 30.011711651148435, 29.87114157561129, 29.730571500033992, 29.590001424416862, + 29.449431348760253, 29.308861273064483, 29.168291197329893, 29.027721121556816, 28.887151045745565, + 28.746580969896474, 28.606010894009859, 28.465440818086037, 28.324870742125327, 28.184300666128038, + 28.043730590094491, 27.903160514024975, 27.762590437919812, 27.622020361779295, 27.481450285603731, + 27.340880209393415, 27.200310133148644, 27.05974005686971, 26.919169980556905, 26.778599904210516, + 26.638029827830831, 26.497459751418134, 26.356889674972713, 26.216319598494842, 26.075749521984797, + 25.935179445442859, 25.794609368869299, 25.654039292264386, 25.513469215628398, 25.3728991389616, + 25.232329062264245, 25.091758985536615, 24.951188908778963, 24.810618831991551, 24.670048755174633, + 24.529478678328466, 24.388908601453309, 24.248338524549407, 24.107768447617016, 23.96719837065638, + 23.826628293667756, 23.686058216651375, 23.545488139607492, 23.404918062536346, 23.264347985438178, + 23.123777908313219, 22.98320783116171, 22.84263775398389, 22.70206767677999, 22.561497599550243, + 22.420927522294875, 22.280357445014126, 22.139787367708202, 21.999217290377352, 21.858647213021786, + 21.718077135641735, 21.577507058237412, 21.436936980809044, 21.296366903356844, 21.155796825881037, + 21.015226748381831, 20.874656670859444, 20.734086593314085, 20.593516515745968, 20.452946438155308, + 20.312376360542309, 20.171806282907177, 20.031236205250121, 19.890666127571347, 19.750096049871054, + 19.609525972149449, 19.468955894406733, 19.328385816643106, 19.187815738858767, 19.04724566105391, + 18.906675583228736, 18.766105505383443, 18.625535427518219, 18.484965349633256, 18.344395271728757, + 18.203825193804899, 18.063255115861882, 17.922685037899889, 17.782114959919113, 17.641544881919739, + 17.500974803901951, 17.360404725865926, 17.219834647811862, 17.079264569739937, 16.938694491650331, + 16.798124413543224, 16.657554335418794, 16.516984257277226, 16.376414179118694, 16.235844100943371, + 16.09527402275144, 15.954703944543072, 15.814133866318445, 15.673563788077727, 15.532993709821094, + 15.392423631548718, 15.251853553260768, 15.111283474957411, 14.970713396638821, 14.830143318305167, + 14.689573239956617, 14.549003161593328, 14.408433083215476, 14.267863004823225, 14.127292926416734, + 13.986722847996173, 13.8461527695617, 13.705582691113481, 13.565012612651675, 13.424442534176441, + 13.283872455687943, 13.143302377186339, 13.002732298671786, 12.862162220144443, 12.72159214160447, + 12.58102206305202, 12.440451984487247, 12.299881905910311, 12.159311827321366, 12.018741748720567, + 11.878171670108063, 11.73760159148401, 11.597031512848561, 11.456461434201868, 11.315891355544077, + 11.175321276875344, 11.034751198195819, 10.894181119505649, 10.753611040804984, 10.613040962093971, + 10.472470883372759, 10.331900804641496, 10.191330725900327, 10.050760647149401, 9.9101905683888614, + 9.7696204896188554, 9.6290504108395272, 9.4884803320510205, 9.3479102532534792, 9.2073401744470491, + 9.0667700956318686, 8.9262000168080871, 8.7856299379758411, 8.645059859135273, 8.5044897802865282, + 8.3639197014297419, 8.223349622565058, 8.0827795436926184, 7.9422094648125583, 7.8016393859250206, + 7.661069307030143, 7.5204992281280649, 7.3799291492189223, 7.2393590703028563, 7.098788991380002, + 6.9582189124504987, 6.8176488335144816, 6.6770787545720891, 6.5365086756234554, 6.3959385966687181, + 6.2553685177080123, 6.1147984387414738, 5.9742283597692367, 5.833658280791437, 5.6930882018082087, + 5.5525181228196869, 5.4119480438260039, 5.2713779648272956, 5.1308078858236934, 4.9902378068153324, + 4.8496677278023448, 4.7090976487848639, 4.5685275697630221, 4.4279574907369508, 4.2873874117067841, + 4.1468173326726534, 4.0062472536346903, 3.8656771745930261, 3.7251070955477918, 3.5845370164991213, + 3.4439669374471427, 3.3033968583919884, 3.1628267793337885, 3.0222567002726746, 2.8816866212087762, + 2.7411165421422243, 2.6005464630731496, 2.4599763840016813, 2.3194063049279499, 2.1788362258520855, + 2.0382661467742174, 1.8976960676944756, 1.7571259886129893, 1.6165559095298885, 1.4759858304453026, + 1.3354157513593612, 1.194845672272193, 1.0542755931839276, 0.91370551409469447, 0.77313543500462234, + 0.63256535591384055, 0.49199527682247807, 0.351425197730664, 0.21085511863852741, 0.070285039546197275 +}; diff --git a/src/grib_geography.cc b/src/grib_geography.cc index 844a38abb..1457615c6 100644 --- a/src/grib_geography.cc +++ b/src/grib_geography.cc @@ -143,8 +143,44 @@ static int compute_gaussian_latitudes(long trunc, double* lats) lats[nlat - 1 - jlat] = -lats[jlat]; } - if (nlat != (trunc * 2)) - lats[trunc + 1] = 0.0; + //if (nlat != (trunc * 2)) + // lats[trunc + 1] = 0.0; + return GRIB_SUCCESS; +} + +// Performance: return the precomputed latitudes for N=640 +// The provided 'lats' array should have allocated 2*N elements +static int get_precomputed_latitudes_N640(double* lats) +{ + #include "grib_gaussian_N640.h" + const size_t N = 640; + for (size_t i = 0; i < N; ++i) { + lats[i] = lats_N640[i]; + } + + const size_t ilast = N * 2 - 1; + for (size_t i = ilast; i > ilast / 2; --i) { + lats[i] = -lats[ilast - i]; + } + + return GRIB_SUCCESS; +} + +// Performance: return the precomputed latitudes for N=1280 +// The provided 'lats' array should have allocated 2*N elements +static int get_precomputed_latitudes_N1280(double* lats) +{ + #include "grib_gaussian_N1280.h" + const size_t N = 1280; + for (size_t i = 0; i < N; ++i) { + lats[i] = lats_N1280[i]; + } + + const size_t ilast = N * 2 - 1; + for (size_t i = ilast; i > ilast / 2; --i) { + lats[i] = -lats[ilast - i]; + } + return GRIB_SUCCESS; } @@ -152,6 +188,13 @@ int grib_get_gaussian_latitudes(long trunc, double* lats) { if (trunc <= 0) return GRIB_GEOCALCULUS_PROBLEM; + + if (trunc == 640) { + return get_precomputed_latitudes_N640(lats); + } + if (trunc == 1280) { + return get_precomputed_latitudes_N1280(lats); + } return compute_gaussian_latitudes(trunc, lats); } diff --git a/src/grib_handle.cc b/src/grib_handle.cc index a1801650a..830b97723 100644 --- a/src/grib_handle.cc +++ b/src/grib_handle.cc @@ -51,9 +51,9 @@ static void update_sections(grib_section* s, grib_handle* h, long offset) if (s) s->h = h; while (a) { - a->offset += offset; + a->offset_ += offset; /* update_sections ( grib_get_sub_section ( a ),h,offset ); */ - update_sections(a->sub_section, h, offset); + update_sections(a->sub_section_, h, offset); a = a->next_; } } @@ -73,11 +73,11 @@ void grib_swap_sections(grib_section* the_old, grib_section* the_new) a = the_old->block->first; while (a) { - a->parent = the_old; + a->parent_ = the_old; a = a->next_; } - update_sections(the_old, the_old->h, the_old->owner->offset); + update_sections(the_old, the_old->h, the_old->owner->offset_); /* update_sections(new,new->h,new->owner->offset); */ /* printf("SWAPPING -----\n"); grib_dump_section_content(old,stdout); */ @@ -95,9 +95,9 @@ void grib_empty_section(grib_context* c, grib_section* b) while (current) { grib_accessor* next = current->next_; - if (current->sub_section) { - grib_section_delete(c, current->sub_section); - current->sub_section = 0; + if (current->sub_section_) { + grib_section_delete(c, current->sub_section_); + current->sub_section_ = 0; } current->destroy(c); current = next; diff --git a/src/grib_hash_array.cc b/src/grib_hash_array.cc index ec556c904..42e0146e4 100644 --- a/src/grib_hash_array.cc +++ b/src/grib_hash_array.cc @@ -11,8 +11,9 @@ #include "grib_api_internal.h" -grib_hash_array_value* grib_integer_hash_array_value_new(grib_context* c, const char* name, grib_iarray* array) +grib_hash_array_value* grib_integer_hash_array_value_new(const char* name, grib_iarray* array) { + grib_context* c = grib_context_get_default(); grib_hash_array_value* v = (grib_hash_array_value*)grib_context_malloc_clear_persistent(c, sizeof(grib_hash_array_value)); v->name = grib_context_strdup_persistent(c, name); diff --git a/src/grib_hash_keys.cc b/src/grib_hash_keys.cc index b6e389dc2..aa24e9aa6 100644 --- a/src/grib_hash_keys.cc +++ b/src/grib_hash_keys.cc @@ -1,6 +1,6 @@ /* ANSI-C code produced by gperf version 3.1 */ /* Command-line: gperf -l -C -I -t -G -H hash_keys -N grib_keys_hash_get -m 3 ../tests/keys */ -/* Computed positions: -k'1-16,19-20,23-26,28,$' */ +/* Computed positions: -k'1-16,19-20,23-26,28,32,$' */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ @@ -31,15 +31,15 @@ #include "grib_api_internal.h" -struct grib_keys_hash { const char* name; int id;}; +struct grib_keys_hash { const char* name; int id; }; #include -#define TOTAL_KEYWORDS 2535 +#define TOTAL_KEYWORDS 2584 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 74 #define MIN_HASH_VALUE 5 -#define MAX_HASH_VALUE 31933 -/* maximum key range = 31929, duplicates = 0 */ +#define MAX_HASH_VALUE 38061 +/* maximum key range = 38057, duplicates = 0 */ #ifdef __GNUC__ __inline @@ -49,42 +49,48 @@ inline #endif #endif static unsigned int -hash_keys ( const char *str, size_t len) +hash_keys (const char *str, size_t len) { - static const unsigned short asso_values[] = + static const unsigned short asso_values[] = { - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 4, 31934, 31934, 3, 31934, 31934, 128, 2530, - 2404, 2966, 1876, 4070, 2455, 1706, 29, 8, 3, 2, - 2, 31934, 31934, 31934, 31934, 1215, 5157, 2523, 271, 2023, - 345, 5101, 4026, 1640, 545, 118, 46, 2382, 974, 289, - 1046, 28, 528, 161, 96, 4953, 1277, 3682, 373, 5709, - 2, 3, 2, 31934, 31934, 1817, 31934, 2, 372, 30, - 5, 3, 92, 103, 97, 8, 2721, 3959, 75, 3, - 2, 23, 18, 1060, 5, 14, 4, 48, 321, 249, - 1467, 224, 572, 5, 1867, 2, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, - 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934 + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 2, 38062, 38062, 2, 38062, 38062, 202, 2876, + 2227, 2754, 1876, 2072, 1935, 1016, 144, 14, 5, 2, + 4, 38062, 38062, 38062, 38062, 2577, 5544, 2312, 271, 1395, + 345, 5503, 3428, 1938, 312, 194, 46, 1936, 754, 289, + 969, 125, 759, 161, 96, 5557, 1710, 3538, 592, 5783, + 12, 2, 3, 38062, 38062, 2847, 38062, 2, 540, 30, + 5, 3, 92, 103, 97, 8, 3157, 2984, 75, 3, + 2, 23, 18, 1630, 5, 14, 4, 48, 321, 249, + 1698, 224, 577, 7, 2986, 5, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, + 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062, 38062 }; - unsigned int hval = len; + unsigned int hval = len; switch (hval) { default: + hval += asso_values[(unsigned char)str[31]]; + /*FALLTHROUGH*/ + case 31: + case 30: + case 29: + case 28: hval += asso_values[(unsigned char)str[27]]; /*FALLTHROUGH*/ case 27: @@ -159,7 +165,7 @@ hash_keys ( const char *str, size_t len) hval += asso_values[(unsigned char)str[0]]; break; } - return hval + asso_values[(unsigned char)str[len - 1]]; + return hval + asso_values[(unsigned char)str[len - 1]]; } static const unsigned char lengthtable[] = @@ -171,874 +177,1246 @@ static const unsigned char lengthtable[] = 6, 0, 4, 9, 7, 4, 7, 0, 0, 0, 7, 4, 4, 5, 9, 0, 0, 7, 0, 0, 0, 6, 0, 9, 0, 0, 5, 10, 0, 7, 9, 3, 6, 6, 10, 0, 0, 7, 2, 5, 10, 4, - 0, 9, 0, 0, 6, 8, 0, 0, 6, 10, 3, 3, 0, 0, - 10, 0, 8, 0, 5, 0, 4, 5, 5, 0, 9, 5, 7, 0, + 0, 9, 0, 0, 6, 0, 0, 0, 6, 10, 3, 3, 0, 0, + 10, 8, 8, 0, 5, 0, 4, 5, 5, 0, 9, 5, 7, 0, 10, 3, 7, 0, 4, 0, 7, 0, 8, 8, 0, 0, 9, 0, - 0, 6, 5, 4, 7, 10, 6, 0, 0, 0, 8, 0, 0, 10, + 0, 6, 5, 4, 7, 10, 6, 0, 0, 0, 0, 0, 0, 10, 5, 0, 0, 6, 9, 0, 8, 0, 0, 0, 0, 0, 0, 10, 0, 0, 2, 0, 0, 9, 0, 10, 0, 7, 0, 0, 0, 0, 4, 0, 10, 4, 9, 0, 5, 5, 0, 6, 0, 0, 5, 0, 0, 8, 4, 0, 15, 9, 0, 7, 10, 0, 11, 1, 8, 0, 0, 0, 0, 0, 0, 10, 0, 10, 6, 10, 0, 7, 6, 0, - 5, 0, 0, 0, 0, 0, 0, 5, 0, 8, 0, 0, 8, 1, - 6, 10, 10, 0, 9, 4, 8, 0, 0, 17, 0, 0, 13, 12, + 5, 0, 0, 0, 0, 0, 0, 5, 0, 8, 0, 0, 8, 0, + 6, 10, 10, 0, 9, 4, 8, 0, 0, 17, 0, 0, 13, 0, 0, 7, 0, 10, 4, 0, 0, 10, 0, 0, 0, 0, 0, 8, 0, 11, 0, 0, 0, 6, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 5, 0, 0, 0, 2, 2, 9, 0, 7, 0, 0, 0, 0, 0, 5, 0, 0, 3, 0, 8, 5, 0, 0, 0, 10, 6, 2, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, 11, 0, 0, 0, 6, - 0, 9, 0, 0, 0, 0, 9, 0, 8, 10, 0, 0, 0, 6, + 0, 9, 0, 0, 0, 0, 9, 0, 8, 10, 0, 0, 12, 6, 8, 12, 0, 0, 0, 7, 12, 0, 0, 20, 0, 0, 0, 0, 14, 8, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 0, - 0, 4, 0, 5, 0, 9, 10, 7, 13, 0, 0, 0, 4, 8, - 10, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 0, 12, 0, 10, 7, 2, 10, 8, 0, 6, 0, 0, 0, 13, - 2, 2, 0, 8, 14, 0, 0, 0, 0, 0, 6, 6, 0, 0, - 0, 0, 19, 0, 10, 0, 10, 0, 2, 0, 6, 0, 0, 0, + 0, 4, 8, 5, 0, 0, 10, 7, 13, 0, 0, 1, 0, 8, + 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 0, 12, 0, 10, 0, 0, 10, 8, 0, 6, 0, 0, 0, 13, + 2, 0, 0, 8, 14, 0, 0, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 19, 0, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 9, 0, 0, 2, 0, 0, 3, 0, 0, 18, - 0, 0, 0, 11, 0, 0, 9, 0, 0, 0, 0, 8, 0, 0, + 0, 0, 0, 11, 0, 0, 9, 0, 8, 0, 0, 8, 0, 9, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 13, 0, 24, 0, 14, 0, 2, 9, 0, 0, 11, 0, 8, 0, 10, 0, 0, 0, 0, 0, 0, 6, 5, 0, 0, 8, 12, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, - 3, 0, 0, 0, 11, 0, 14, 0, 0, 0, 17, 11, 11, 3, - 0, 0, 15, 0, 0, 0, 10, 16, 0, 0, 9, 5, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, + 3, 0, 0, 0, 11, 0, 0, 0, 0, 0, 17, 11, 11, 3, + 0, 0, 15, 0, 14, 0, 10, 16, 0, 0, 9, 5, 4, 0, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 12, 0, - 0, 0, 8, 0, 0, 11, 14, 0, 11, 0, 0, 0, 10, 0, - 0, 13, 0, 0, 0, 3, 11, 0, 0, 12, 14, 0, 0, 0, - 0, 8, 0, 20, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 8, 11, 15, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 4, 0, 17, 0, 15, 0, 5, 0, 17, 0, 0, 0, 0, 13, + 0, 0, 8, 0, 7, 11, 0, 0, 11, 0, 13, 0, 10, 0, + 0, 13, 0, 0, 0, 3, 11, 0, 0, 12, 14, 6, 0, 0, + 0, 8, 0, 20, 0, 0, 0, 0, 6, 0, 6, 0, 0, 0, + 0, 8, 0, 15, 0, 0, 0, 0, 0, 1, 13, 0, 0, 0, + 2, 0, 17, 0, 0, 4, 2, 0, 17, 0, 2, 5, 0, 13, 0, 0, 0, 0, 0, 8, 17, 0, 17, 23, 0, 0, 10, 0, - 7, 8, 14, 0, 2, 18, 0, 0, 12, 0, 7, 0, 0, 0, - 0, 0, 9, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 14, - 0, 19, 0, 9, 13, 0, 0, 13, 0, 13, 12, 0, 0, 0, + 7, 0, 14, 0, 2, 18, 0, 0, 12, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 14, + 0, 0, 0, 19, 13, 0, 0, 13, 0, 13, 12, 0, 0, 0, 23, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 14, 0, 0, 0, 0, 2, 0, 3, 0, 0, 4, 0, - 18, 14, 0, 6, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 10, 0, 0, 0, 0, 10, 11, 0, 0, 0, 0, 0, 0, - 13, 0, 12, 0, 0, 0, 15, 0, 0, 8, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 10, 11, 0, 0, 0, 0, 17, 19, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 17, 0, 0, 24, 0, 0, 0, - 11, 0, 0, 0, 19, 0, 9, 15, 0, 0, 0, 0, 0, 10, - 0, 0, 0, 23, 9, 22, 0, 8, 10, 0, 0, 0, 0, 0, - 12, 0, 9, 0, 0, 7, 0, 14, 0, 17, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 25, 0, 12, 0, - 0, 2, 14, 0, 0, 0, 0, 0, 0, 12, 0, 9, 11, 12, + 17, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 4, 0, + 18, 14, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 11, + 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 17, + 8, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 10, 0, 0, 0, 18, 5, 17, 19, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 24, 0, 14, 0, + 11, 0, 0, 0, 19, 0, 0, 15, 0, 0, 0, 9, 0, 10, + 0, 0, 0, 23, 9, 22, 0, 8, 0, 0, 7, 0, 0, 10, + 12, 13, 9, 0, 0, 0, 0, 14, 2, 17, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 19, 0, 8, 25, 0, 12, 0, + 0, 0, 14, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, + 0, 9, 9, 0, 0, 0, 0, 0, 8, 0, 0, 6, 8, 0, + 10, 0, 15, 6, 0, 7, 0, 0, 14, 9, 0, 0, 14, 0, + 0, 0, 31, 0, 0, 0, 10, 9, 0, 9, 9, 0, 0, 0, + 0, 0, 14, 0, 0, 12, 0, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 15, + 0, 0, 0, 15, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 27, 0, 10, 13, 0, 0, 0, 0, + 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, + 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, + 0, 14, 0, 0, 13, 0, 0, 0, 0, 9, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 18, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 11, 0, + 0, 0, 24, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 0, 0, 12, 0, 0, 17, 22, 0, 0, 0, 0, 0, 0, 8, + 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, + 10, 0, 0, 0, 0, 0, 0, 11, 21, 15, 0, 0, 0, 0, + 8, 13, 0, 0, 0, 15, 11, 0, 10, 21, 21, 0, 0, 0, + 0, 18, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 22, 0, 0, 20, 10, 13, 0, 16, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 39, 0, + 0, 0, 0, 7, 21, 15, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 0, 15, 0, 0, 0, 0, 0, 14, 0, 0, 0, 14, 0, - 0, 11, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 15, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 27, 0, 0, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 27, 2, 0, - 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 10, 19, - 0, 14, 0, 0, 5, 37, 0, 0, 0, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 22, 0, 0, 0, 11, 0, 0, 0, 18, - 0, 0, 0, 0, 0, 0, 10, 0, 0, 13, 0, 14, 0, 0, - 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 14, - 0, 0, 12, 0, 2, 17, 22, 9, 0, 0, 0, 12, 0, 0, - 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 18, 0, 18, 1, - 10, 0, 9, 0, 12, 10, 0, 0, 0, 15, 0, 9, 0, 0, - 0, 3, 0, 0, 0, 15, 11, 6, 8, 21, 21, 0, 0, 0, - 0, 18, 0, 0, 14, 0, 0, 0, 3, 0, 8, 10, 0, 0, - 22, 20, 0, 9, 0, 9, 0, 16, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, 8, 39, 40, 0, 0, 0, 2, 3, - 0, 0, 0, 0, 21, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 13, 0, 0, - 0, 0, 0, 17, 0, 0, 0, 30, 0, 8, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 15, 0, 10, 0, 0, 0, 0, 21, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 20, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, - 0, 0, 10, 16, 0, 0, 0, 12, 0, 0, 0, 0, 16, 12, - 0, 0, 14, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 0, 10, 0, 0, 0, 0, 0, 12, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 10, + 0, 0, 0, 16, 0, 0, 0, 12, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 10, 0, 0, + 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 20, 0, 0, 14, + 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 19, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 0, 0, 0, 11, 0, 0, 0, 0, 0, + 11, 7, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 30, 30, 0, 0, 0, 16, 0, 17, 0, 27, 23, + 0, 0, 10, 0, 0, 0, 0, 0, 15, 0, 0, 0, 15, 12, + 0, 0, 14, 0, 0, 0, 0, 0, 15, 0, 0, 0, 5, 0, + 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 18, 0, 0, 0, 16, 0, 0, 0, 0, 0, 21, 31, 0, + 0, 0, 0, 0, 18, 21, 0, 31, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 30, 0, 0, 0, 11, 24, 0, 0, 11, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, + 0, 14, 0, 0, 0, 0, 0, 0, 9, 0, 44, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 17, 15, 0, 0, + 0, 3, 0, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 9, 16, 14, 0, 15, + 11, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 19, 0, 0, 0, 31, 26, 0, 21, 0, 0, 0, 0, 11, + 21, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 3, 17, 0, 19, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 48, + 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 14, + 0, 0, 0, 57, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 18, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 0, 19, - 0, 0, 0, 21, 0, 0, 0, 0, 13, 0, 0, 6, 0, 0, - 11, 0, 0, 0, 12, 0, 0, 0, 0, 24, 0, 0, 0, 0, - 10, 13, 0, 0, 0, 0, 0, 13, 0, 21, 0, 15, 0, 0, - 0, 30, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 16, 0, - 0, 0, 24, 0, 23, 0, 14, 0, 11, 0, 0, 15, 0, 0, - 0, 0, 0, 24, 0, 0, 0, 16, 0, 0, 0, 0, 0, 13, - 0, 0, 0, 0, 48, 8, 0, 0, 0, 0, 2, 15, 30, 30, - 0, 16, 0, 2, 0, 0, 0, 0, 0, 0, 0, 15, 27, 0, - 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 10, 3, - 10, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 16, 12, 0, 0, 0, 0, 0, 31, 16, - 0, 0, 0, 0, 0, 0, 0, 31, 12, 0, 0, 0, 0, 0, - 0, 16, 9, 0, 30, 0, 23, 14, 23, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 12, 0, 23, 0, - 0, 15, 5, 0, 7, 20, 0, 0, 44, 0, 0, 19, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, + 22, 0, 0, 37, 0, 12, 9, 0, 0, 5, 24, 7, 0, 0, + 0, 0, 0, 0, 0, 8, 0, 0, 48, 0, 0, 0, 0, 0, + 0, 0, 0, 26, 0, 0, 12, 0, 0, 18, 0, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 3, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 27, 0, 0, 24, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 16, + 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 23, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 10, + 0, 0, 0, 0, 0, 29, 0, 0, 0, 26, 0, 0, 0, 0, + 0, 0, 0, 0, 13, 0, 0, 0, 0, 23, 11, 0, 0, 23, + 12, 23, 0, 0, 0, 0, 0, 23, 13, 0, 29, 20, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 14, 18, 0, 0, 20, 0, 24, 0, + 9, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 0, 0, 0, 6, 0, 7, 0, 0, + 0, 9, 0, 15, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 13, 0, 0, 10, 0, 10, 0, 0, 0, + 0, 0, 0, 0, 0, 32, 22, 0, 0, 0, 0, 0, 9, 0, + 13, 0, 0, 0, 0, 13, 11, 0, 0, 26, 0, 15, 0, 0, + 35, 23, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, + 0, 6, 12, 0, 0, 12, 12, 0, 8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 0, 14, 0, 0, 0, 0, 6, 0, + 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, + 32, 0, 0, 0, 10, 0, 0, 27, 0, 14, 0, 34, 2, 0, + 0, 17, 0, 0, 0, 0, 0, 19, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 30, 0, 0, 10, 0, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 11, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 0, 27, 0, 0, 24, 0, 0, 14, 0, 11, 0, 0, 11, - 0, 0, 0, 0, 0, 0, 26, 0, 11, 8, 0, 0, 0, 0, - 21, 0, 0, 17, 15, 13, 0, 0, 0, 23, 0, 25, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 23, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 15, 0, 28, 0, + 13, 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, 23, 24, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 13, 39, 0, 0, + 0, 13, 15, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 19, 9, 0, 13, 0, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 12, 0, 17, 0, 11, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 2, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 9, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 17, 0, - 0, 0, 13, 16, 0, 6, 0, 7, 0, 19, 6, 9, 0, 16, - 12, 0, 0, 0, 0, 7, 9, 0, 0, 26, 0, 0, 0, 0, - 0, 23, 0, 0, 0, 0, 10, 0, 0, 57, 0, 0, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 30, 0, 23, - 0, 0, 3, 0, 0, 19, 0, 0, 14, 32, 0, 0, 42, 18, - 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 8, 11, 13, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 18, 0, 34, 0, 22, - 0, 15, 0, 19, 15, 0, 14, 13, 15, 0, 0, 0, 13, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 0, 0, - 0, 12, 0, 0, 0, 0, 0, 0, 6, 0, 11, 0, 12, 0, - 0, 0, 0, 0, 14, 0, 0, 22, 0, 0, 0, 0, 18, 10, - 14, 31, 32, 0, 13, 6, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 20, 13, 0, 0, 0, 0, 0, 26, 35, 0, 12, - 0, 0, 14, 0, 0, 0, 15, 0, 31, 0, 0, 0, 0, 0, - 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 20, 0, 8, 0, 0, 0, 15, 0, - 0, 0, 11, 0, 23, 0, 0, 0, 0, 0, 29, 19, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, - 0, 11, 12, 1, 0, 0, 0, 13, 0, 39, 0, 0, 0, 18, - 0, 22, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 29, 0, - 0, 9, 0, 13, 0, 0, 0, 0, 12, 10, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 19, - 0, 0, 3, 0, 0, 26, 0, 0, 0, 2, 0, 0, 9, 0, - 0, 0, 23, 0, 0, 18, 0, 0, 0, 14, 0, 0, 0, 13, - 15, 0, 2, 0, 0, 0, 0, 0, 26, 8, 0, 16, 0, 0, - 0, 0, 0, 19, 0, 25, 0, 0, 0, 0, 0, 10, 0, 0, - 27, 0, 0, 10, 9, 0, 13, 27, 10, 0, 10, 10, 25, 0, - 9, 0, 19, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 0, 0, 1, 32, 0, 5, 10, 12, 9, - 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 11, 10, 0, 22, 0, 0, 0, - 14, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 31, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 18, 0, 0, + 0, 0, 19, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12, 0, 0, 14, 15, 0, 0, 0, 18, 0, 0, 0, 12, + 0, 16, 11, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, + 0, 25, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 32, 0, + 0, 0, 7, 0, 18, 0, 0, 0, 10, 0, 31, 19, 0, 0, + 11, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 14, 0, 12, 0, 0, 0, 0, 13, 26, + 22, 0, 0, 0, 10, 0, 28, 0, 0, 12, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 22, 0, 18, 0, 19, 0, 0, 0, 0, 0, 10, 9, 0, - 0, 0, 12, 13, 15, 0, 0, 0, 0, 0, 0, 0, 23, 18, - 0, 0, 15, 0, 0, 0, 30, 0, 0, 0, 0, 25, 0, 0, - 23, 0, 17, 0, 18, 0, 27, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 11, 9, 12, 0, 12, 0, 0, 0, 0, 21, 3, 20, - 0, 0, 0, 0, 0, 25, 10, 33, 0, 0, 10, 0, 0, 0, - 16, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 11, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 23, 0, - 0, 15, 12, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, - 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 20, 0, 0, 0, 0, 23, 0, 0, 6, 12, + 9, 0, 17, 13, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 15, 0, 0, 0, 0, 15, + 0, 0, 0, 0, 0, 0, 27, 19, 0, 0, 0, 0, 0, 0, + 0, 28, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 0, 0, 0, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, + 18, 0, 0, 23, 0, 13, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 22, 18, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 15, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 25, - 35, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, 15, 0, 10, 0, 22, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 23, 0, 0, 0, 0, 18, 0, - 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 0, 0, 35, 0, 0, 0, 0, - 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 23, 0, 14, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 28, 0, 0, 0, 0, 21, 0, 0, 21, 0, 0, 16, - 0, 29, 11, 0, 0, 0, 0, 0, 22, 0, 0, 10, 0, 27, - 0, 24, 0, 0, 0, 0, 11, 0, 0, 0, 0, 21, 0, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 18, - 0, 13, 10, 0, 0, 22, 25, 32, 0, 9, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 22, 13, 0, 10, 0, 0, 28, 10, 0, - 0, 33, 38, 0, 23, 13, 0, 0, 0, 30, 0, 31, 0, 0, - 18, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, - 0, 27, 0, 0, 22, 0, 9, 11, 16, 0, 0, 0, 17, 42, - 0, 0, 0, 0, 19, 0, 10, 0, 0, 0, 0, 0, 16, 0, - 0, 15, 17, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 13, 10, 6, 0, 0, 0, 13, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 13, 18, 11, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 27, 0, 0, 0, 9, 0, 0, 0, 0, + 0, 13, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 21, 16, 0, 0, 0, 0, 0, 0, 0, 23, + 0, 18, 13, 0, 0, 11, 22, 0, 0, 0, 0, 0, 11, 27, + 0, 11, 30, 0, 0, 0, 0, 0, 0, 0, 15, 0, 10, 0, + 6, 0, 0, 33, 25, 0, 0, 0, 0, 0, 0, 27, 0, 0, + 12, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 22, 0, + 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 18, + 0, 0, 0, 0, 0, 13, 0, 0, 0, 10, 0, 0, 15, 10, + 0, 23, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, + 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, + 0, 20, 0, 13, 19, 0, 0, 0, 0, 8, 0, 0, 22, 0, + 20, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, + 0, 21, 0, 0, 0, 0, 23, 0, 0, 0, 22, 22, 0, 15, + 0, 0, 0, 18, 0, 0, 0, 0, 12, 0, 25, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 13, 0, 0, 0, 17, 0, 24, 0, 0, 0, 31, - 0, 0, 0, 0, 12, 0, 0, 13, 0, 0, 0, 23, 0, 0, - 14, 18, 16, 0, 2, 0, 0, 11, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 0, 0, 13, 0, 28, 0, 0, 0, 0, 9, - 0, 0, 11, 0, 0, 16, 0, 39, 0, 0, 0, 0, 0, 12, - 0, 0, 13, 15, 0, 0, 0, 15, 0, 0, 0, 12, 0, 31, - 0, 24, 20, 0, 12, 0, 15, 0, 10, 0, 0, 0, 0, 30, - 22, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 38, - 42, 0, 18, 0, 21, 0, 10, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 13, 0, 0, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 14, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 11, - 30, 11, 0, 0, 16, 0, 16, 0, 19, 13, 26, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 18, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 15, 0, 15, 0, 0, 16, 0, 0, 0, 22, - 0, 15, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, - 18, 2, 3, 0, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 0, 0, 12, 0, 12, 0, 23, 0, 0, 0, 0, 0, 0, 0, - 2, 23, 7, 20, 9, 0, 0, 0, 0, 17, 0, 37, 0, 0, - 14, 0, 18, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, - 0, 10, 21, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 16, 15, 0, 0, 0, 0, - 12, 0, 0, 0, 0, 20, 13, 0, 0, 0, 0, 0, 14, 0, - 34, 0, 2, 0, 15, 0, 0, 0, 0, 0, 0, 20, 0, 17, - 0, 0, 0, 0, 0, 12, 0, 13, 18, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 24, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 29, 22, 0, 0, 30, 0, 0, 0, 26, 0, - 0, 0, 22, 0, 13, 0, 0, 0, 0, 0, 18, 16, 23, 10, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 6, 0, 0, 0, 0, - 0, 22, 27, 0, 0, 0, 0, 0, 0, 0, 15, 32, 15, 28, - 0, 0, 0, 0, 0, 31, 0, 0, 0, 24, 0, 17, 0, 0, - 0, 2, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 20, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 11, 0, - 0, 0, 0, 0, 0, 28, 17, 0, 0, 28, 0, 25, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 14, 0, 0, 0, - 0, 0, 16, 0, 0, 0, 0, 0, 22, 0, 0, 0, 17, 15, - 0, 0, 0, 0, 36, 30, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 28, 31, 0, 0, - 0, 0, 0, 0, 17, 15, 0, 0, 0, 21, 0, 0, 0, 17, - 0, 9, 0, 15, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 22, 0, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, - 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 19, 0, 19, 0, 0, 0, 0, 0, 24, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 28, 17, 0, 0, 0, 0, 12, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 9, 0, 24, - 23, 0, 5, 0, 0, 0, 0, 0, 0, 0, 21, 0, 23, 0, - 0, 0, 0, 13, 0, 0, 24, 0, 18, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 24, 0, 0, 0, 0, 0, 17, 0, 31, 0, - 0, 0, 16, 0, 0, 0, 0, 0, 0, 19, 26, 35, 0, 0, - 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 4, 0, 8, 0, 0, 0, 0, 0, 18, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, - 13, 22, 2, 0, 0, 0, 40, 0, 14, 0, 16, 0, 21, 0, - 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 0, 0, 20, 0, 0, 30, 0, 0, - 0, 0, 0, 0, 29, 16, 4, 0, 0, 0, 0, 0, 0, 23, - 31, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 20, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 14, 26, 0, 24, 0, 0, 0, 0, 0, 0, 38, 31, - 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 18, 0, - 0, 42, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 11, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 3, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 28, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 0, 0, 0, 0, 37, 0, 0, 0, 0, 21, 13, 0, - 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, - 0, 27, 0, 0, 0, 0, 0, 0, 0, 25, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, - 0, 21, 0, 0, 0, 18, 17, 14, 24, 12, 0, 0, 0, 0, - 0, 0, 25, 30, 20, 0, 22, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 30, 14, 0, 0, 6, 24, 0, 0, 0, 0, 0, 0, - 0, 0, 37, 0, 0, 0, 0, 0, 0, 12, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 20, 0, 0, 0, 0, 0, 0, 0, - 26, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, - 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 14, 0, - 19, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 25, 0, 15, - 21, 0, 16, 18, 0, 0, 30, 14, 0, 0, 0, 14, 0, 0, - 14, 37, 0, 0, 0, 29, 0, 3, 0, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 12, 35, 0, 0, 0, 31, 0, 0, 0, 0, 15, 0, 0, - 0, 15, 0, 0, 23, 0, 0, 0, 0, 15, 25, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 33, 24, 0, 0, 0, 0, 4, 23, 15, 0, 0, 0, 15, 0, - 0, 13, 0, 33, 0, 0, 0, 26, 24, 31, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 20, 13, 0, - 0, 0, 33, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 15, - 0, 0, 0, 15, 0, 0, 22, 0, 0, 26, 0, 0, 14, 0, - 18, 0, 0, 0, 0, 0, 13, 0, 0, 8, 0, 15, 10, 0, - 36, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 11, 0, - 0, 0, 0, 0, 18, 21, 0, 0, 0, 0, 0, 10, 0, 16, - 27, 0, 0, 0, 14, 27, 0, 16, 16, 0, 0, 0, 0, 0, - 18, 0, 0, 14, 0, 0, 0, 0, 0, 0, 16, 14, 0, 17, - 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 14, 0, 33, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 13, 0, 0, - 0, 0, 0, 0, 0, 35, 0, 0, 18, 0, 15, 0, 0, 0, - 0, 0, 47, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 26, 0, 29, 18, - 18, 0, 31, 0, 0, 17, 0, 0, 0, 34, 0, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 14, 0, - 13, 0, 0, 0, 0, 15, 20, 0, 19, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 23, 0, 13, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 11, 32, 0, 12, 0, - 0, 0, 0, 0, 17, 0, 18, 0, 31, 9, 0, 0, 22, 0, - 15, 0, 0, 0, 11, 0, 15, 11, 13, 0, 0, 0, 35, 11, - 15, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, - 0, 0, 10, 15, 0, 23, 0, 0, 0, 6, 0, 0, 7, 19, - 0, 0, 14, 31, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, - 0, 0, 0, 12, 0, 0, 23, 0, 0, 0, 0, 0, 15, 0, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 14, 0, - 0, 14, 0, 10, 0, 0, 0, 0, 0, 46, 12, 0, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 15, 29, 14, - 17, 14, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, - 18, 0, 18, 15, 34, 0, 0, 0, 7, 0, 16, 19, 4, 0, - 0, 0, 0, 0, 19, 0, 42, 0, 13, 0, 0, 0, 0, 13, - 0, 16, 25, 0, 15, 0, 0, 0, 0, 0, 20, 0, 0, 0, - 0, 0, 0, 0, 18, 20, 0, 0, 22, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 0, 13, 0, 0, 0, 24, 0, 15, 0, 15, - 0, 0, 12, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 35, - 11, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 11, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 11, 10, 23, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 22, 0, 10, 17, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 0, 0, 19, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 12, - 0, 0, 22, 0, 0, 0, 0, 19, 0, 0, 0, 21, 29, 22, - 27, 0, 0, 0, 25, 0, 29, 9, 14, 11, 0, 0, 14, 0, - 23, 24, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 11, - 0, 0, 0, 0, 13, 0, 0, 0, 28, 0, 0, 0, 13, 0, - 0, 0, 23, 28, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 30, 0, 0, 0, 18, 13, 0, 0, 16, 0, 0, 22, 0, 31, - 32, 39, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 20, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 24, 0, 22, 0, 0, 0, - 0, 15, 0, 26, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, - 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 0, 24, 0, 2, 0, 26, 0, - 0, 0, 0, 0, 0, 0, 12, 25, 17, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 13, 3, - 0, 0, 0, 0, 0, 0, 15, 0, 32, 15, 0, 0, 6, 0, - 30, 3, 0, 0, 21, 13, 0, 4, 0, 0, 0, 12, 20, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 14, 0, 0, - 4, 0, 0, 0, 0, 25, 0, 12, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 27, 0, 15, 0, 0, 0, - 19, 0, 14, 0, 0, 0, 0, 0, 2, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 27, 0, 0, 15, 0, 0, 0, 14, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 25, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 0, 0, 11, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 33, 0, 0, 0, 0, - 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 14, 0, 0, 13, - 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 3, - 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 28, 0, 13, - 0, 0, 0, 0, 6, 0, 16, 0, 3, 0, 12, 0, 0, 34, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 0, 0, 20, 8, 0, 0, 0, 0, 0, 0, 6, 0, 27, - 17, 0, 9, 0, 0, 0, 17, 0, 0, 0, 9, 0, 0, 73, - 74, 0, 9, 2, 0, 0, 19, 0, 0, 11, 0, 0, 0, 0, - 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 23, 18, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, - 20, 27, 0, 10, 0, 0, 0, 0, 0, 23, 22, 33, 0, 0, - 0, 50, 24, 22, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 9, 0, 0, 20, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 21, 0, 37, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 14, 0, 11, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 15, 0, - 0, 6, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 18, 11, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 43, 11, 29, 15, 0, 0, 9, 0, 13, 0, - 14, 0, 9, 2, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, - 0, 0, 0, 12, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 15, - 0, 0, 21, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 13, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 16, 0, 11, 16, 0, 0, 0, 14, 0, - 0, 0, 22, 11, 0, 34, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 24, - 0, 0, 16, 27, 0, 0, 29, 0, 0, 15, 0, 12, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 28, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 0, 0, 9, 0, 0, 8, 0, 0, 31, 20, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 28, 0, 26, 0, 0, 0, 19, 0, 0, 25, 0, 27, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, - 0, 30, 0, 2, 15, 25, 12, 0, 0, 0, 0, 7, 0, 0, - 0, 14, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 25, 0, 11, 0, 2, 0, 0, 23, 0, 0, 0, - 0, 0, 0, 2, 24, 0, 0, 0, 0, 0, 10, 22, 0, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 21, 0, 15, 0, - 28, 0, 2, 0, 0, 0, 0, 15, 24, 10, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, - 26, 0, 32, 0, 0, 10, 13, 0, 0, 0, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 26, 14, 0, 29, 0, 6, 0, - 13, 0, 0, 0, 34, 0, 0, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 21, 2, 0, 0, 0, 12, 0, 14, 12, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25, 12, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, - 0, 38, 0, 0, 0, 0, 0, 21, 0, 0, 32, 0, 24, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 12, 0, 19, - 30, 0, 0, 0, 0, 28, 11, 0, 0, 32, 0, 0, 0, 0, - 2, 18, 9, 0, 0, 0, 0, 0, 19, 0, 11, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 0, - 0, 30, 15, 3, 0, 0, 23, 31, 0, 0, 31, 0, 0, 0, - 21, 0, 6, 0, 18, 30, 0, 0, 0, 0, 18, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 16, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 16, 15, 0, 0, 0, 0, 14, 26, 22, 0, 0, 24, - 0, 0, 2, 0, 0, 0, 0, 0, 0, 11, 23, 0, 6, 14, - 0, 0, 2, 0, 32, 25, 0, 0, 0, 0, 0, 0, 34, 0, - 19, 0, 0, 28, 0, 0, 0, 28, 0, 4, 0, 0, 0, 0, - 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 17, 0, 14, 0, 0, 30, 0, 8, - 0, 0, 23, 0, 2, 18, 0, 25, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 32, 11, 0, 0, - 6, 12, 0, 19, 22, 13, 0, 11, 0, 0, 0, 13, 25, 0, - 0, 0, 0, 12, 0, 0, 0, 0, 0, 17, 0, 0, 8, 29, - 0, 20, 8, 16, 0, 0, 0, 0, 0, 0, 0, 13, 34, 0, - 0, 27, 0, 0, 11, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 34, 0, 28, 0, 13, 0, 0, 0, 0, 0, 28, 0, 0, - 0, 19, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 30, - 0, 0, 31, 0, 0, 0, 0, 13, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 19, 0, - 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 17, 0, 0, 43, - 0, 0, 0, 0, 0, 0, 0, 22, 23, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 34, 0, 0, 8, 0, 0, 0, 21, 0, - 0, 11, 0, 0, 0, 25, 0, 0, 0, 0, 38, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 18, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 19, 26, - 11, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 29, 0, 0, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 29, 39, 30, 0, 0, 0, 0, 0, - 0, 53, 0, 0, 0, 28, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 39, 0, 31, 0, 15, 0, 0, 0, 0, 0, 14, 0, - 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 16, 0, 0, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 14, 43, 0, 0, 38, 0, 0, 0, 0, - 0, 0, 0, 23, 0, 0, 0, 16, 0, 0, 0, 0, 19, 23, - 29, 0, 0, 18, 0, 23, 31, 0, 0, 13, 7, 0, 0, 0, - 27, 0, 30, 0, 0, 0, 18, 0, 35, 0, 0, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 14, 0, 0, 13, 0, 21, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 22, - 0, 14, 0, 0, 0, 0, 0, 17, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 30, 44, 0, 0, 7, 15, 11, 0, 0, 16, - 0, 0, 10, 33, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 18, 0, 36, 3, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 24, 0, 0, 15, - 14, 0, 0, 0, 0, 0, 0, 21, 15, 0, 17, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 15, 0, 0, 0, 0, 0, 0, - 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 9, 24, - 11, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 20, 0, 0, - 19, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 23, 0, 2, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 5, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, - 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 22, 0, 0, 24, 32, 0, 0, 21, 0, 29, 19, 0, - 0, 0, 9, 0, 0, 0, 0, 13, 0, 0, 41, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 27, 0, - 0, 10, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 14, 0, 20, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 18, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, - 14, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 28, 0, 0, - 0, 0, 26, 0, 15, 0, 0, 12, 0, 0, 21, 0, 18, 0, - 0, 0, 0, 3, 15, 10, 0, 8, 0, 19, 0, 0, 23, 24, - 0, 0, 0, 12, 0, 0, 0, 0, 16, 0, 0, 24, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, 0, 0, 0, 27, 0, 0, 0, 0, - 11, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 21, 13, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, - 0, 0, 0, 24, 0, 0, 19, 0, 0, 0, 30, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 37, 31, 0, 0, 0, 0, 10, - 14, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, - 35, 12, 15, 0, 0, 0, 15, 23, 14, 0, 0, 0, 0, 0, - 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, - 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 7, 12, 0, - 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 29, 17, - 0, 0, 0, 0, 0, 8, 0, 24, 0, 0, 0, 0, 11, 0, - 0, 0, 0, 25, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 12, 0, 23, 0, 0, 0, 0, 0, - 0, 11, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 0, 35, 0, 0, 13, 0, 0, 0, 29, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 19, 0, - 24, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, - 14, 0, 0, 0, 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 29, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, - 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 0, 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, - 22, 0, 0, 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 43, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 28, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, - 0, 0, 28, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 31, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 72, 0, 0, - 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 12, 14, 0, 0, 0, 0, 0, - 0, 18, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 8, 0, 35, 0, 0, 0, 22, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 24, 0, 22, 0, 30, 0, 0, 14, 0, 0, 0, 0, - 12, 34, 0, 23, 0, 33, 22, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 18, 13, 23, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, - 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, - 25, 20, 0, 23, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 35, - 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 0, 0, 14, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 26, 0, 0, - 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 31, 0, 0, - 0, 24, 29, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 29, 0, - 0, 0, 0, 0, 18, 10, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, - 0, 0, 0, 16, 29, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 28, 28, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, - 0, 21, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, - 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, 14, 0, 0, 29, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 14, 0, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, - 29, 21, 31, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 22, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 19, 0, 27, - 30, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, - 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, - 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 36, 0, 0, 27, 0, 0, 0, 0, - 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, - 0, 28, 0, 0, 0, 11, 0, 33, 0, 0, 0, 0, 0, 0, - 0, 28, 0, 0, 0, 0, 0, 13, 7, 0, 0, 29, 0, 0, - 30, 0, 0, 0, 0, 30, 0, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 43, 0, 0, 0, 3, 0, 0, 0, 0, 0, 6, - 43, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 32, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 16, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 15, 0, 0, 0, 0, 18, 0, 0, 0, 18, 14, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 17, 0, 28, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 13, 13, 0, 0, 0, 0, 18, - 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 30, 0, 0, 0, 17, 0, 0, 0, 0, - 37, 26, 0, 0, 11, 0, 0, 0, 0, 23, 10, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 25, - 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 25, 0, 14, 0, 0, 0, 0, 0, 0, - 16, 16, 0, 0, 0, 0, 0, 0, 0, 35, 27, 0, 0, 0, - 0, 18, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 20, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 14, 17, 25, 19, 0, 0, 23, 20, 0, 0, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 35, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 36, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 14, 0, 36, 0, 27, 14, 0, 0, 0, 0, 0, 33, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 0, 24, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 30, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 0, 0, 0, 0, 18, 20, 0, 33, 35, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 20, 0, 17, 0, 0, 16, 0, + 0, 0, 32, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 25, 35, 0, + 0, 0, 0, 0, 0, 0, 19, 16, 13, 0, 0, 0, 0, 0, + 0, 0, 8, 9, 0, 0, 0, 25, 0, 0, 0, 0, 17, 11, + 0, 0, 0, 15, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, + 23, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 13, 0, 0, + 20, 0, 18, 0, 0, 0, 0, 27, 0, 9, 11, 0, 17, 0, + 0, 0, 0, 10, 14, 15, 0, 19, 0, 0, 0, 19, 0, 0, + 22, 42, 0, 0, 0, 17, 0, 22, 0, 29, 0, 0, 11, 31, + 0, 12, 0, 2, 0, 15, 9, 0, 0, 0, 0, 4, 0, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 38, 0, 0, 0, 0, 0, 0, 21, 26, + 0, 0, 0, 15, 0, 0, 21, 0, 12, 0, 0, 10, 9, 0, + 0, 17, 10, 15, 10, 10, 0, 22, 0, 18, 0, 0, 15, 9, + 0, 0, 0, 0, 15, 0, 0, 0, 21, 20, 0, 0, 18, 0, + 8, 0, 0, 0, 15, 0, 4, 9, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 29, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 15, 0, + 14, 11, 10, 0, 0, 0, 32, 0, 0, 0, 0, 0, 38, 0, + 0, 0, 0, 0, 0, 11, 24, 10, 0, 3, 31, 0, 0, 0, + 10, 0, 0, 0, 0, 13, 28, 0, 0, 0, 0, 0, 0, 0, + 27, 0, 0, 0, 0, 24, 0, 28, 14, 0, 4, 0, 0, 0, + 0, 0, 0, 19, 0, 20, 0, 11, 0, 21, 12, 0, 0, 0, + 0, 0, 19, 18, 0, 25, 15, 0, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 23, 0, 0, 13, 0, 0, 0, 0, 0, 0, 21, + 0, 0, 0, 14, 0, 0, 0, 0, 29, 0, 14, 24, 0, 0, + 0, 14, 0, 31, 0, 0, 3, 0, 0, 0, 20, 0, 0, 30, + 3, 0, 0, 0, 0, 0, 28, 0, 25, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 13, 0, 0, 0, 0, 0, 0, 17, 13, 0, 0, 0, + 0, 7, 0, 18, 0, 22, 0, 0, 17, 0, 22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 0, 26, 17, 33, 11, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 11, 0, + 0, 0, 17, 23, 30, 0, 3, 0, 15, 0, 0, 19, 15, 31, + 0, 0, 0, 0, 0, 12, 23, 0, 0, 0, 18, 0, 0, 30, + 6, 0, 0, 0, 12, 0, 0, 14, 0, 0, 23, 0, 0, 0, + 0, 2, 3, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 34, 0, 0, 0, 0, 0, 0, 31, 0, + 0, 10, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, + 2, 16, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, + 0, 0, 0, 10, 0, 30, 0, 0, 0, 21, 30, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 18, 10, 42, 0, 0, 0, 0, 13, + 0, 17, 0, 0, 28, 0, 3, 3, 0, 0, 29, 0, 12, 7, + 0, 0, 18, 4, 0, 0, 0, 22, 22, 0, 0, 18, 0, 20, + 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 3, 0, + 0, 10, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, + 29, 0, 0, 3, 15, 0, 0, 0, 20, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 0, 30, 0, 0, 0, 0, 0, 36, 22, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 35, - 0, 0, 0, 11, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 24, 0, 0, 0, 0, 0, 0, - 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 24, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 35, 27, 0, - 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 27, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 25, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, - 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 14, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, - 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 21, 0, 14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 29, 11, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 31, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 22, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, - 0, 15, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, - 0, 0, 20, 22, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 31, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 35, 0, 0, 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 20, 17, 0, 0, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 25, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13, 26, 0, 0, 0, 0, - 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 0, 19, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, - 0, 0, 20, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 10, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 33, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, - 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 26, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 27, 11, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 14, 0, - 0, 0, 0, 17, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 14, 0, 0, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 0, 17, 0, 0, 26, 0, 20, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 30, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 11, 16, + 0, 10, 20, 0, 32, 0, 0, 0, 0, 0, 0, 18, 0, 0, + 0, 37, 0, 0, 16, 0, 29, 11, 12, 0, 0, 0, 28, 0, + 15, 0, 23, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 14, + 0, 0, 0, 23, 0, 0, 24, 0, 0, 22, 15, 0, 0, 16, + 0, 0, 0, 0, 14, 29, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 28, 12, 0, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 11, 0, 0, 15, 0, 0, 13, 9, + 21, 14, 0, 0, 0, 0, 16, 15, 0, 0, 0, 0, 0, 0, + 0, 11, 0, 0, 0, 0, 17, 0, 13, 13, 0, 12, 0, 13, + 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 29, 0, 0, 0, 18, 22, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 10, 0, 0, 0, 0, 25, + 0, 0, 0, 0, 30, 15, 6, 0, 0, 15, 0, 16, 13, 0, + 47, 24, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 24, 20, + 0, 0, 0, 0, 23, 0, 0, 15, 0, 0, 0, 0, 0, 0, + 17, 0, 27, 0, 0, 0, 0, 0, 8, 0, 0, 0, 25, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, + 0, 22, 0, 0, 18, 0, 32, 15, 0, 1, 0, 0, 0, 16, + 0, 15, 18, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 11, 0, 0, 0, 0, 18, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 12, + 30, 0, 0, 0, 11, 31, 0, 0, 27, 13, 0, 0, 0, 0, + 0, 22, 0, 0, 0, 0, 21, 0, 0, 35, 0, 22, 26, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 13, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 28, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 25, + 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 19, 0, 0, 0, + 0, 23, 0, 21, 9, 0, 0, 0, 0, 0, 18, 0, 0, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, + 0, 34, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 0, + 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 18, 25, 0, 0, + 0, 0, 14, 0, 0, 0, 0, 0, 13, 0, 20, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, + 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 19, 14, + 0, 11, 0, 0, 0, 0, 0, 16, 0, 13, 0, 35, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 14, 0, + 0, 0, 0, 26, 33, 20, 0, 0, 0, 16, 0, 0, 0, 18, + 0, 0, 0, 19, 2, 0, 13, 0, 0, 21, 13, 3, 0, 17, + 16, 0, 15, 14, 0, 0, 0, 0, 0, 11, 36, 0, 0, 10, + 0, 3, 0, 0, 0, 0, 28, 38, 10, 20, 0, 0, 0, 0, + 0, 0, 0, 15, 13, 30, 0, 28, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 18, 0, 8, 0, 0, 0, 0, 0, + 0, 37, 23, 0, 15, 25, 0, 0, 0, 0, 15, 0, 0, 15, + 0, 0, 0, 27, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, + 0, 11, 14, 13, 14, 0, 15, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 45, 0, + 0, 0, 17, 0, 0, 14, 0, 15, 18, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 0, 13, 0, 0, 19, 0, 0, 0, 0, 0, + 0, 0, 29, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 15, 0, 0, 0, 35, 13, + 15, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 23, 0, 0, 33, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, - 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 33, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, - 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 15, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 25, 0, 0, 0, 0, 20, 0, 0, 0, 25, 0, 0, 16, - 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 16, 0, 0, 0, 37, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 28, - 0, 0, 16, 0, 0, 0, 0, 0, 15, 0, 0, 14, 0, 0, - 0, 0, 0, 0, 19, 0, 2, 0, 0, 0, 0, 0, 37, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 37, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 15, 0, 0, 0, 17, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 22, 17, 0, 12, 11, 0, 0, 0, 18, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 23, 2, 0, 14, 0, 0, 0, 19, 24, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 13, 0, 0, 0, 23, 0, 0, 0, 0, 3, 8, 20, 0, 0, + 0, 0, 0, 0, 33, 0, 20, 0, 6, 0, 0, 3, 0, 0, + 0, 0, 42, 4, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 25, + 0, 11, 11, 0, 40, 0, 0, 0, 0, 0, 0, 26, 12, 14, + 0, 0, 0, 0, 0, 11, 0, 15, 22, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 22, 0, 34, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 19, 0, 16, 0, 0, 0, 0, 11, 0, 0, 0, 20, + 0, 7, 21, 0, 0, 0, 0, 35, 19, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 29, 0, 0, 0, 28, 0, 0, + 0, 0, 24, 0, 13, 13, 0, 0, 0, 0, 15, 0, 0, 15, + 15, 0, 0, 0, 29, 0, 0, 0, 23, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 6, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0, 21, 0, 0, 33, 0, 0, 0, 16, + 0, 27, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 30, + 0, 0, 24, 0, 0, 31, 0, 0, 0, 0, 14, 0, 0, 0, + 33, 26, 0, 0, 0, 0, 9, 0, 17, 0, 0, 0, 9, 0, + 0, 0, 0, 11, 13, 0, 21, 13, 0, 0, 0, 24, 0, 0, + 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 21, 0, 23, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, + 0, 0, 24, 0, 0, 0, 0, 32, 0, 0, 34, 0, 0, 25, + 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 24, + 0, 0, 0, 14, 0, 0, 0, 25, 0, 11, 0, 0, 0, 0, + 0, 0, 9, 17, 0, 0, 14, 0, 0, 0, 0, 27, 0, 0, + 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, + 0, 0, 50, 0, 0, 0, 0, 0, 13, 0, 26, 0, 35, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, + 18, 12, 16, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 18, + 15, 0, 0, 0, 12, 31, 0, 0, 2, 0, 0, 0, 0, 39, + 20, 0, 25, 0, 0, 0, 29, 39, 0, 0, 0, 12, 0, 0, + 0, 34, 16, 15, 0, 0, 24, 15, 0, 0, 15, 0, 0, 0, + 0, 0, 4, 11, 15, 0, 14, 0, 0, 0, 14, 0, 0, 0, + 0, 16, 37, 4, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, + 26, 0, 0, 0, 12, 0, 19, 0, 0, 18, 0, 0, 0, 0, + 0, 0, 18, 23, 0, 22, 0, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 12, 17, 0, 13, 0, 0, 14, 0, 0, 0, 33, 0, + 33, 18, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 42, 0, 0, 10, 12, 0, 0, 0, + 16, 0, 0, 17, 13, 0, 19, 0, 7, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 23, 16, 0, 11, 12, 0, 0, 25, 0, 0, 0, + 0, 0, 13, 0, 0, 34, 0, 0, 0, 0, 0, 0, 29, 0, + 0, 0, 0, 12, 0, 0, 20, 25, 21, 0, 0, 0, 0, 0, + 20, 15, 27, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 19, 16, 0, 0, 0, 0, 14, 0, + 0, 0, 10, 0, 27, 23, 0, 0, 0, 0, 0, 0, 0, 22, + 0, 0, 43, 0, 23, 0, 28, 0, 0, 21, 0, 0, 19, 0, + 0, 0, 0, 0, 28, 0, 0, 32, 0, 0, 0, 0, 0, 0, + 0, 12, 0, 0, 0, 0, 0, 26, 17, 0, 22, 0, 27, 0, + 14, 0, 0, 0, 19, 0, 21, 0, 22, 7, 0, 0, 15, 22, + 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 12, + 0, 31, 12, 0, 0, 0, 0, 2, 0, 0, 0, 26, 0, 0, + 0, 14, 0, 14, 0, 0, 0, 29, 0, 11, 0, 9, 0, 0, + 0, 0, 0, 38, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 18, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 12, 26, 16, 0, 0, 0, 13, 0, + 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 0, 0, 29, 43, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24, 17, 0, 0, 0, 0, 3, + 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 15, 6, 0, + 8, 0, 0, 0, 14, 0, 10, 0, 11, 15, 0, 31, 9, 0, + 0, 0, 73, 74, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, + 0, 0, 16, 13, 0, 0, 0, 15, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 34, 9, 14, 0, 0, 13, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 12, 0, 12, 9, 36, 0, + 37, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 25, 0, 0, 15, 0, 0, 0, 12, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 22, + 0, 0, 12, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 0, 0, 11, 0, 0, 0, 0, 0, + 0, 13, 0, 0, 30, 15, 17, 31, 0, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 31, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 32, 23, 0, 0, 0, 0, 6, 0, + 0, 32, 0, 0, 6, 0, 0, 3, 0, 0, 0, 0, 0, 4, + 0, 0, 0, 0, 0, 0, 2, 0, 0, 23, 6, 2, 0, 30, + 3, 0, 24, 0, 0, 11, 4, 2, 0, 0, 0, 27, 0, 35, + 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 33, + 0, 25, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, + 0, 42, 0, 0, 0, 12, 9, 0, 0, 0, 9, 0, 24, 0, + 0, 0, 0, 0, 30, 0, 0, 0, 19, 0, 0, 0, 0, 13, + 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 18, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 26, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 24, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 23, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, + 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 20, + 0, 18, 0, 27, 0, 0, 0, 0, 0, 11, 28, 0, 17, 4, + 14, 12, 0, 0, 0, 18, 22, 6, 0, 0, 0, 31, 0, 0, + 27, 0, 0, 0, 0, 11, 9, 13, 0, 0, 0, 0, 23, 0, + 0, 0, 4, 0, 0, 0, 15, 11, 25, 11, 14, 0, 0, 0, + 13, 0, 25, 0, 18, 0, 0, 6, 0, 0, 0, 17, 0, 0, + 16, 32, 0, 0, 8, 0, 0, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 24, 0, 20, 0, 0, 6, 0, + 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 23, 0, 27, 0, 0, 11, 0, + 0, 15, 0, 0, 0, 30, 14, 0, 0, 0, 31, 0, 0, 0, + 0, 18, 9, 0, 34, 0, 0, 7, 9, 0, 0, 0, 0, 0, + 11, 15, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 10, 20, 0, 18, 17, 15, 0, 0, + 0, 18, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 0, 0, 31, 0, 0, 0, 0, 0, + 0, 23, 0, 13, 0, 0, 0, 0, 27, 0, 0, 11, 0, 0, + 0, 0, 0, 0, 0, 10, 0, 0, 0, 15, 28, 0, 0, 0, + 13, 0, 15, 0, 0, 20, 0, 0, 0, 0, 26, 15, 0, 0, + 0, 0, 0, 12, 0, 0, 0, 0, 32, 28, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12, 14, 30, 0, 12, 0, 0, 0, 0, 6, 0, 0, 0, + 0, 16, 16, 0, 0, 0, 0, 0, 0, 34, 0, 14, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, - 0, 13, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, + 17, 0, 18, 0, 0, 0, 0, 16, 0, 23, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 25, 0, 0, 0, 8, 0, 13, 0, 0, + 24, 23, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 13, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 14, 0, 0, 0, + 14, 0, 26, 0, 0, 0, 9, 0, 11, 0, 0, 0, 20, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 15, 31, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 24, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 13, 13, 0, 0, 0, 0, 0, 0, 13, 0, 0, + 0, 21, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 16, + 0, 12, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 18, 0, 0, 0, 0, 0, 0, 0, 18, 11, 0, 0, + 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 15, 0, + 0, 14, 0, 0, 14, 21, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 13, 0, 0, 30, 2, 31, 19, 0, 0, 0, 0, + 35, 21, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 32, 0, 0, 0, 28, 0, 0, 11, + 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 15, 31, 0, 14, 0, 0, 0, 0, 33, 0, + 0, 0, 27, 0, 29, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, + 9, 0, 14, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 15, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 26, 0, 22, 0, 50, 0, 0, 21, 0, 0, + 0, 0, 15, 0, 14, 0, 16, 27, 0, 0, 0, 0, 26, 0, + 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, + 0, 0, 0, 43, 0, 0, 25, 0, 0, 29, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 15, 0, 0, 0, 0, 0, 0, + 0, 30, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 14, + 0, 0, 23, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 0, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 37, 0, 0, 0, + 32, 0, 0, 10, 26, 0, 0, 0, 0, 13, 11, 0, 0, 0, + 18, 0, 0, 0, 41, 0, 0, 0, 29, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, + 25, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 43, 0, 8, 0, + 0, 0, 0, 0, 39, 0, 20, 0, 14, 0, 0, 11, 0, 10, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 16, 0, + 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 24, 18, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 14, 0, 0, + 2, 19, 0, 17, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 19, 23, 22, 0, 0, 19, 0, 0, 0, 0, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, + 0, 29, 0, 0, 12, 0, 0, 0, 0, 0, 0, 20, 0, 0, + 29, 0, 18, 0, 0, 0, 0, 26, 0, 0, 30, 25, 0, 0, + 0, 12, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 0, 0, 0, 18, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 34, 0, 14, 0, 0, 0, + 0, 0, 0, 15, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 11, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, + 0, 0, 44, 0, 0, 0, 28, 0, 53, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, + 0, 0, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 22, + 22, 0, 0, 0, 0, 0, 0, 11, 0, 2, 0, 26, 0, 0, + 0, 3, 0, 18, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 16, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 14, 0, 28, 0, 10, 0, 14, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 29, 19, 15, 0, + 0, 0, 0, 0, 0, 31, 0, 0, 0, 24, 0, 0, 0, 0, + 0, 0, 9, 30, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, + 0, 13, 0, 24, 0, 19, 0, 0, 0, 20, 23, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 26, 0, 14, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 0, 17, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, + 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 24, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 21, + 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 0, 0, 10, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 24, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 14, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, + 0, 0, 13, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 14, + 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 29, 32, 0, + 8, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 23, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 21, 0, 19, 0, 28, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 0, 0, 0, 29, 0, 0, 0, 0, 0, 28, 0, 6, 17, 0, + 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 25, + 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, 0, 0, 0, 11, 0, 23, 0, 14, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 22, 19, 0, 0, 0, 24, 7, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 0, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 35, + 0, 15, 18, 24, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 33, 24, 0, 30, 0, 29, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, + 0, 28, 0, 0, 0, 0, 0, 0, 27, 11, 0, 0, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 24, + 14, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, + 24, 0, 0, 0, 15, 17, 0, 0, 0, 0, 0, 0, 37, 0, + 0, 0, 19, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 23, 0, 0, 0, + 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 12, 18, 0, 0, 40, 14, 0, + 0, 0, 0, 15, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 33, + 22, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, + 0, 0, 0, 15, 23, 0, 0, 0, 23, 0, 0, 0, 0, 15, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 24, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 29, 14, 30, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 35, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 18, 0, 0, + 0, 18, 0, 0, 0, 30, 0, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 23, 0, + 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 14, 29, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 20, + 0, 0, 0, 0, 27, 0, 0, 0, 0, 27, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 11, + 0, 36, 22, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 14, 0, 0, 0, + 0, 0, 72, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 31, + 0, 20, 0, 17, 23, 0, 0, 0, 0, 29, 0, 0, 22, 0, + 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 30, 0, 0, + 0, 21, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 10, + 0, 0, 39, 7, 0, 0, 0, 0, 0, 11, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 34, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 9, 18, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 26, 0, + 0, 0, 14, 11, 8, 0, 27, 0, 0, 0, 0, 21, 0, 0, + 0, 0, 0, 0, 0, 27, 0, 17, 0, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 29, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 29, 0, 28, + 0, 3, 36, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 43, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 16, + 0, 0, 0, 0, 21, 28, 0, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 34, 28, 29, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 17, 0, + 0, 29, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, + 0, 0, 13, 0, 0, 0, 0, 16, 0, 18, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, + 0, 0, 0, 27, 0, 22, 24, 0, 0, 15, 24, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 29, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 0, 21, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 29, 23, 0, 16, 0, 0, 0, + 0, 23, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 0, 28, 0, 0, 0, 0, 0, 17, + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 29, 0, + 33, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 16, 29, 0, + 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 22, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 0, 0, 0, 25, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, + 23, 0, 0, 0, 0, 23, 0, 36, 0, 0, 29, 0, 28, 0, + 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 29, 0, 0, 0, + 33, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, + 0, 0, 21, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 14, 0, 0, + 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 30, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, + 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 22, 0, 0, 19, 0, 0, 0, 24, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 21, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, + 0, 22, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 0, 24, 0, 31, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 22, 0, 0, 19, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 25, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 7, + 19, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, + 0, 0, 22, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 15, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, + 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 30, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 22, 0, 0, 0, 0, 0, 0, 0, + 35, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 31, 0, 0, 17, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 11, 0, 0, 0, 0, 0, 15, 0, 0, 0, 27, 0, 0, 10, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 43, 14, + 0, 0, 0, 0, 26, 17, 0, 0, 12, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 35, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 6, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 27, 0, + 0, 0, 0, 16, 27, 0, 0, 0, 0, 27, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 28, 0, 6, 0, 22, 0, + 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 24, 0, 0, 0, 0, 0, + 17, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 22, 25, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 22, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, + 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 17, + 0, 16, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 25, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 28, 0, 22, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 14, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25, 0, 23, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 13, 0, 0, 0, 0, 13, 0, 0, 0, 0, + 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 33, + 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, + 9, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 18, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, 0, 0, 0, 14, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, + 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 6, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 0, 0, 25, 43, 7, 0, 14, 0, 0, 0, + 0, 0, 15, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 20, + 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 36, 0, 0, 0, 25, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, + 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 15, 0, 37, 0, 0, 0, 0, 0, 0, + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 20, 0, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 22, - 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 0, 0, 0, 16, 0, 0, 0, 0, 34, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 40, + 0, 0, 0, 7, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 25, 13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 0, 0, 15, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 17, + 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 15, 0, 0, 0, 28, 0, 0, 28, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 15, 15, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 6, 0, 0, 0, 18, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 36, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 30, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, + 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 15, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 17, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 15, 20, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1046,137 +1424,32 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, - 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 24, 0, 0, 0, 17, 24, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 22, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 13, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, - 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 27, 0, 0, 37, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 0, 0, 17, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, - 16, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 15, 24, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 0, 0, 0, 14, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 28, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 23, 13, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1186,170 +1459,48 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 28, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, - 0, 8, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 28, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 27, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1357,8 +1508,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1367,7 +1516,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1375,7 +1523,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1387,65 +1534,33 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1460,33 +1575,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1508,20 +1597,18 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1543,103 +1630,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1687,6 +1677,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1713,10 +1704,10 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1749,6 +1740,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1759,8 +1751,10 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1774,6 +1768,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1808,6 +1803,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1828,7 +1824,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1851,6 +1846,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1880,8 +1876,8 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1910,6 +1906,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1935,6 +1932,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1960,6 +1958,217 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2002,7 +2211,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2012,7 +2220,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2053,7 +2260,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2083,7 +2289,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2104,7 +2309,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2126,6 +2330,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2135,7 +2340,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2158,10 +2362,11 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2274,6 +2479,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2355,7 +2561,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2398,6 +2603,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2418,6 +2624,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2444,5139 +2651,5531 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 31 }; static const struct grib_keys_hash wordlist[] = { {""}, {""}, {""}, {""}, {""}, - {"n",1368}, + {"n",1375}, {""}, - {"m",1244}, - {"na",1374}, - {"t",2242}, + {"m",1250}, + {"na",1381}, + {"t",2276}, {""}, - {"nnn",1385}, - {"nt",1400}, + {"nnn",1393}, + {"nt",1409}, {""}, - {"nd",1381}, + {"nd",1388}, {"ed",737}, - {"td",2253}, - {"name",1375}, - {"min",1327}, - {"data",633}, + {"td",2287}, + {"name",1382}, + {"min",1333}, + {"data",632}, {""}, - {"date",654}, + {"date",653}, {""}, {""}, {""}, - {"time",2283}, - {"sd",2020}, + {"time",2325}, + {"sd",2044}, {""}, {""}, {""}, {""}, - {"ident",982}, + {"ident",986}, {""}, {""}, - {"one",1584}, - {"metadata",1323}, + {"one",1594}, + {"metadata",1329}, {""}, {""}, - {"param",1699}, + {"param",1710}, {""}, - {"stream",2214}, + {"stream",2248}, {""}, - {"mars",1247}, - {"names",1380}, + {"mars",1253}, + {"names",1387}, {"enorm",780}, - {"dataset",651}, + {"dataset",650}, {""}, {""}, {""}, {""}, - {"spare",2173}, + {"spare",2200}, {"domain",719}, {"eps",785}, {""}, - {"sort",2156}, + {"sort",2183}, {""}, {"centre",406}, {""}, - {"oper",1595}, - {"parameter",1706}, - {"present",1754}, - {"step",2202}, + {"oper",1605}, + {"parameter",1718}, + {"present",1765}, + {"step",2236}, {"edition",738}, {""}, {""}, {""}, - {"rectime",1842}, - {"true",2322}, - {"core",608}, - {"Latin",112}, - {"iteration",1059}, + {"rectime",1854}, + {"true",2365}, + {"core",607}, + {"Latin",111}, + {"iteration",1065}, {""}, {""}, - {"opttime",1602}, + {"opttime",1612}, {""}, {""}, {""}, - {"minute",1329}, + {"minute",1335}, {""}, {"dimension",702}, {""}, {""}, - {"const",581}, - {"parameters",1714}, + {"const",580}, + {"parameters",1726}, {""}, - {"minimum",1328}, - {"assertion",322}, - {"Lap",107}, - {"second",2021}, - {"points",1741}, - {"timerepres",2297}, + {"minimum",1334}, + {"assertion",321}, + {"Lap",106}, + {"second",2045}, + {"points",1753}, + {"timerepres",2339}, {""}, {""}, - {"section",2046}, - {"Lo",122}, - {"units",2391}, - {"restricted",1885}, - {"tile",2277}, + {"section",2073}, + {"Lo",121}, + {"units",2434}, + {"restricted",1904}, + {"tile",2318}, {""}, {"direction",705}, {""}, {""}, - {"radius",1816}, - {"stepZero",2212}, - {""}, {""}, - {"status",2201}, - {"instrument",1014}, - {"Lop",142}, - {"ucs",2382}, - {""}, {""}, - {"partitions",1720}, - {""}, - {"leadtime",1124}, - {""}, - {"count",622}, - {""}, - {"uuid",2423}, - {"hdate",952}, - {"three",2266}, - {""}, - {"precision",1749}, - {"range",1821}, - {"refdate",1848}, - {""}, - {"statistics",2200}, - {"uco",2381}, - {"process",1784}, - {""}, - {"grid",929}, - {""}, - {"radials",1815}, - {""}, - {"dataTime",648}, - {"dateTime",664}, - {""}, {""}, - {"stepunits",2213}, - {""}, {""}, - {"daLoop",632}, - {"phase",1734}, - {"char",431}, - {"product",1786}, - {"correction",613}, - {"method",1324}, + {"radius",1828}, {""}, {""}, {""}, - {"section8",2085}, + {"status",2235}, + {"instrument",1018}, + {"Lop",141}, + {"ucs",2425}, {""}, {""}, - {"identifier",986}, - {"class",434}, - {""}, {""}, - {"origin",1609}, - {"reference",1849}, + {"partitions",1732}, + {"stepZero",2246}, + {"leadtime",1130}, {""}, - {"latitude",1089}, + {"count",621}, + {""}, + {"uuid",2466}, + {"hdate",956}, + {"three",2307}, + {""}, + {"precision",1760}, + {"range",1833}, + {"refdate",1860}, + {""}, + {"statistics",2234}, + {"uco",2424}, + {"process",1795}, + {""}, + {"grid",933}, + {""}, + {"radials",1827}, + {""}, + {"dataTime",647}, + {"dateTime",663}, + {""}, {""}, + {"stepunits",2247}, + {""}, {""}, + {"daLoop",631}, + {"phase",1746}, + {"char",430}, + {"product",1797}, + {"correction",612}, + {"method",1330}, {""}, {""}, {""}, {""}, {""}, {""}, - {"generation",916}, + {"identifier",990}, + {"class",433}, {""}, {""}, - {"pl",1738}, + {"origin",1619}, + {"reference",1861}, + {""}, + {"latitude",1095}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"generation",920}, {""}, {""}, - {"consensus",579}, + {"pl",1750}, + {""}, {""}, + {"consensus",578}, {""}, - {"upperLimit",2413}, + {"upperLimit",2456}, {""}, - {"hundred",974}, + {"hundred",978}, {""}, {""}, {""}, {""}, - {"hour",964}, + {"hour",968}, {""}, {"discipline",711}, - {"file",865}, - {"latitudes",1120}, + {"file",866}, + {"latitudes",1126}, {""}, - {"total",2299}, - {"model",1348}, + {"total",2341}, + {"model",1354}, {""}, - {"normal",1388}, + {"normal",1396}, {""}, {""}, - {"false",858}, + {"false",859}, {""}, {""}, - {"fcperiod",862}, - {"nref",1399}, + {"fcperiod",863}, + {"nref",1407}, {""}, - {"datasetTemplate",653}, - {"signature",2139}, + {"datasetTemplate",652}, + {"signature",2166}, {""}, - {"million",1326}, - {"dataStream",646}, + {"million",1332}, + {"dataStream",645}, {""}, - {"temperature",2255}, - {"g",905}, - {"thousand",2265}, + {"temperature",2290}, + {"g",909}, + {"thousand",2306}, {""}, {""}, {""}, {""}, {""}, {""}, - {"marsStream",1272}, + {"marsStream",1278}, {""}, - {"resolution",1876}, - {"nTiles",1373}, + {"resolution",1895}, + {"nTiles",1380}, {"categories",389}, {""}, {"endStep",771}, - {"isSens",1044}, + {"isSens",1048}, {""}, {"eight",742}, {""}, {""}, {""}, {""}, {""}, {""}, - {"month",1355}, + {"month",1362}, {""}, - {"platform",1739}, + {"platform",1751}, {""}, {""}, - {"marsStep",1271}, - {"K",94}, - {"offset",1547}, + {"marsStep",1277}, + {""}, + {"offset",1557}, {"diagnostic",698}, - {"operStream",1596}, + {"operStream",1606}, {""}, - {"startStep",2193}, - {"year",2525}, - {"anoffset",317}, + {"startStep",2227}, + {"year",2574}, + {"anoffset",316}, {""}, {""}, - {"truncateLaplacian",2325}, + {"truncateLaplacian",2368}, {""}, {""}, {"elementsTable",743}, - {"marsQuantile",1268}, - {""}, - {"padding",1628}, - {""}, - {"offsetdate",1581}, - {"type",2333}, {""}, {""}, - {"offsettime",1582}, + {"padding",1638}, + {""}, + {"offsetdate",1591}, + {"type",2376}, + {""}, {""}, + {"offsettime",1592}, {""}, {""}, {""}, {""}, {""}, - {"ordering",1605}, + {"ordering",1615}, {""}, - {"oceanStream",1545}, + {"oceanStream",1555}, {""}, {""}, {""}, - {"system",2240}, + {"system",2274}, {""}, - {"partitionTable",1719}, + {"partitionTable",1731}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitude",1203}, + {"longitude",1209}, {""}, - {"local",1167}, + {"local",1173}, {""}, {""}, {""}, {"Di",30}, - {"TT",240}, - {"paramtype",1716}, + {"TT",239}, + {"paramtype",1728}, {""}, - {"channel",429}, + {"channel",428}, {""}, {""}, {""}, {""}, {""}, - {"yLast",2524}, + {"yLast",2573}, {""}, {""}, - {"two",2331}, + {"two",2374}, {""}, - {"dataDate",636}, - {"flags",882}, + {"dataDate",635}, + {"flags",886}, {""}, {""}, {""}, - {"longitudes",1234}, + {"longitudes",1240}, {"Dstart",38}, - {"gg",918}, + {"gg",922}, {""}, {""}, - {"fgTime",864}, + {"fgTime",865}, {""}, {""}, {""}, {""}, {""}, - {"marsDir",1251}, + {"marsDir",1257}, {""}, {""}, {""}, {""}, {""}, {""}, - {"localTime",1195}, + {"localTime",1201}, {""}, - {"masterDir",1280}, + {"masterDir",1286}, {""}, {"endTimeStep",774}, {""}, {""}, {""}, - {"crcrlf",627}, + {"crcrlf",626}, {""}, - {"threshold",2267}, + {"threshold",2308}, {""}, {""}, {""}, {""}, - {"matchSort",1287}, + {"matchSort",1293}, {""}, - {"landtype",1081}, - {"marsDomain",1252}, - {""}, {""}, {""}, + {"landtype",1087}, + {"marsDomain",1258}, + {""}, {""}, + {"marsQuantile",1274}, {"dummyc",724}, - {"hideThis",957}, - {"marsLatitude",1262}, + {"hideThis",961}, + {"marsLatitude",1268}, {""}, {""}, {""}, - {"fcmonth",861}, - {"siteLatitude",2147}, + {"fcmonth",862}, + {"siteLatitude",2174}, {""}, {""}, - {"instrumentIdentifier",1015}, + {"instrumentIdentifier",1019}, {""}, {""}, {""}, {""}, - {"forecastperiod",895}, - {"dataType",649}, + {"forecastperiod",899}, + {"dataType",648}, {""}, {""}, {""}, {""}, {""}, {""}, - {"reserved",1867}, + {"reserved",1886}, {""}, {""}, - {"dataLength",639}, - {"marsType",1275}, + {"dataLength",638}, + {"marsType",1281}, {""}, {""}, - {"flag",877}, + {"flag",881}, + {"section8",2112}, + {"varno",2486}, + {""}, {""}, + {"notDecoded",1406}, + {"version",2491}, + {"dataSelection",644}, + {""}, {""}, + {"K",93}, {""}, - {"varno",2443}, - {""}, - {"paramType",1703}, - {"notDecoded",1398}, - {"version",2448}, - {"dataSelection",645}, - {""}, {""}, {""}, - {"band",334}, - {"stepType",2208}, - {"countTotal",625}, - {""}, - {"dataKeys",638}, + {"stepType",2242}, + {"countTotal",624}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"isSpectral",1049}, {""}, - {"isSpectral",1045}, + {"forecastTime",898}, {""}, - {"forecastTime",894}, - {""}, - {"conceptDir",571}, - {"rdbtime",1827}, - {"Xp",274}, - {"reportType",1863}, - {"codeType",558}, + {"conceptDir",570}, + {""}, {""}, + {"reportType",1881}, + {"codeType",557}, {""}, {"eleven",745}, {""}, {""}, {""}, - {"userTimeStart",2422}, - {"TS",238}, - {"Xo",273}, - {""}, + {"userTimeStart",2465}, + {"TS",237}, + {""}, {""}, {"efiOrder",741}, - {"selectedSecond",2122}, + {"selectedSecond",2149}, {""}, {""}, {""}, {""}, {""}, - {"TScalc",239}, - {"bitmap",372}, - {""}, {""}, {""}, {""}, - {"additionalParameter",302}, + {"TScalc",238}, + {""}, {""}, {""}, {""}, {""}, + {"additionalParameter",301}, {""}, - {"lowerLimit",1237}, + {"lowerLimit",1243}, {""}, - {"dataOrigin",640}, - {""}, - {"KS",95}, - {""}, - {"number",1401}, - {""}, {""}, {""}, {""}, - {"average",326}, + {"dataOrigin",639}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"average",325}, {""}, {""}, {"elevation",744}, {""}, {""}, {"dy",726}, {""}, {""}, - {"day",666}, + {"day",665}, {""}, {""}, - {"statisticalProcess",2198}, + {"statisticalProcess",2232}, {""}, {""}, {""}, - {"isSatellite",1042}, + {"isSatellite",1046}, {""}, {""}, - {"windSpeed",2495}, - {""}, {""}, {""}, {""}, - {"gridType",939}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"values",2431}, - {"fgDate",863}, + {"windSpeed",2544}, + {""}, + {"dataKeys",637}, + {""}, {""}, + {"gridType",943}, + {""}, + {"nspatvals",1408}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"values",2474}, + {"fgDate",864}, {""}, {""}, {""}, {""}, {""}, - {"forecastSteps",893}, + {"forecastSteps",897}, {""}, - {"statisticalProcessesList",2199}, + {"statisticalProcessesList",2233}, {""}, - {"aerosolpacking",307}, + {"aerosolpacking",306}, {""}, - {"Ly",153}, - {"localDate",1168}, + {"Ly",152}, + {"localDate",1174}, {""}, {""}, - {"coefsSecond",563}, + {"coefsSecond",562}, {""}, - {"localDir",1176}, + {"localDir",1182}, {""}, - {"ieeeFloats",987}, + {"ieeeFloats",991}, {""}, {""}, {""}, {""}, {""}, {""}, - {"levels",1147}, + {"levels",1153}, {"dummy",721}, {""}, {""}, - {"levelist",1146}, - {"logTransform",1202}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"levelist",1152}, + {"logTransform",1208}, {""}, - {"Lcy",119}, - {""}, {""}, {""}, {""}, - {"avg",330}, - {""}, {""}, {""}, - {"recDateTime",1839}, - {""}, - {"offsetSection9",1578}, - {""}, {""}, {""}, - {"centreDescription",407}, - {"localSecond",1190}, - {"unitsFactor",2397}, - {"Luy",149}, - {""}, {""}, - {"satelliteSeries",1950}, - {""}, {""}, {""}, - {"coefsFirst",562}, - {"forecastLeadTime",886}, - {""}, {""}, - {"marsLevel",1263}, - {"level",1141}, + {"KS",94}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unitOfTime",2388}, - {"country",626}, + {"Lcy",118}, {""}, {""}, {""}, {""}, - {"isOctahedral",1040}, + {"avg",329}, {""}, {""}, {""}, - {"topLevel",2298}, + {"recDateTime",1851}, + {""}, {""}, {""}, {""}, {""}, + {"centreDescription",407}, + {"localSecond",1196}, + {"unitsFactor",2440}, + {"Luy",148}, {""}, {""}, - {"typicalTime",2377}, - {"offsetSection8",1577}, + {"satelliteSeries",1969}, {""}, - {"productType",1791}, - {""}, {""}, {""}, - {"codeFigure",557}, + {"offsetSection9",1588}, + {""}, + {"coefsFirst",561}, + {"forecastLeadTime",890}, {""}, {""}, - {"userDateStart",2418}, + {"marsLevel",1269}, + {"level",1147}, + {"band",333}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"unitOfTime",2431}, + {"country",625}, + {""}, {""}, {""}, {""}, + {"isOctahedral",1044}, {""}, {""}, {""}, - {"LaD",104}, - {"aerosolType",304}, + {"topLevel",2340}, + {""}, + {"rdbtime",1839}, + {"typicalTime",2420}, {""}, {""}, - {"spectralType",2183}, + {"productType",1803}, + {""}, + {"paramTypeTile",1715}, + {""}, + {"codeFigure",556}, + {""}, {""}, + {"userDateStart",2461}, + {""}, {""}, {""}, + {"LaD",103}, + {"aerosolType",303}, + {""}, {""}, + {"spectralType",2217}, {"destineSection",696}, - {""}, {""}, {""}, {""}, - {"accuracy",296}, - {""}, - {"indicatorOfParameter",1000}, - {""}, {""}, {""}, {""}, - {"yFirst",2523}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"isFillup",1037}, - {"rdbtimeTime",1834}, - {"centreLongitude",412}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudesList",1121}, + {"bitmap",372}, {""}, {""}, {""}, - {"zero",2534}, + {"accuracy",295}, + {""}, + {"indicatorOfParameter",1004}, + {""}, {""}, {""}, {""}, + {"yFirst",2572}, + {""}, + {"number",1410}, + {""}, {""}, {""}, {""}, + {"isFillup",1041}, + {""}, + {"centreLongitude",412}, + {""}, {""}, {""}, {""}, {""}, + {"J",91}, + {"latitudesList",1127}, + {""}, {""}, {""}, + {"Xp",273}, {""}, {"distinctLatitudes",713}, + {""}, {""}, + {"zero",2583}, + {"JS",92}, {""}, - {"aerosolTypeName",305}, + {"gridSpecification",942}, {""}, - {"zeros",2535}, + {"Xo",272}, + {"zeros",2584}, {""}, - {"gridSpecification",938}, - {""}, {""}, {""}, {""}, - {"pressureLevel",1774}, + {"pressureLevel",1785}, {""}, {""}, {""}, {""}, {""}, - {"dataFlag",637}, - {"standardDeviation",2185}, + {"dataFlag",636}, + {"standardDeviation",2219}, {""}, - {"laplacianOperator",1082}, - {"referenceSampleInterval",1857}, + {"laplacianOperator",1088}, + {"referenceSampleInterval",1869}, {""}, {""}, {"ccsdsFlags",395}, {""}, - {"levtype",1148}, - {"ccsdsRsi",396}, + {"levtype",1154}, + {""}, {"endDescriptors",750}, {""}, - {"pv",1800}, - {"setLocalDefinition",2129}, + {"pv",1812}, + {"setLocalDefinition",2156}, {""}, {""}, - {"fireTemplate",867}, + {"fireTemplate",868}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"obstype",1542}, - {""}, {""}, {""}, {""}, {""}, - {"marsRange",1269}, - {""}, {""}, - {"periodOfTime",1730}, + {"periodOfTime",1742}, {""}, {""}, {""}, {""}, - {"windDirection",2484}, + {"windDirection",2533}, {""}, {""}, - {"longitudesList",1235}, - {""}, - {"latitudeSexagesimal",1117}, - {""}, - {"stepRange",2206}, - {"referenceDate",1850}, - {""}, {""}, - {"localDateTime",1169}, - {""}, - {"startTimeStep",2196}, - {"optionalData",1601}, + {"longitudesList",1241}, {""}, {""}, {""}, - {"unitsDecimalScaleFactor",2395}, + {"latitudeSexagesimal",1123}, + {"referenceDate",1862}, + {""}, {""}, + {"localDateTime",1175}, {""}, - {"referenceStep",1858}, + {"startTimeStep",2230}, + {"optionalData",1611}, + {""}, {""}, {""}, + {"unitsDecimalScaleFactor",2438}, + {""}, + {"referenceStep",1870}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"templatesLocalDir",2257}, - {""}, - {"pointsOrdering",1742}, - {""}, {""}, {""}, {""}, + {"templatesLocalDir",2294}, + {""}, {""}, {""}, {""}, {""}, {""}, {"Dy",42}, {""}, - {"lev",1139}, + {"lev",1145}, {""}, {""}, - {"nlev",1384}, + {"nlev",1392}, {""}, - {"coordinatesPresent",607}, + {"coordinatesPresent",606}, {"centreForLocal",408}, {""}, - {"global",919}, - {""}, - {"rdbType",1825}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"upperRange",2414}, - {""}, {""}, {""}, {""}, - {"tubeDomain",2329}, - {"typicalDate",2370}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"marsStartStep",1270}, - {""}, - {"ensembleSize",783}, - {""}, {""}, {""}, - {"heightLevelName",954}, - {""}, {""}, - {"meanSize",1315}, - {""}, {""}, {""}, - {"computeStatistics",570}, + {"aerosolTypeName",304}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetSection0",1567}, + {"billion",369}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"rectimeDay",1843}, - {"rdbtimeDate",1828}, - {""}, {""}, {""}, {""}, - {"offsetDescriptors",1561}, - {"preferLocalConcepts",1753}, + {"typicalDate",2413}, {""}, {""}, {""}, {""}, {""}, - {"boustrophedonic",379}, + {"tempLevtype",2288}, + {"marsStartStep",1276}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Nr",200}, + {""}, {""}, + {"computeStatistics",569}, + {"meanSize",1321}, + {""}, + {"Ni",198}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"userDateTimeStart",2420}, + {"rdbtimeTime",1846}, + {"rectimeDay",1855}, + {""}, {""}, {""}, + {"releaseStartSecond",1878}, + {"Nside",203}, + {"offsetDescriptors",1571}, + {"preferLocalConcepts",1764}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"userDateTimeStart",2463}, {""}, {""}, {"centreLongitudeInDegrees",413}, - {""}, {""}, {""}, - {"runwayState",1944}, - {""}, {""}, {""}, - {"parameterDiscipline",1709}, {""}, - {"datumSize",665}, - {"overlayTemplate",1622}, - {""}, {""}, {""}, {""}, {""}, - {"typeOfTile",2362}, - {""}, {""}, {""}, - {"localDecimalScaleFactor",1171}, - {"levelType",1143}, - {"laplacianOperatorIsSet",1083}, + {"offsetSection8",1587}, {""}, - {"activity",298}, - {"secondSize",2035}, - {""}, {""}, {""}, {""}, {""}, + {"runwayState",1963}, + {""}, {""}, {""}, + {"parameterDiscipline",1721}, + {""}, {""}, + {"overlayTemplate",1632}, + {""}, {""}, {""}, + {"datumSize",664}, + {""}, + {"typeOfTile",2405}, + {""}, {""}, {""}, + {"localDecimalScaleFactor",1177}, + {"levelType",1149}, + {"laplacianOperatorIsSet",1089}, + {""}, + {"activity",297}, + {""}, {""}, + {"obstype",1552}, + {""}, {""}, + {"secondSize",2059}, {"categoryType",390}, - {""}, - {"localFlag",1178}, - {""}, {""}, - {"subSetK",2229}, - {""}, - {"firstDimension",868}, - {""}, - {"lengthDescriptors",1129}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"conceptsLocalDirAll",574}, - {""}, {""}, - {"generatingProcessTemplate",914}, - {""}, - {"anoffsetLast",320}, - {""}, {""}, - {"JS",93}, - {"gridDefinition",931}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"angleDivisor",311}, - {""}, - {"firstSize",876}, - {"rdbDateTime",1823}, - {"validityTime",2430}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"waveDomain",2472}, - {""}, - {"datasetForLocal",652}, - {""}, {""}, {""}, {""}, {""}, - {"dateOfForecast",656}, - {""}, {""}, {""}, - {"timeOfForecast",2290}, - {""}, {""}, - {"bottomLevel",378}, - {"longitudinalDirectionGridLength",1236}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"localDay",1170}, - {""}, - {"matchTimeRepres",1288}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"oldSubtype",1583}, + {"parameterName",1723}, + {"localFlag",1184}, {""}, {""}, {""}, {""}, - {"derivedForecast",693}, - {""}, {""}, {""}, - {"localDefinition",1174}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"firstDimension",869}, + {"NL",185}, + {"lengthDescriptors",1135}, + {""}, + {"suiteName",2267}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"generatingProcessIdentifier",913}, - {""}, {""}, - {"anoffsetFirst",318}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"heightLevelName",958}, {""}, - {"Nr",200}, - {""}, {""}, {""}, {""}, - {"originalSubCentreIdentifier",1613}, - {"Ni",198}, - {""}, {""}, {""}, {""}, - {"northernLatitudeOfDomain",1396}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lowerRange",1238}, - {"setDecimalPrecision",2128}, + {"conceptsLocalDirAll",573}, {""}, - {"groupSplitting",943}, - {""}, {""}, - {"Nside",203}, - {"generatingProcessIdentificationNumber",912}, + {"tileName",2323}, + {"generatingProcessTemplate",918}, + {""}, + {"anoffsetLast",319}, + {""}, {""}, {""}, + {"gridDefinition",935}, {""}, {""}, {""}, {""}, {""}, {""}, - {"freeFormData",900}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfCentrePoint",1207}, + {"angleDivisor",310}, {""}, {""}, {""}, - {"clusterSize",551}, - {""}, {""}, {""}, - {"incrementOfLengths",991}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"endOfRange",770}, + {"validityTime",2473}, + {""}, + {"modelName",1357}, + {"firstSize",877}, + {""}, {""}, {""}, {""}, {""}, + {"ccsdsRsi",396}, {""}, {""}, - {"reservedOctet",1872}, - {""}, - {"lcwfvSuiteName",1123}, - {""}, {""}, {""}, {""}, - {"southernLatitudeOfDomain",2167}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"parameterName",1711}, - {""}, - {"hourOfForecast",967}, - {""}, {""}, - {"marsLevelist",1264}, - {""}, - {"NL",186}, - {"anoffsetFrequency",319}, - {"verticalDomainTemplate",2458}, - {"suiteName",2233}, - {""}, {""}, {""}, - {"bufrTemplate",384}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"tileName",2282}, - {""}, {""}, {""}, {""}, - {"decimalScaleFactor",676}, - {""}, - {"integerScaleFactor",1018}, - {"J",92}, - {"typicalDay",2372}, - {""}, - {"marsParam",1267}, - {""}, - {"marsKeywords",1259}, - {"newSubtype",1383}, - {""}, {""}, {""}, - {"analysisOffsets",310}, - {""}, - {"modelName",1351}, - {""}, {""}, {""}, - {"LaR",106}, - {""}, {""}, {""}, - {"monthOfForecast",1358}, - {"typeOfLevel",2347}, {"cfName",417}, - {"gridName",936}, - {"latitudeOfCentrePoint",1094}, - {"localTimeForecastList",1196}, - {""}, {""}, {""}, {""}, - {"referenceOfLengths",1853}, + {"gridName",940}, + {""}, + {"waveDomain",2521}, + {""}, + {"datasetForLocal",651}, + {"global",923}, + {""}, + {"rdbType",1837}, {""}, {""}, - {"yearOfForecast",2529}, + {"dateOfForecast",655}, + {"marsRange",1275}, + {""}, {""}, + {"timeOfForecast",2332}, {""}, {""}, {""}, - {"LoR",127}, - {""}, - {"epsPoint",787}, - {"rdbtimeDay",1829}, - {""}, {""}, - {"controlForecastCluster",586}, - {"longitudeSexagesimal",1233}, - {""}, - {"shortName",2135}, + {"longitudinalDirectionGridLength",1242}, + {""}, {""}, {""}, + {"tubeDomain",2372}, + {"shortName",2162}, {""}, {"Nassigned",193}, - {""}, - {"scaledDirections",1981}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"defaultStepUnits",684}, + {"stepRange",2240}, + {""}, {""}, {""}, {""}, {""}, + {"offsetSection0",1577}, + {""}, {""}, + {"ensembleSize",783}, {""}, {""}, {""}, {""}, - {"realPart",1836}, - {"integerScalingFactorAppliedToDirections",1019}, - {"integerScalingFactorAppliedToFrequencies",1020}, - {""}, {""}, {""}, + {"localDay",1176}, + {""}, {""}, {""}, {""}, {""}, {"Nf",197}, - {"qfe",1802}, - {""}, {""}, {""}, {""}, - {"gridDefinitionSection",933}, - {""}, - {"NT",190}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"ifsParam",988}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"sequences",2125}, + {"NT",189}, + {""}, {""}, + {"derivedForecast",693}, + {""}, {""}, {""}, + {"localDefinition",1180}, + {"rdbtimeDate",1840}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"boustrophedonic",379}, + {""}, {""}, {""}, + {"generatingProcessIdentifier",917}, + {""}, + {"upperRange",2457}, + {"anoffsetFirst",317}, + {""}, {""}, {""}, {""}, {""}, {"editionNumber",739}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"originalSubCentreIdentifier",1623}, {""}, {""}, {""}, {""}, {""}, - {"minuteOfReference",1335}, - {""}, {""}, {""}, - {"multiplicationFactorForLatLong",1367}, - {""}, - {"quantile",1812}, - {""}, {""}, {""}, {""}, {""}, - {"dateOfReference",661}, - {""}, {""}, {""}, - {"timeOfReference",2293}, - {""}, - {"rdbSubtype",1824}, - {""}, {""}, {""}, {""}, - {"overlayTemplateNumber",1623}, - {""}, - {"sectionNumber",2094}, + {"northernLatitudeOfDomain",1404}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"setDecimalPrecision",2155}, {""}, - {"masterTableNumber",1281}, - {"climatologicalRegime",438}, - {""}, - {"numberOfTimeSteps",1516}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"qnh",1805}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"trueLengthOfLastGroup",2323}, - {""}, {""}, {""}, - {"visibility",2462}, - {"minuteOfForecast",1332}, - {""}, {""}, {""}, - {"validityDate",2428}, - {""}, {""}, {""}, {""}, - {"secondOfForecast",2028}, - {"observedData",1541}, + {"groupSplitting",947}, {""}, {""}, - {"numberOfFloats",1449}, + {"sectionNumber",2121}, {""}, {""}, {""}, {""}, - {"gridDefinitionDescription",932}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"marsParam",1273}, + {""}, {""}, + {"freeFormData",904}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfCentrePoint",1213}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Adelta",13}, - {""}, {""}, {""}, {""}, - {"numberOfDirections",1439}, + {"incrementOfLengths",995}, + {"clusterSize",550}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"reservedOctet",1891}, + {""}, {""}, + {"rdbDateTime",1835}, + {""}, {""}, {""}, + {"southernLatitudeOfDomain",2194}, + {"epsPoint",787}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"hourOfForecast",971}, + {""}, {""}, + {"marsLevelist",1270}, + {""}, {""}, + {"anoffsetFrequency",318}, + {"verticalDomainTemplate",2501}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"realPart",1848}, {""}, + {"bottomLevel",378}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"decimalScaleFactor",675}, + {""}, + {"integerScaleFactor",1022}, + {""}, + {"typicalDay",2415}, + {""}, {""}, {""}, {""}, {""}, {""}, {"defaultName",680}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"clusterNumber",550}, + {"longitudeOfGridPoints",1220}, + {"analysisOffsets",309}, + {""}, {""}, {""}, {""}, + {"ifsParam",992}, + {"clusterNumber",549}, + {""}, {""}, {""}, + {"monthOfForecast",1365}, + {"typeOfLevel",2390}, {""}, - {"optimizeScaleFactor",1600}, - {""}, {""}, {""}, - {"longitudeOfGridPoints",1214}, + {"oldSubtype",1593}, + {"latitudeOfCentrePoint",1100}, + {"localTimeForecastList",1202}, {""}, {""}, {""}, {""}, - {"rectimeSecond",1846}, + {"referenceOfLengths",1865}, {""}, {""}, - {"isAuto",1027}, + {"yearOfForecast",2578}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"controlForecastCluster",585}, {""}, {""}, - {"crraSection",630}, - {""}, {""}, {""}, - {"uerraSection",2384}, - {""}, {""}, {""}, {""}, - {"numberingOrderOfDiamonds",1534}, - {""}, {""}, {""}, {""}, + {"longitudeSexagesimal",1239}, {"energyNorm",779}, - {"channelNumber",430}, - {""}, {""}, {""}, {""}, {""}, - {"dayOfForecast",669}, + {"channelNumber",429}, {""}, - {"localDefinitionNumber",1175}, - {""}, - {"numberOfSection",1506}, - {""}, {""}, {""}, - {"spectralDataRepresentationMode",2180}, - {""}, {""}, {""}, {""}, - {"hourOfReference",970}, - {""}, - {"optimisationTime",1599}, - {""}, {""}, {""}, - {"defaultParameter",681}, - {""}, {""}, {""}, - {"computeLaplacianOperator",569}, - {""}, - {"listOfScaledFrequencies",1163}, - {""}, - {"forecastPeriod",889}, - {""}, - {"waveLevType",2474}, + {"scaledDirections",2002}, {""}, {""}, - {"numberOfSubsets",1511}, + {"lcwfvSuiteName",1129}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfLocalDefinitions",1466}, - {""}, {""}, {""}, - {"standardParallel",2186}, - {""}, {""}, {""}, {""}, {""}, - {"dataAccessors",634}, + {"integerScalingFactorAppliedToFrequencies",1024}, + {"integerScalingFactorAppliedToDirections",1023}, {""}, {""}, {""}, {""}, - {"typeOfStatisticalPostProcessingOfEnsembleMembers",2359}, - {"nTileAtt",1371}, + {"subSetK",2263}, + {"gridDefinitionSection",937}, + {"matchTimeRepres",1294}, + {""}, {""}, {""}, {""}, + {"marsKeywords",1265}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"Ny",208}, - {"angleOfRotation",313}, - {"horizontalCoordinateDefinition",959}, - {"horizontalCoordinateSupplement",960}, - {""}, - {"monthOfReference",1361}, - {""}, - {"XR",271}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"yearOfReference",2532}, - {"typeOfStatisticalProcessing",2360}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"indicatorOfUnitOfTimeRange",1006}, - {""}, {""}, {""}, {""}, - {"modeNumber",1347}, - {"Ncy",196}, - {"dataValues",650}, - {"numberOfFrequencies",1456}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"multiplicationFactorForLatLong",1374}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"Ncy",196}, + {""}, + {"lowerRange",1244}, + {""}, {""}, {""}, {""}, {""}, + {"bufrTemplate",384}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"uuidOfDataGroup",2467}, + {""}, {"Nuy",206}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"uuidOfDataGroup",2424}, - {""}, {""}, {""}, {""}, - {"validityDateTime",2429}, - {"localSection",1191}, - {""}, {""}, {""}, {""}, {""}, - {"minuteOfForecastUsedInLocalTime",1333}, - {"numberOfDiamonds",1438}, + {""}, {""}, + {"newSubtype",1390}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"secondOfForecastUsedInLocalTime",2029}, - {"tiggeSection",2273}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"forecastPeriodTo",891}, - {"probPoint",1780}, - {""}, - {"latitudeOfCentrePointInDegrees",1095}, - {""}, - {"originalParameterNumber",1611}, - {"referenceValue",1859}, - {"boustrophedonicOrdering",380}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"experiment",804}, + {"endOfRange",770}, + {""}, {""}, {""}, + {"minuteOfForecast",1338}, + {""}, {""}, {""}, + {"validityDate",2471}, + {""}, {""}, {""}, {""}, + {"secondOfForecast",2052}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"gridDefinitionDescription",936}, + {""}, {""}, {""}, + {"rdbtimeDay",1841}, {""}, {""}, {""}, {""}, {""}, - {"oceanLevName",1544}, + {"releaseStartDay",1874}, {""}, - {"iteratorDisableUnrotate",1061}, + {"defaultParameter",681}, + {""}, {""}, {""}, {""}, + {"yDirectionGridLength",2569}, {""}, {""}, - {"sectionPosition",2095}, - {"xLast",2517}, - {""}, - {"maximum",1293}, - {"yDirectionGridLength",2520}, - {""}, {""}, - {"atmosphericChemicalOrPhysicalConstituentType",323}, - {""}, {""}, - {"iDirectionIncrement",975}, + {"forecastPeriod",893}, + {"oceanLevName",1554}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"standardParallel",2220}, + {""}, {""}, {""}, + {"optimizeScaleFactor",1610}, + {""}, {""}, {""}, {""}, {""}, + {"correction4Part",620}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"dayOfForecast",668}, {""}, {""}, - {"totalNumber",2303}, + {"defaultStepUnits",684}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"listOfScaledFrequencies",1169}, + {""}, {""}, {""}, + {"waveLevType",2523}, + {""}, {""}, {""}, {""}, {""}, + {"faFieldName",856}, + {"subSetJ",2262}, + {"modeNumber",1353}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"faLevelName",857}, {""}, - {"spectralDataRepresentationType",2181}, + {"numberOfTimeSteps",1526}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"horizontalCoordinateDefinition",963}, + {"horizontalCoordinateSupplement",964}, + {""}, {""}, {""}, + {"forecastPeriodTo",895}, + {""}, + {"minuteOfReference",1341}, + {""}, + {"typeOfStatisticalProcessing",2403}, + {"originalParameterNumber",1621}, {""}, {""}, - {"charValues",432}, - {""}, + {"visibility",2505}, + {""}, {""}, {""}, {""}, {""}, + {"dateOfReference",660}, + {""}, {""}, {""}, + {"timeOfReference",2335}, + {"observedData",1551}, + {""}, {""}, + {"numberOfFloats",1458}, + {""}, {""}, {""}, {""}, {""}, + {"sectionPosition",2122}, + {""}, {""}, {""}, + {"isEps",1040}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"climatologicalRegime",437}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfDirections",1448}, + {""}, {""}, {""}, + {"validityDateTime",2472}, + {""}, {""}, {""}, {""}, {""}, + {"overlayTemplateNumber",1633}, + {"minuteOfForecastUsedInLocalTime",1339}, + {""}, {""}, {""}, {""}, {""}, {"epsStatisticsPoint",789}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"trueLengthOfLastGroup",2366}, {""}, - {"applicationIdentifier",321}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"legNumber",1127}, - {"windPresent",2494}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfStatisticallyProcessedFieldsForLocalTime",1509}, - {""}, - {"significanceOfReferenceTime",2141}, - {""}, {""}, - {"angleOfRotationInDegrees",314}, - {""}, {""}, - {"neitherPresent",1382}, - {""}, - {"faFieldName",855}, - {""}, {""}, - {"pvlLocation",1801}, + {"secondOfForecastUsedInLocalTime",2053}, + {""}, {""}, {""}, + {"N",170}, {""}, {""}, {""}, {""}, {""}, {""}, - {"orderOfSpatialDifferencing",1604}, - {""}, - {"faLevelName",856}, - {"floatVal",883}, - {""}, {""}, {""}, {""}, - {"stepTypeForConversion",2209}, - {""}, {""}, - {"changingPrecision",428}, - {"numberOfRadials",1498}, - {"typicalSecond",2376}, + {"latitudeOfCentrePointInDegrees",1101}, {""}, {""}, {""}, - {"scaleFactorOfSecondSize",1970}, - {""}, - {"standardParallelInDegrees",2187}, - {"defaultTypeOfLevel",685}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"totalNumber",2345}, + {"numberingOrderOfDiamonds",1544}, + {""}, {""}, + {"windPresent",2543}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"numberOfSection",1515}, + {""}, {""}, {""}, + {"neitherPresent",1389}, {""}, {""}, {""}, {""}, {""}, {""}, - {"groupLeafNodeK",941}, + {"legNumber",1133}, + {""}, + {"atmosphericChemicalOrPhysicalConstituentType",322}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"rdbSubtype",1836}, {""}, {""}, - {"productDefinition",1787}, + {"changingPrecision",427}, + {"numberOfSubsets",1521}, {""}, {""}, {""}, - {"rdbtimeSecond",1833}, - {"clusteringMethod",553}, + {"LaR",105}, {""}, - {"siteId",2146}, - {""}, - {"paramId",1700}, - {""}, - {"referencePeriodList",1855}, - {"TAFstr",236}, - {"marsIdent",1258}, - {""}, - {"numberOfForcasts",1450}, - {"methodNumber",1325}, - {""}, {""}, {""}, {""}, - {"subSetJ",2228}, - {"frequency",901}, - {""}, {""}, - {"observablePropertyTemplate",1536}, - {""}, {""}, {""}, {""}, {""}, - {"ensembleForecastNumbers",781}, - {""}, {""}, {""}, {""}, - {"iIncrement",979}, - {""}, {""}, - {"typeOfStatisticalProcessingForTimeRangeForReferencePeriod",2361}, - {""}, {""}, - {"Nb",194}, + {"numberOfLocalDefinitions",1475}, + {"standardParallelInDegrees",2221}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"expoffset",809}, + {"LoR",126}, + {""}, {""}, {""}, {""}, + {"createNewData",627}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"spectralDataRepresentationMode",2214}, + {"probPoint",1791}, + {"clusteringMethod",552}, + {"groupLeafNodeK",945}, + {""}, + {"hourOfReference",974}, + {"levTypeName",1146}, + {""}, + {"referencePeriodList",1867}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unitOfTimeIncrement",2389}, - {""}, {""}, {""}, {""}, - {"scaleFactorOfStandardDeviation",1972}, + {"numberOfFrequencies",1465}, + {""}, {""}, {""}, + {"generatingProcessTemplateNumber",919}, + {"orderOfSpatialDifferencing",1614}, {""}, - {"numberOfForecastsInTube",1454}, - {""}, {""}, + {"localDefinitionNumber",1181}, + {""}, {""}, {""}, {""}, + {"marsEndStep",1259}, + {"stepTypeForConversion",2243}, + {""}, {""}, {""}, + {"methodNumber",1331}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"angleOfRotation",312}, + {""}, {""}, {""}, + {"monthOfReference",1368}, + {""}, {""}, {""}, {""}, + {"numberOfDiamonds",1447}, + {""}, {""}, {""}, {""}, + {"yearOfReference",2581}, + {""}, {""}, {""}, {""}, {"SPD",228}, - {""}, {""}, + {"masterTableNumber",1287}, + {""}, {"dewPointTemperature",697}, - {""}, {""}, - {"formatForLongs",897}, - {"observablePropertyTemplateNumber",1537}, - {""}, {""}, - {"scaleFactorOfStandardDeviationInTheCluster",1973}, - {"simpleThinningSkip",2143}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ensembleForecastNumbersList",782}, - {""}, {""}, - {"extraDim",812}, - {"realization",1838}, - {"firstLatitude",871}, - {""}, {""}, {""}, {""}, - {"treatmentOfMissingData",2321}, - {""}, {""}, {""}, {""}, {""}, - {"forecastPeriodFrom",890}, - {""}, - {"powerOfTenUsedToScaleClimateWeight",1746}, - {""}, - {"scaleFactorOfFirstSize",1959}, - {""}, - {"secondDimension",2022}, - {""}, - {"destineLocalVersion",694}, - {"averagingPeriod",329}, - {""}, - {"postProcessing",1745}, - {"marsLongitude",1265}, - {"internalVersion",1022}, {""}, {""}, {""}, - {"siteLongitude",2148}, - {""}, - {"Azi",15}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"createNewData",628}, - {""}, - {"codedValues",561}, - {""}, {""}, {""}, - {"systemNumber",2241}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"expver",810}, - {""}, - {"levTypeName",1140}, - {""}, - {"indexingTime",996}, - {""}, {""}, {""}, {""}, {""}, - {"isAccumulation",1026}, - {""}, {""}, - {"changeDecimalPrecision",423}, - {""}, {""}, {""}, {""}, - {"dataRepresentation",641}, - {"tubeNumber",2330}, - {"centreLatitude",410}, - {"generatingProcessTemplateNumber",915}, - {"numberOfForecastsUsedInLocalTime",1455}, - {""}, - {"sizeOfOffsets",2150}, - {"xFirst",2516}, - {""}, {""}, {""}, {""}, - {"localLatitude",1181}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"bitmapSectionPresent",374}, - {"tablesVersion",2249}, - {""}, {""}, {""}, {""}, {""}, - {"longitudeOfIcosahedronPole",1215}, - {"listOfDistributionFunctionParameter",1159}, - {""}, - {"endOfProduct",769}, - {""}, {""}, - {"secondLatitude",2025}, - {""}, {""}, {""}, - {"modelIdentifier",1350}, - {""}, - {"numberOfOperationalForecastTube",1477}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"inputDataPresentIndicator",1007}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"defaultShortName",683}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"userTimeEnd",2464}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"radialAngularSpacing",1814}, + {"treatmentOfMissingData",2364}, + {""}, {""}, + {"typeOfStatisticalPostProcessingOfEnsembleMembers",2402}, + {""}, {""}, + {"forecastPeriodFrom",894}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"averagingPeriod",328}, {""}, - {"is_uerra",1054}, + {"postProcessing",1756}, {""}, {""}, {""}, - {"ccccIdentifiers",392}, - {""}, {""}, {""}, - {"tableNumber",2245}, - {""}, - {"scaleFactorOfLowerLimit",1963}, + {"typeOfStatisticalProcessingForTimeRangeForReferencePeriod",2404}, {""}, {""}, {""}, {""}, {""}, - {"unitOfOffsetFromReferenceTime",2387}, - {"typeOfTimeIncrement",2363}, + {"qfe",1814}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"verificationDate",2444}, + {""}, {""}, {""}, {""}, {""}, + {"extras",849}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"experiment",804}, + {""}, {""}, + {"changeDecimalPrecision",422}, + {""}, {""}, + {"generatingProcessIdentificationNumber",916}, + {""}, + {"systemNumber",2275}, + {"sequences",2152}, + {""}, {""}, + {"xLast",2566}, + {"scaleFactorOfSecondLimit",1990}, + {"maximum",1299}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"floatValues",884}, - {"memberNumber",1321}, - {"N",171}, - {""}, {""}, {""}, - {"indexTemplate",992}, - {""}, - {"inputDelayedDescriptorReplicationFactor",1008}, - {""}, {""}, {""}, - {"offsetAfterPadding",1552}, - {""}, - {"minutesAfterDataCutoff",1337}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"section_8",2114}, - {""}, {""}, {""}, - {"temperatureAndDewpointPresent",2256}, + {"quantile",1824}, {""}, {""}, - {"cnmc_isac",556}, - {""}, - {"expandedTypes",802}, - {""}, {""}, {""}, {""}, - {"stringValues",2218}, - {"short_name",2138}, - {"baseAddress",335}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"latLonValues",1088}, + {"numberOfStatisticallyProcessedFieldsForLocalTime",1519}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfIcosahedronPole",1221}, {""}, {""}, - {"simpleThinningStart",2144}, - {""}, {""}, - {"TAF",235}, - {""}, {""}, - {"typeOfDistributionFunction",2338}, - {""}, {""}, {""}, - {"_T",289}, - {""}, {""}, - {"cnmc_cmcc",555}, - {""}, {""}, {""}, - {"offsetAfterLocalSection",1551}, + {"endOfProduct",769}, {""}, {""}, {"defaultFaLevelName",678}, {""}, {""}, {""}, - {"SecondLatitude",229}, - {""}, {""}, {""}, - {"FirstLatitude",66}, - {"correction4Part",621}, - {""}, - {"NR",188}, - {""}, {""}, {""}, {""}, {""}, - {"dataRepresentationTemplate",642}, - {"_endStep",292}, - {""}, - {"stretchingFactor",2216}, - {""}, {""}, {""}, {""}, {""}, - {"waveDirectionNumber",2471}, - {""}, - {"numberOfDistinctSection9s",1446}, - {""}, {""}, {""}, {""}, {""}, - {"section_09",2104}, - {""}, {""}, - {"angleOfRotationOfProjection",315}, - {""}, {""}, - {"tigge_name",2275}, - {"_anoffset",291}, - {""}, - {"dimensionType",704}, - {"meaningOfVerticalCoordinate",1320}, - {"ecpt_model",736}, - {""}, - {"gts_header",950}, - {"is_aerosol",1046}, - {"numberOfDistinctSection8s",1445}, - {""}, - {"auxiliary",325}, - {""}, - {"sensitiveAreaDomain",2124}, - {""}, {""}, {""}, {""}, - {"satelliteIdentifier",1948}, + {"spectralDataRepresentationType",2215}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"orientationOfTheGrid",1607}, - {""}, {""}, - {"P",212}, - {"dataRepresentationTemplateNumber",643}, - {""}, - {"isEps",1036}, - {"section_08",2103}, - {"globalDomain",920}, - {"local_use",1201}, - {""}, {""}, {""}, {""}, {""}, - {"partitionItems",1717}, + {"inputDataPresentIndicator",1011}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"waveDirectionNumber",2520}, + {""}, + {"qnh",1817}, {""}, {""}, {""}, {""}, {""}, {""}, - {"is_chemical",1048}, - {"efas_model",740}, + {"Nb",194}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"significanceOfReferenceTime",2168}, + {""}, {""}, + {"angleOfRotationInDegrees",313}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"stretchingFactorScaled",2217}, + {"sizeOfOffsets",2177}, {""}, {""}, {""}, - {"localLongitude",1184}, - {"typeOfRelationToReferenceDataset",2355}, + {"numberOfForcasts",1459}, + {""}, {""}, {""}, {""}, + {"userDateEnd",2460}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"diagnosticNumber",699}, - {""}, {""}, {""}, - {"scaleFactorOfSecondFixedSurface",1969}, - {""}, - {"dayOfStartOfReferencePeriod",673}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"dataRepresentationType",644}, - {""}, - {"defaultFaFieldName",677}, - {""}, - {"tablesVersionLatest",2250}, - {""}, {""}, {""}, {""}, {""}, - {"orderOfSPD",1603}, - {"PLPresent",215}, - {""}, {""}, {""}, - {"is_localtime",1051}, - {"matchLandType",1286}, - {"climateDateFrom",436}, + {"scaleFactorOfSecondSize",1991}, + {""}, {""}, + {"defaultTypeOfLevel",685}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"widthOfFirstOrderValues",2480}, - {"secondsOfReference",2045}, - {""}, {""}, - {"correction1Part",615}, - {""}, {""}, {""}, - {"scaleFactorOfFirstFixedSurface",1958}, - {""}, {""}, {""}, {""}, - {"ensembleStandardDeviation",784}, - {""}, {""}, - {"monthlyVerificationTime",1365}, - {""}, - {"angleSubdivisions",316}, - {""}, - {"numberOfPartitions",1481}, - {""}, - {"sampleSizeOfReferencePeriod",1946}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"levelValues",1144}, - {"corr4Data",612}, - {"scanPosition",2012}, - {""}, - {"indexingDate",995}, - {""}, {""}, {""}, {""}, - {"numberOfReservedBytes",1503}, - {"_TS",290}, - {"latitudeOfGridPoints",1098}, + {"dataValues",649}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfStretchingPole",1224}, - {"qfePresent",1803}, - {"numberOfReferencePeriodTimeRanges",1499}, - {""}, {""}, - {"qnhPresent",1807}, + {"temperatureAndDewpointPresent",2291}, {""}, {""}, {""}, - {"streamOfAnalysis",2215}, - {""}, {""}, {""}, {""}, - {"lengthOfProjectLocalTemplate",1136}, - {""}, {""}, {""}, {""}, {""}, - {"marsEndStep",1253}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"outerLoopLengthOfTimeRange",1619}, - {""}, - {"totalNumberOfdimensions",2319}, - {""}, {""}, - {"startingAzimuth",2197}, - {"numberOfRows",1504}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"minuteOfAnalysis",1330}, - {""}, {""}, - {"tableReference",2246}, - {""}, {""}, - {"offsetAfterCentreLocalSection",1549}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"indicatorOfUnitOfTimeRange",1010}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"userTimeEnd",2421}, - {""}, {""}, {""}, - {"section9Pointer",2090}, - {""}, - {"localDefNumberTwo",1173}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section8Pointer",2087}, - {""}, - {"unitsOfSecondFixedSurface",2400}, - {"secondDimensionPhysicalSignificance",2024}, + {"rectimeSecond",1858}, + {""}, {""}, {""}, {""}, + {"scaleFactorOfFirstLimit",1978}, + {"crraSection",629}, {""}, {""}, - {"totalNumberOfTubes",2315}, + {"numberOfForecastsInTube",1463}, + {"uerraSection",2427}, + {"boustrophedonicOrdering",380}, + {""}, {""}, {""}, {""}, {""}, + {"iteratorDisableUnrotate",1067}, + {"siteElevation",2172}, + {""}, + {"unitOfOffsetFromReferenceTime",2430}, + {"latitudeOfGridPoints",1104}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"P",212}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"optimisationTime",1609}, + {""}, + {"referenceValue",1871}, + {"defaultFaFieldName",677}, + {""}, {""}, + {"bitmapSectionPresent",374}, + {""}, + {"computeLaplacianOperator",568}, + {""}, + {"expoffset",809}, + {""}, {""}, + {"tubeNumber",2373}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfStretchingPole",1108}, + {"scaleFactorOfStandardDeviation",1993}, + {""}, {""}, {""}, {""}, + {"siteId",2173}, {""}, - {"missingDataFlag",1339}, + {"paramId",1711}, + {""}, {""}, {""}, + {"marsIdent",1264}, + {""}, + {"userDateTimeEnd",2462}, + {""}, {""}, {""}, + {"scaleFactorOfStandardDeviationInTheCluster",1994}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extraDim",812}, + {""}, + {"firstLatitude",872}, + {""}, {""}, + {"charValues",431}, + {""}, + {"iIncrement",983}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfForecastsUsedInLocalTime",1464}, + {"scaleFactorOfFirstSize",1979}, + {""}, {""}, {""}, {""}, {""}, + {"PLPresent",215}, + {""}, + {"marsLongitude",1271}, + {""}, {""}, {""}, {""}, + {"siteLongitude",2175}, + {"tableNumber",2279}, + {""}, {""}, + {"observablePropertyTemplate",1546}, + {""}, + {"numberOfRadials",1507}, + {""}, {""}, + {"listOfDistributionFunctionParameter",1165}, + {"ensembleForecastNumbers",781}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfOperationalForecastTube",1486}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"expver",810}, + {"localSection",1197}, + {""}, {""}, + {"indexingTime",1000}, + {"memberNumber",1327}, + {""}, + {"floatVal",887}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"tiggeSection",2314}, + {""}, {""}, + {"centreLatitude",410}, + {""}, {""}, {""}, {""}, + {"xFirst",2565}, + {""}, {""}, {""}, {""}, + {"localLatitude",1187}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"molarMass",1361}, + {""}, {""}, + {"observablePropertyTemplateNumber",1547}, + {""}, {""}, {""}, + {"orderOfSPD",1613}, + {""}, {""}, + {"ensembleForecastNumbersList",782}, + {""}, + {"secondLatitude",2049}, + {""}, + {"powerOfTenUsedToScaleClimateWeight",1757}, + {"XR",270}, + {""}, {""}, + {"localDefNumberTwo",1179}, + {""}, {""}, {""}, {""}, {""}, + {"iDirectionIncrement",979}, + {""}, {""}, + {"section7",2108}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"marsModel",1272}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfLowerLimit",1983}, + {""}, + {"applicationIdentifier",320}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"typeOfDistributionFunction",2381}, + {""}, {""}, {""}, {""}, + {"modelIdentifier",1356}, + {""}, + {"lengthOfProjectLocalTemplate",1142}, + {""}, + {"indexTemplate",996}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"theMessage",2301}, + {"pvlLocation",1813}, + {""}, {""}, + {"widthOfFirstOrderValues",2529}, + {"longitudeOfLastGridPoint",1222}, + {""}, {""}, + {"correction1Part",614}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"expandedTypes",802}, + {"inputDelayedDescriptorReplicationFactor",1012}, + {""}, {""}, {""}, + {"typicalSecond",2419}, + {"ccccIdentifiers",392}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfDistinctSection9s",1455}, + {""}, {""}, {""}, {""}, + {"destineLocalVersion",694}, + {"corr4Data",611}, + {""}, + {"operatingMode",1607}, + {""}, + {"internalVersion",1026}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"marsLamModel",1267}, + {""}, + {"productDefinition",1798}, + {""}, + {"codedValues",560}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"correction3Part",618}, + {"MS",157}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"clusterMember9",548}, + {""}, + {"frequency",905}, + {""}, {""}, {""}, + {"NR",187}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"auxiliary",324}, + {""}, {""}, {""}, + {"numberOfPartitions",1490}, + {""}, {""}, {""}, {""}, + {"unitOfTimeIncrement",2432}, + {""}, + {"localMinute",1193}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"spectralMode",2216}, + {""}, {""}, + {"formatForLongs",901}, + {"angleMultiplier",311}, + {""}, {""}, {""}, + {"simpleThinningSkip",2170}, + {""}, {""}, {""}, + {"scanningMode",2036}, + {""}, + {"stretchingFactor",2250}, + {"md5Section9",1314}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"tiggeModel",2313}, + {""}, + {"realization",1850}, + {""}, {""}, + {"numberOfDistinctSection8s",1454}, + {""}, {""}, {""}, {""}, {""}, + {"localLongitude",1190}, + {""}, {""}, {""}, + {"secondDimension",2046}, + {"typeOfRelationToReferenceDataset",2398}, + {""}, {""}, {""}, + {"md5Data",1300}, + {""}, + {"representationMode",1882}, + {""}, {""}, {""}, + {"localMonth",1194}, + {""}, + {"scaleFactorOfSecondFixedSurface",1989}, + {"satelliteIdentifier",1967}, + {""}, {""}, + {"floatValues",888}, + {""}, {""}, {""}, + {"heightOrPressureOfLevel",959}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"correction2Part",616}, + {""}, {""}, + {"isConstant",1037}, + {""}, {""}, {""}, + {"partitionItems",1729}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"thisMarsStream",2304}, + {"earthMinorAxis",730}, + {""}, + {"stringValues",2252}, + {""}, {""}, {""}, {""}, + {"rdbtimeSecond",1845}, + {"coordinate4OfLastGridPoint",602}, + {"stretchingFactorScaled",2251}, + {""}, {""}, {""}, + {"widthOfSPD",2531}, + {""}, + {"verticalDomainTemplateNumber",2502}, + {""}, {""}, + {"latLonValues",1094}, + {""}, {""}, {""}, + {"scaleFactorOfFirstFixedSurface",1977}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfPostProcessing",2394}, + {""}, {""}, {""}, {""}, + {"totalNumberOfdimensions",2361}, + {""}, {""}, + {"g2grid",912}, + {"indexingDate",999}, + {"marsClass",1254}, + {""}, + {"gridPointPosition",941}, + {"tablesVersion",2283}, + {"md5Section8",1313}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"parameterCode",1720}, + {""}, + {"climateDateFrom",435}, + {""}, {""}, {""}, {""}, + {"bufrDataEncoded",381}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"meaningOfVerticalCoordinate",1326}, + {"typeOfTimeIncrement",2406}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"gridDefinitionTemplateNumber",938}, + {""}, + {"verificationDate",2487}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"angleOfRotationOfProjection",314}, + {""}, {""}, {""}, {""}, {""}, + {"thisMarsType",2305}, + {""}, + {"clusterMember8",547}, + {""}, {""}, {""}, {""}, {""}, + {"totalNumberOfTubes",2357}, + {""}, {""}, + {"conceptsLocalMarsDirAll",575}, + {""}, + {"setCalendarId",2154}, + {"md5Structure",1315}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"typeOfEnsembleForecast",2382}, + {"oneMillionConstant",1596}, + {""}, + {"offsetSection7",1586}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"simpleThinningStart",2171}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"corr2Data",609}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"dayOfStartOfReferencePeriod",672}, + {""}, {""}, {""}, + {"cfVarName",420}, + {""}, {""}, {""}, {""}, {""}, + {"tileattribute",2324}, + {""}, {""}, {""}, + {"scanningMode8",2041}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"numberOfReservedBytes",1512}, + {"diagnosticNumber",699}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"monthlyVerificationTime",1372}, + {""}, + {"dataRepresentation",640}, + {"expandedNames",797}, + {""}, {""}, + {"oneConstant",1595}, + {"totalNumberOfQuantiles",2353}, + {""}, {""}, {""}, {""}, {""}, + {"tiggeCentre",2310}, + {"scaleFactorAtReferencePoint",1970}, + {""}, + {"levelValues",1150}, + {"interpretationOfNumberOfPoints",1028}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"missingDataFlag",1345}, {""}, {"diffInDays",700}, {""}, - {"totalNumberOfQuantiles",2311}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"NAT",174}, + {"Adelta",13}, {""}, {""}, - {"monthlyVerificationDate",1363}, - {""}, {""}, {""}, {""}, - {"representationType",1865}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cfVarName",420}, + {"versionNumOfFilesFreeSpaceStorage",2492}, + {"longitudeOfStretchingPole",1230}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"sampleSizeOfReferencePeriod",1965}, + {""}, {""}, + {"numberOfRows",1513}, + {""}, {""}, {""}, {""}, {""}, + {"NP",186}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"isAuto",1031}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"libraryVersion",1149}, - {""}, {""}, {""}, - {"scaleFactorOfRadiusOfSphericalEarth",1968}, - {""}, {""}, {""}, {""}, - {"centuryOfReference",415}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"scalingFactorForFrequencies",2011}, - {""}, {""}, {""}, + {"isEPS",1039}, + {"targetCompressionRatio",2286}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scanPosition",2035}, + {""}, {""}, {""}, {""}, {""}, + {"tileClassification",2320}, + {""}, {""}, {""}, {""}, {""}, {"endOfInterval",767}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"section0Pointer",2048}, - {""}, - {"dayOfReference",672}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"perturbedType",1733}, - {""}, - {"heightOrPressureOfLevel",955}, - {""}, - {"levelIndicator",1142}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"decimalPrecision",675}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"verticalDomainTemplateNumber",2459}, - {""}, {""}, {""}, {""}, - {"windVariableDirection",2505}, + {""}, {""}, {""}, + {"qfePresent",1815}, {""}, {""}, - {"numberOfRemaininChars",1501}, - {""}, {""}, - {"stepTypeInternal",2210}, + {"localTimeMethod",1203}, + {"qnhPresent",1819}, {""}, - {"orientationOfTheGridInDegrees",1608}, - {"userDateEnd",2417}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfVerticalPoints",1529}, - {""}, {""}, - {"widthOfSPD",2482}, - {""}, - {"scaleFactorAtReferencePoint",1951}, - {""}, - {"longitudeOfLastGridPoint",1216}, + {"totalNumberOfDirections",2348}, {""}, {""}, {""}, {""}, - {"selectedDay",2117}, - {""}, {""}, {""}, {""}, - {"periodOfTimeIntervals",1731}, - {""}, {"expandedDescriptors",796}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"typeOfPostProcessing",2351}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"functionCode",908}, {""}, - {"offsetFreeFormData",1563}, - {""}, - {"extractSubset",843}, - {"gts_ddhh00",949}, + {"levelIndicator",1148}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"northLatitudeOfCluster",1397}, {""}, {""}, - {"northLatitudeOfCluster",1389}, - {"longitudeOfFirstGridPoint",1212}, - {"numberOfVerticalCoordinateValues",1527}, + {"representativeMember",1884}, {""}, - {"molarMass",1354}, + {"dataAccessors",633}, + {"tablesVersionLatest",2284}, + {""}, {""}, {""}, {""}, + {"nTileAtt",1378}, {""}, {""}, - {"nosigPresent",1397}, - {""}, {""}, {""}, {""}, {""}, {""}, {"eastLongitudeOfCluster",732}, - {"siteElevation",2145}, {""}, - {"lsdate_bug",1242}, + {"xDirectionGridLength",2562}, {""}, {""}, - {"gridDefinitionTemplateNumber",934}, - {"lstime_bug",1243}, - {""}, {""}, - {"versionNumOfFilesFreeSpaceStorage",2449}, - {"observationGeneratingProcessIdentifier",1539}, - {""}, - {"totalNumberOfDirections",2306}, - {"dayOfAnalysis",667}, - {""}, {""}, {""}, - {"interpretationOfNumberOfPoints",1024}, - {""}, - {"numberOfVerticalGridDescriptors",1528}, - {""}, {""}, - {"is_aerosol_optical",1047}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"perturbationNumber",1732}, - {""}, {""}, {""}, {""}, {""}, - {"tablesVersionLatestOfficial",2251}, - {""}, {""}, - {"southLatitudeOfCluster",2163}, - {""}, - {"marsModel",1266}, - {"headersOnly",953}, - {"secondOrderFlags",2032}, - {""}, {""}, {""}, - {"spatialProcessing",2178}, - {"scaleFactorOfDistributionFunctionParameter",1955}, - {""}, {""}, {""}, {""}, - {"numberOfLevelValues",1465}, - {""}, - {"isConstant",1033}, - {""}, {""}, {""}, {""}, {""}, - {"endOfFileAddress",765}, - {""}, {""}, - {"userDateTimeEnd",2419}, - {"gridPointPosition",937}, - {""}, {""}, {""}, {""}, {""}, - {"LoV",128}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unsignedIntegers",2406}, - {""}, - {"expandedNames",797}, - {"theMessage",2260}, - {"g2grid",908}, - {""}, {""}, {""}, - {"falseNorthing",860}, + {"stepTypeInternal",2244}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"bitmapPresent",373}, - {"numberOfIterations",1464}, + {""}, {""}, {""}, {""}, + {"latitudeOfStretchingPole",1114}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"startOfMessage",2225}, + {""}, {""}, + {"periodOfTimeIntervals",1743}, + {""}, {""}, {""}, {""}, + {"monthlyVerificationDate",1370}, + {""}, {""}, {""}, + {"listOfModelIdentifiers",1167}, + {"southLatitudeOfCluster",2190}, + {""}, + {"section9Pointer",2117}, + {""}, {""}, {""}, + {"offsetFreeFormData",1573}, + {""}, {""}, {""}, {""}, + {"globalDomain",924}, + {""}, + {"longitudeOfFirstGridPoint",1218}, + {"dataRepresentationTemplate",641}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"versionNumberOfGribLocalTables",2496}, + {""}, {""}, + {"totalNumberOfFrequencies",2350}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"md5TimeDomainSection",1316}, + {""}, {""}, {""}, {""}, + {"verticalCoordinate",2499}, + {"roundedMarsLongitude",1910}, + {""}, + {"numberOfReferencePeriodTimeRanges",1508}, + {"scaleFactorOfRadiusOfSphericalEarth",1988}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"orientationOfTheGrid",1617}, + {""}, + {"releaseStartMonth",1877}, + {""}, {""}, + {"secondOrderFlags",2056}, + {""}, {""}, {""}, + {"dataRepresentationTemplateNumber",642}, + {""}, {""}, {""}, + {"referenceReflectivityForEchoTop",1868}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"md5DataSection",1301}, + {""}, {""}, {""}, {""}, + {"unitsOfSecondFixedSurface",2443}, + {"secondDimensionPhysicalSignificance",2048}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"roundedMarsLatitude",1908}, + {"unsignedIntegers",2449}, + {"extractSubset",843}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"is_uerra",1060}, + {"subCentre",2253}, + {""}, {""}, {""}, + {"ensembleStandardDeviation",784}, + {""}, {""}, {""}, {""}, + {"angleSubdivisions",315}, {"DiInDegrees",32}, - {"numberOfAnalysis",1409}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"marsClass",1248}, - {""}, - {"operatingMode",1597}, {""}, {""}, {""}, - {"binaryScaleFactor",370}, - {""}, - {"totalNumberOfFrequencies",2308}, - {""}, {""}, {""}, - {"productDefinitionTemplateNumber",1788}, + {"section8Pointer",2114}, {""}, {""}, {""}, {""}, - {"marsLamModel",1261}, - {""}, {""}, - {"parameterCode",1708}, + {"CDFstr",22}, + {"decimalPrecision",674}, + {""}, {""}, {""}, {""}, + {"numberOfEffectiveValues",1457}, {""}, {""}, {""}, - {"scaledValueOfSecondSize",2001}, - {""}, {""}, - {"clusterMember9",549}, - {"is_chemical_distfn",1049}, - {"modelVersionTime",1353}, + {"dataRepresentationType",643}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"tableCode",2278}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"MS",158}, + {"groupSplittingMethodUsed",948}, {""}, {""}, - {"sfc_levtype",2132}, + {"falseNorthing",861}, + {""}, {""}, + {"identificationNumber",987}, + {""}, + {"secondsOfReference",2072}, + {""}, {""}, {""}, {""}, + {"scalingFactorForFrequencies",2034}, + {""}, + {"cnmc_isac",555}, + {"faModelName",858}, + {""}, + {"conceptsMasterDir",576}, + {""}, {""}, {""}, {""}, + {"short_name",2165}, + {"libraryVersion",1155}, + {"section0Pointer",2075}, + {""}, + {"indexTemplateNumber",997}, + {""}, {""}, {""}, + {"roundedMarsLevelist",1909}, + {""}, {""}, + {"clutterFilterIndicator",553}, + {"scaleFactorOfDistributionFunctionParameter",1974}, + {""}, {""}, {""}, + {"parameterCategory",1719}, + {""}, + {"westLongitudeOfCluster",2525}, + {""}, + {"productDefinitionTemplateName",1799}, + {""}, {""}, + {"correction4",619}, + {"productDefinitionTemplateNumber",1800}, + {""}, + {"nosigPresent",1405}, + {""}, + {"_T",288}, + {""}, + {"tablesMasterDir",2282}, + {"cnmc_cmcc",554}, + {""}, {""}, {""}, {""}, + {"kurt",1084}, + {""}, {""}, + {"TAFstr",235}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"clutterFilterIndicator",554}, + {"_endStep",291}, + {""}, + {"observationGeneratingProcessIdentifier",1549}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"biFourierMakeTemplate",361}, + {"outerLoopLengthOfTimeRange",1629}, + {""}, {""}, {""}, + {"parameterNumber",1724}, {""}, {""}, - {"matchAerosolPacking",1285}, + {"windVariableDirection",2554}, + {""}, + {"LaDInDegrees",104}, + {""}, {""}, + {"tigge_name",2316}, + {"_anoffset",290}, + {""}, {""}, + {"spatialProcessing",2205}, + {"ecpt_model",736}, + {"iterationNumber",1066}, + {"gts_header",954}, + {"is_aerosol",1052}, + {""}, + {"numberOfVerticalPoints",1539}, + {""}, + {"perturbationNumber",1744}, + {""}, {""}, + {"dimensionNumber",703}, + {"corr3Data",610}, + {""}, {""}, {""}, {""}, + {"partitionNumber",1730}, + {""}, {""}, {""}, + {"latitudeLastInDegrees",1097}, + {"paramIdForConversion",1713}, + {""}, {""}, + {"numberOfIterations",1473}, + {""}, + {"kurtosis",1085}, + {""}, {""}, {""}, + {"directionNumber",706}, + {""}, + {"NDSP",178}, + {"local_use",1207}, + {""}, {""}, + {"totalNumberOfTileAttributePairs",2356}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"clusterMember8",548}, + {"binaryScaleFactor",370}, + {""}, {""}, + {"complexPacking",565}, + {"is_chemical",1054}, + {"efas_model",740}, + {""}, {""}, {""}, + {"numberOfVerticalCoordinateValues",1537}, {""}, {""}, {""}, {""}, {""}, - {"setCalendarId",2127}, + {"totalNumberOfTileAttributeCombinations",2355}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"DyInDegrees",43}, + {"numberOfMembersInCluster",1477}, + {"section_09",2131}, {""}, - {"internationalDataSubCategory",1023}, + {"Azi",15}, + {"numberOfVerticalGridDescriptors",1538}, + {""}, {""}, {""}, + {"md5Product",1304}, {""}, {""}, {""}, {""}, - {"corr2Data",610}, - {""}, {""}, - {"localMinute",1187}, - {""}, {""}, - {"crraLocalVersion",629}, + {"dimensionType",704}, + {"verticalCoordinateDefinition",2500}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"tablesVersionLatestOfficial",2285}, + {""}, {""}, {""}, {""}, + {"totalNumberOfRepetitions",2354}, {""}, - {"productDefinitionTemplateNumberInternal",1789}, + {"yDirectionGridLengthInMetres",2570}, + {"isAccumulation",1030}, + {""}, + {"NFSP",180}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfLevelValues",1474}, + {""}, + {"plusOneinOrdersOfSPD",1752}, + {""}, + {"ninety_nine",1391}, + {""}, + {"typeOfCompressionUsed",2380}, + {"is_localtime",1057}, {""}, {""}, {""}, {""}, {""}, - {"spectralMode",2182}, + {"typeOfPreProcessing",2395}, + {"centuryOfReference",415}, + {""}, + {"numberOfDistinctSection7s",1453}, + {"satelliteNumber",1968}, + {""}, + {"section_8",2141}, + {"corr1Data",608}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"biFourierTruncationType",368}, {""}, {""}, {"earthIsOblate",727}, - {"angleMultiplier",312}, - {""}, {""}, {""}, - {"correction3Part",619}, - {""}, {""}, {""}, - {"scanningMode",2013}, - {""}, - {"totalNumberOfTileAttributePairs",2314}, - {""}, - {"totalNumberOfRepetitions",2312}, - {"xDirectionGridLength",2513}, - {""}, - {"LaDInDegrees",105}, - {""}, - {"param_value_min",1705}, - {""}, - {"tiggeModel",2272}, - {""}, {""}, {""}, {""}, - {"scaledValueOfStandardDeviation",2003}, - {"westLongitudeOfCluster",2476}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfSizeInterval",2358}, - {""}, {""}, {""}, - {"totalNumberOfTileAttributeCombinations",2313}, - {"scaledValueOfStandardDeviationInTheCluster",2004}, - {""}, - {"representationMode",1864}, - {""}, - {"latitudeLastInDegrees",1091}, - {""}, - {"localMonth",1188}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"biFourierTruncationType",369}, - {"scanningMode8",2018}, - {""}, {""}, {""}, - {"scaledValueOfFirstSize",1990}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"earthMinorAxis",730}, - {"thisMarsStream",2263}, - {""}, {""}, {""}, - {"oneConstant",1585}, {""}, {""}, {""}, {""}, {""}, {""}, - {"tiggeCentre",2269}, - {"indicatorOfUnitForForecastTime",1002}, - {"DyInDegrees",43}, + {"additionalFlagPresent",300}, + {""}, {""}, {""}, + {"dayOfReference",671}, + {""}, {""}, {""}, {""}, + {"monthOfStartOfReferencePeriod",1369}, + {""}, + {"numberOfModels",1483}, + {"scaledValueOfSecondLimit",2023}, + {""}, {""}, {""}, + {"tableReference",2280}, + {""}, + {"longitudeOfCentrePointInDegrees",1214}, {""}, {""}, - {"modelVersionDate",1352}, - {""}, - {"dirty_statistics",709}, - {""}, - {"localSectionPresent",1192}, - {"timeIncrement",2287}, - {"coordinate4OfLastGridPoint",603}, - {""}, {""}, - {"corr1Data",609}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"dateOfForecastRun",657}, - {"verticalVisibility",2460}, - {""}, {""}, - {"parameterNumber",1712}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractSubsetList",846}, - {""}, - {"default_max_val",686}, - {""}, - {"iterationNumber",1060}, - {""}, {""}, - {"tigge_short_name",2276}, + {"_TS",289}, {""}, {""}, {""}, - {"targetCompressionRatio",2252}, - {""}, - {"dimensionNumber",703}, - {""}, {""}, {""}, {""}, {""}, - {"partitionNumber",1718}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"tileClassification",2279}, - {"dx",725}, - {"max",1291}, - {""}, {""}, {""}, {""}, - {"directionNumber",706}, - {""}, {""}, {""}, - {"bufrDataEncoded",381}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfCentrePointInDegrees",1208}, - {""}, {""}, - {"functionCode",904}, - {""}, - {"thisMarsType",2264}, - {""}, - {"scaledValueOfLowerLimit",1994}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Lx",151}, - {"conceptsLocalMarsDirAll",576}, - {"jdLocal",1070}, - {"identificationNumber",983}, - {"subCentre",2219}, - {""}, {""}, {""}, {""}, - {"localDefNumberOne",1172}, - {""}, - {"minutesAfterReferenceTimeOfDataCutoff",1338}, - {""}, {""}, - {"complexPacking",566}, - {""}, - {"oneMillionConstant",1586}, - {""}, {""}, {""}, {""}, {""}, - {"significanceOfReferenceDateAndTime",2140}, - {""}, - {"indexTemplateNumber",993}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Lcx",117}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"tableCode",2244}, - {""}, {""}, - {"jdSelected",1071}, - {"additionalFlagPresent",301}, - {""}, {""}, {""}, {""}, - {"Lux",147}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"subcentreOfAnalysis",2231}, - {""}, {""}, {""}, - {"formatForDoubles",896}, - {"satelliteNumber",1949}, - {""}, {""}, {""}, {""}, - {"numberOfInts",1463}, - {""}, {""}, {""}, {""}, - {"plusOneinOrdersOfSPD",1740}, - {"numericValues",1535}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfPoints",1482}, - {""}, - {"totalNumberOfForecastProbabilities",2307}, - {""}, - {"NP",187}, - {""}, - {"defaultSequence",682}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"projectLocalTemplate",1796}, - {""}, - {"calendarIdPresent",386}, - {""}, {""}, {""}, {""}, {""}, - {"missingValue",1340}, - {""}, - {"integerValues",1021}, - {"verticalCoordinate",2456}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"monthOfStartOfReferencePeriod",1362}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"coordinateIndexNumber",606}, - {""}, {""}, {""}, {""}, - {"extraLocalSectionPresent",815}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"gridDescriptionSectionPresent",935}, - {"calendarIdentification",387}, - {""}, {""}, - {"versionNumberOfGribLocalTables",2453}, - {""}, {""}, {""}, - {"addressOfFileFreeSpaceInfo",303}, - {""}, {""}, {""}, - {"latitudeOfSouthernPole",1106}, - {""}, - {"destineOrigin",695}, - {""}, {""}, {""}, {""}, {""}, - {"parameterIndicator",1710}, - {"centralLongitude",403}, - {"extraLocalSectionNumber",814}, - {"projString",1794}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"secondsOfAnalysis",2044}, - {""}, - {"CDFstr",22}, - {""}, {""}, {""}, {""}, {""}, - {"typeOfEnsembleForecast",2339}, - {"indicatorOfUnitForTimeRange",1004}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"localTimeMethod",1197}, - {"extractedDateTimeNumberOfSubsets",848}, - {"truncateDegrees",2324}, - {"centuryOfReferenceTimeOfData",416}, - {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfSecondFixedSurface",2000}, - {""}, {""}, {""}, - {"extractAreaWestLongitude",822}, - {""}, - {"normAtInitialTime",1387}, - {""}, {""}, {""}, - {"Dx",39}, - {""}, {""}, {""}, {""}, {""}, - {"directionScalingFactor",708}, - {""}, {""}, {""}, {""}, {""}, - {"representativeMember",1866}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"accumulationInterval",295}, - {""}, - {"extraValues",816}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"hourOfStartOfReferencePeriod",971}, - {"parameterCategory",1707}, - {""}, {""}, - {"originalParameterTableNumber",1612}, - {""}, - {"forecastProbabilityNumber",892}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"scaledValueOfFirstFixedSurface",1989}, - {""}, - {"startOfMessage",2191}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfIntegers",1462}, - {""}, {""}, {""}, {""}, {""}, - {"listOfModelIdentifiers",1161}, - {""}, {""}, {""}, - {"scaledFrequencies",1982}, - {"predefined_grid",1751}, - {""}, {""}, {""}, {""}, - {"calendarIdentificationTemplateNumber",388}, - {"monthOfForecastUsedInLocalTime",1359}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfPackedValues",1478}, - {""}, {""}, - {"yearOfStartOfReferencePeriod",2533}, - {"referenceReflectivityForEchoTop",1856}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"originatingCentre",1614}, - {"offsetSection10",1569}, - {""}, {""}, {""}, - {"extraDimensionPresent",813}, - {""}, {""}, {""}, - {"productIdentifier",1790}, - {""}, - {"corr3Data",611}, - {""}, - {"tablesMasterDir",2248}, - {""}, {""}, - {"roundedMarsLongitude",1891}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"iDirectionIncrementInDegrees",978}, - {"laplacianScalingFactor",1084}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"boot_edition",377}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"biFourierMakeTemplate",362}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"clusterIdentifier",539}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"messageLength",1322}, - {""}, {""}, {""}, {""}, {""}, - {"typeOfPreProcessing",2352}, - {""}, - {"roundedMarsLatitude",1889}, - {""}, {""}, {""}, {""}, {""}, - {"easternLongitudeOfDomain",735}, - {"numberInTheGridCoordinateList",1405}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"postAuxiliary",1743}, - {"verticalCoordinateDefinition",2457}, - {"centuryOfAnalysis",414}, - {""}, {""}, {""}, {""}, - {"grib2divider",924}, - {""}, {""}, {""}, {""}, - {"local_padding",1200}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"PVPresent",217}, - {""}, - {"unitsOfFirstFixedSurface",2399}, - {"shapeOfVerificationArea",2134}, - {""}, - {"isEPS",1035}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfCompressionUsed",2337}, - {""}, - {"numberOfEffectiveValues",1448}, - {""}, {""}, {""}, {""}, - {"tileAttribute",2278}, - {""}, {""}, - {"groupSplittingMethodUsed",944}, - {""}, - {"thresholdIndicator",2268}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"section4Padding",2070}, - {""}, {""}, - {"numberOfMembersInCluster",1468}, - {""}, {""}, {""}, {""}, {""}, - {"conceptsMasterDir",577}, - {""}, - {"productionStatusOfProcessedData",1792}, - {""}, {""}, {""}, - {"startStepInHours",2194}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"roundedMarsLevelist",1890}, - {"projectLocalTemplateNumber",1797}, - {"scaledValueOfRadiusOfSphericalEarth",1999}, - {""}, {""}, {""}, {""}, {""}, - {"centralLongitudeInDegrees",404}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"originOfPostProcessing",1610}, - {""}, {""}, {""}, {""}, - {"CDF",21}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"aerosolbinnumber",306}, - {"NDSP",179}, - {""}, - {"section7",2081}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfDataPoints",1434}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"grib1divider",921}, - {"numberOfChars",1420}, - {"preProcessingParameter",1748}, - {"NV",192}, - {""}, {""}, {""}, - {"secondDimensionCoordinateValueDefinition",2023}, - {""}, - {"numberOfModels",1474}, - {""}, - {"coordinate1Start",594}, - {""}, - {"expandedAbbreviations",791}, - {""}, {""}, {""}, {""}, - {"indicatorOfUnitForTimeRangeForReferencePeriod",1005}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfTimeIncrementsOfForecastsUsedInLocalTime",1513}, - {""}, {""}, - {"projectionCenterFlag",1798}, + {"radialAngularSpacing",1826}, {""}, {""}, {"distanceFromTubeToEnsembleMean",712}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"driverInformationBlockAddress",720}, - {"level_value_list",1145}, - {"NFSP",181}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"identificationOfProject",985}, - {"northernLatitudeOfClusterDomain",1395}, - {""}, - {"julianDay",1072}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"referenceValueError",1860}, - {""}, {""}, - {"listMembersUsed",1154}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"projectionCentreFlag",1799}, - {"longitudeFirstInDegrees",1204}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"numberOfValues",1526}, - {"coordinate3OfLastGridPoint",600}, - {""}, - {"westernLongitudeOfDomain",2479}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfDistributionFunctionParameters",1447}, - {"southernLatitudeOfClusterDomain",2166}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"AA",6}, - {""}, {""}, {""}, {""}, - {"numberOfCharacters",1419}, - {""}, {""}, - {"scaledValueOfDistributionFunctionParameter",1986}, - {"localNumberOfObservations",1189}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"offsetAfterBitmap",1548}, - {""}, {""}, {""}, - {"faModelName",857}, - {"originatingClass",1616}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"monthOfAnalysis",1356}, - {""}, {""}, - {"ITN",91}, - {""}, {""}, - {"classOfAnalysis",435}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfSubSatellitePoint",1226}, - {""}, {""}, {""}, - {"deletePV",692}, - {"isCorrection",1034}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"qnhAPresent",1806}, - {""}, {""}, {""}, {""}, - {"longitudeOfSubSatellitePointInDegrees",1227}, - {""}, {""}, {""}, {""}, - {"paleontologicalOffset",1698}, - {"mars_labeling",1278}, - {""}, {""}, {""}, - {"correction4",620}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfAdditionalParameterForReferencePeriod",1952}, - {""}, {""}, - {"isotopeIdentificationNumber",1058}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfDistinctSection7s",1444}, - {""}, - {"coordinate4Flag",601}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"basicAngleOfTheInitialProductionDomain",340}, - {""}, {""}, {""}, - {"biFourierCoefficients",361}, - {""}, {""}, {""}, - {"timeRangeIndicator",2294}, - {"marsForecastMonth",1256}, - {"twoOrdersOfSPD",2332}, - {"centralClusterDefinition",402}, - {"startOfRange",2192}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfMembersInEnsemble",1469}, - {"sectionLengthLimitForEnsembles",2092}, - {"conceptsLocalDirECMF",575}, - {""}, - {"predefined_grid_values",1752}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"implementationDateOfModelCycle",990}, - {"gridCoordinate",930}, - {""}, {""}, - {"spare4",2177}, - {"nameOfSecondFixedSurface",1379}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"versionNumOfRootGroupSymbolTableEntry",2450}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"LoVInDegrees",129}, - {"lengthOfMessage",1134}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"missing_values",1344}, - {"numberOfDataMatrices",1433}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfAuxiliaryInformation",2335}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section4",2068}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"julianForecastDay",1073}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"marsExpver",1255}, - {""}, - {"yDirectionGridLengthInMetres",2521}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"standardParallelInMicrodegrees",2188}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"latitudeOfFirstGridPoint",1096}, + {"CDF",21}, {""}, {""}, {""}, {""}, {""}, - {"widthOfLengths",2481}, + {"originalParameterTableNumber",1622}, {""}, - {"g1conceptsMasterDir",907}, - {""}, {""}, {""}, - {"Nx",207}, + {"forecastProbabilityNumber",896}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"orientationOfTheGridInDegrees",1618}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"skewness",2181}, + {"matchLandType",1292}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfDistinctSection4s",1441}, - {""}, - {"coordinate1Flag",593}, - {"unitsConversionOffset",2393}, - {""}, - {"stepRangeInHours",2207}, - {"numberOfCategories",1418}, - {""}, {""}, - {"numberOfOctetsExtraDescriptors",1476}, - {"dateOfAnalysis",655}, - {""}, {""}, {""}, - {"timeOfAnalysis",2289}, - {""}, {""}, - {"offsetSection7",1576}, - {"scaleFactorOfDistanceFromEnsembleMean",1954}, - {""}, {""}, {""}, - {"dayOfEndOfOverallTimeInterval",668}, - {""}, - {"Ncx",195}, + {"extractSubsetList",846}, + {"bitmapPresent",373}, {""}, {""}, {""}, {""}, - {"section10Pointer",2051}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"Nux",205}, - {""}, {""}, {""}, - {"grib3divider",925}, - {"codedNumberOfFirstOrderPackedValues",559}, - {""}, {""}, {""}, - {"listOfContributingSpectralBands",1158}, - {""}, {""}, {""}, {""}, - {"section2Padding",2059}, - {""}, {""}, {""}, - {"default_min_val",687}, - {""}, {""}, - {"totalNumberOfIterations",2310}, - {""}, {""}, {""}, {""}, - {"section2Present",2061}, - {"masterTablesVersionNumber",1282}, - {""}, {""}, {""}, - {"quantileValue",1813}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"marsExperimentOffset",1254}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"unknown",2444}, {""}, - {"scanningModeForOneDiamond",2019}, + {"offsetAfterPadding",1562}, + {""}, + {"minutesAfterDataCutoff",1343}, + {""}, {""}, + {"marsForecastMonth",1262}, + {""}, + {"originOfPostProcessing",1620}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"conceptsLocalDirECMF",574}, + {""}, + {"coordinate3OfLastGridPoint",599}, + {"localDefNumberOne",1178}, + {"yDirectionGridLengthInMillimetres",2571}, + {"md5Section7",1312}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"yDirectionGridLengthInMillimetres",2522}, - {"sampleSizeOfModelClimate",1945}, {""}, {""}, {""}, {""}, - {"kurt",1078}, - {"deleteExtraLocalSection",690}, - {"section7Pointer",2083}, + {"coordinate4Flag",600}, + {"totalLength",2344}, {""}, {""}, {""}, - {"_numberOfValues",294}, - {""}, {""}, - {"nTileAttCombo",1372}, + {"dateOfForecastRun",656}, + {"scaledValueOfSecondSize",2024}, + {"standardParallelInMicrodegrees",2222}, {""}, - {"latitudeOfStretchingPoleInDegrees",1109}, - {""}, {""}, {""}, - {"biFourierSubTruncationType",368}, - {"typeOfSecondFixedSurface",2357}, - {"masterTablesVersionNumberLatest",1283}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"typeOfOriginalFieldValues",2349}, - {""}, {""}, {""}, - {"addExtraLocalSection",300}, - {"selectedMonth",2121}, - {""}, {""}, {""}, - {"lengthIncrementForTheGroupLengths",1130}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle4",534}, - {""}, {""}, {""}, - {"patch_precip_fp",1725}, - {""}, {""}, {""}, - {"numberOfMissing",1470}, - {""}, {""}, - {"epsStatisticsContinous",788}, - {""}, {""}, - {"southEastLatitudeOfLPOArea",2159}, - {""}, {""}, - {"hourOfAnalysis",965}, + {"TAF",234}, {""}, - {"orderingConvention",1606}, + {"section4Padding",2097}, + {""}, {""}, + {"localSectionPresent",1198}, + {"lengthOfMessage",1140}, + {"northernLatitudeOfClusterDomain",1403}, {""}, {""}, {""}, {""}, {""}, - {"forecastMonth",887}, - {""}, {""}, - {"kurtosis",1079}, - {""}, - {"section1Padding",2056}, - {"groupWidth",945}, - {""}, - {"outerLoopTypeOfStatisticalProcessing",1620}, + {"cloudsTitle4",533}, + {"offsetAfterLocalSection",1561}, {""}, {""}, {""}, - {"timeCoordinateDefinition",2284}, + {"typeOfSizeInterval",2401}, + {""}, {""}, + {"indicatorOfUnitForForecastTime",1006}, + {"keySat",1082}, + {""}, {""}, {""}, + {"grib2divider",928}, + {""}, {""}, + {"upperThreshold",2458}, + {""}, {""}, + {"scaledValueOfFirstLimit",2011}, + {""}, {""}, {""}, {""}, + {"dx",725}, + {"max",1297}, + {""}, {""}, + {"referenceValueError",1872}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"jdLocal",1076}, + {"totalNumberOfForecastProbabilities",2349}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"southernLatitudeOfClusterDomain",2193}, + {""}, {""}, + {"section_08",2130}, + {""}, {""}, {""}, {""}, + {"sensitiveAreaDomain",2151}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"DxInDegrees",40}, - {""}, {""}, {""}, {""}, {""}, - {"distinctLongitudes",714}, - {"lengthOfIndexTemplate",1133}, - {""}, {""}, {""}, {""}, {""}, - {"isHindcast",1039}, + {"Lx",150}, + {"formatForDoubles",900}, + {"addressOfFileFreeSpaceInfo",302}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"iScansNegatively",980}, - {"numberOfForecastsInEnsemble",1452}, + {"numberOfRemaininChars",1510}, {""}, {""}, {""}, - {"section9Length",2089}, - {"simpleThinningMissingRadius",2142}, + {"jdSelected",1077}, {""}, - {"numberOfLogicals",1467}, - {"iScansPositively",981}, - {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfStandardDeviation",2026}, + {""}, {""}, {""}, + {"extraDimensionPresent",813}, + {"numberOfOctetsExtraDescriptors",1485}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Lcx",116}, + {""}, {""}, {"defaultFaModelName",679}, + {"marsExpver",1261}, + {"scaledValueOfStandardDeviationInTheCluster",2027}, + {""}, {""}, {""}, {""}, + {"numberOfChars",1429}, + {""}, + {"referenceOfWidths",1866}, {""}, {""}, - {"yearOfAnalysis",2526}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"mAngleMultiplier",1245}, - {"section8Length",2086}, + {"internationalDataSubCategory",1027}, {""}, - {"lengthOfTimeRange",1137}, - {""}, {""}, {""}, {""}, - {"typeOfAnalysis",2334}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"consensusCount",580}, + {"LoV",127}, + {"Lux",146}, + {""}, {""}, + {"gridDescriptionSectionPresent",939}, {""}, - {"longitudeOfLastGridPointInDegrees",1217}, - {""}, {""}, {""}, {""}, - {"longitudeOfStretchingPoleInDegrees",1225}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"rectimeMinute",1845}, + {"modelVersion",1358}, + {"keyData",1080}, + {""}, {""}, + {"verticalVisibility",2503}, + {"skew",2180}, + {""}, {""}, {""}, + {"scaledValueOfFirstSize",2012}, + {"latitudeOfSouthernPole",1112}, + {""}, {""}, + {"representationType",1883}, + {""}, + {"projectLocalTemplate",1808}, + {"baseAddress",334}, + {""}, {""}, {""}, + {"numberOfInts",1472}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfMissingInStatisticalProcess",1471}, + {"NAT",173}, {""}, {""}, - {"numberOfDataValues",1436}, - {""}, - {"section4Pointer",2071}, - {""}, {""}, {""}, {""}, {""}, - {"inputExtendedDelayedDescriptorReplicationFactor",1009}, - {""}, - {"numberOfForecastsInCluster",1451}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"rectimeHour",1844}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfModeOfDistribution",1473}, - {""}, - {"biFourierResolutionParameterN",365}, - {"groupInternalNodeK",940}, - {"timeDomainTemplate",2285}, - {""}, - {"indicatorOfUnitForTimeIncrement",1003}, - {""}, {""}, - {"doExtractDateTime",716}, - {""}, {""}, {""}, - {"southEastLatitudeOfVerficationArea",2160}, - {""}, {""}, - {"climateDateTo",437}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Experiment_Identifier",54}, - {""}, {""}, {""}, - {"section0Length",2047}, - {""}, - {"table2Version",2243}, + {"isHindcast",1043}, {""}, {""}, {""}, {""}, - {"section10Length",2050}, - {"missingValuesPresent",1343}, - {""}, - {"jDirectionIncrement",1062}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetSection4",1573}, - {""}, {""}, {""}, {""}, {""}, - {"skewness",2154}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeLongitudeValues",1092}, - {""}, - {"expandedCodes",792}, - {""}, - {"unknown",2401}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"reservedNeedNotBePresent",1890}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"dayOfEndOfOverallTimeInterval",667}, {""}, {""}, - {"numberOfTimeRange",1514}, - {"_leg_number",293}, - {"sectionLengthLimitForProbability",2093}, + {"ITN",90}, + {"listMembersUsed",1160}, + {""}, {""}, {""}, + {"numberOfDataMatrices",1442}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"centralClusterDefinition",402}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"implementationDateOfModelCycle",994}, + {""}, {""}, {""}, {""}, + {"destineOrigin",695}, + {""}, {""}, {""}, {""}, {""}, + {"packingType",1637}, + {"centralLongitude",403}, {""}, + {"projString",1806}, + {"marsExperimentOffset",1260}, + {""}, + {"extractedDateTimeNumberOfSubsets",848}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfCharacters",1428}, + {""}, {""}, {""}, + {"scaleFactorOfDistanceFromEnsembleMean",1973}, + {""}, {""}, + {"streamOfAnalysis",2249}, + {""}, + {"numberInTheGridCoordinateList",1414}, + {"rectimeHour",1856}, {"endDayTrend4",749}, - {""}, {""}, {""}, {""}, {""}, - {"verificationMonth",2445}, + {""}, {""}, {""}, + {"hourOfStartOfReferencePeriod",975}, {""}, - {"numberOfTimeRanges",1515}, + {"truncateDegrees",2367}, {""}, - {"timeRangeIndicatorFromStepRange",2295}, - {"localHour",1180}, + {"deleteExtraLocalSection",690}, {""}, {""}, - {"inputOriginatingCentre",1010}, - {""}, - {"frequencyNumber",902}, + {"selectedDay",2144}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scenarioOrigin",2043}, {""}, {""}, {""}, - {"md5Section9",1308}, - {""}, - {"constituentType",584}, - {"totalLength",2302}, - {"scaleValuesBy",1980}, - {""}, {""}, {""}, - {"lengthOfTimeRangeForReferencePeriod",1138}, - {"groupWidths",946}, - {"swapScanningLat",2236}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"LyInMetres",154}, - {""}, {""}, {""}, - {"md5Section8",1307}, + {"scaledValueOfLowerLimit",2016}, + {""}, {""}, + {"unitsOfFirstFixedSurface",2442}, + {""}, {""}, + {"directionScalingFactor",708}, + {"startingAzimuth",2231}, + {""}, {""}, + {"minuteOfAnalysis",1336}, {""}, {""}, {""}, {""}, + {"lowerThreshold",1245}, + {"offsetAfterCentreLocalSection",1559}, + {"addExtraLocalSection",299}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Dx",39}, + {""}, {""}, + {"numberOfMembersInEnsemble",1478}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"yearOfStartOfReferencePeriod",2582}, + {"groupLengths",946}, + {""}, {""}, {""}, {""}, {""}, + {"PVPresent",217}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"modelVersionTime",1360}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"headersOnly",957}, + {""}, {""}, + {"section2Padding",2086}, + {""}, {""}, + {"numericValues",1545}, + {"localHour",1186}, + {"biFourierCoefficients",360}, + {"numberOfPoints",1491}, + {""}, {""}, {""}, {""}, + {"numberOfIntegers",1471}, + {"section2Present",2088}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"sfc_levtype",2159}, + {""}, {""}, {""}, {""}, + {"originatingCentre",1624}, + {""}, + {"perturbedType",1745}, + {"timeIncrement",2329}, + {""}, + {"missingValue",1346}, + {""}, + {"integerValues",1025}, + {""}, {""}, + {"lsdate_bug",1248}, + {""}, {""}, {""}, + {"lstime_bug",1249}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"crraLocalVersion",628}, + {""}, {""}, {""}, + {"listOfEnsembleForecastNumbers",1166}, + {""}, {""}, {""}, + {"is_aerosol_optical",1053}, + {"laplacianScalingFactor",1090}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extraLocalSectionPresent",815}, + {""}, {""}, {""}, + {"gts_ddhh00",953}, + {""}, {""}, {""}, {""}, + {"scanningModeForOneDiamond",2042}, + {""}, {""}, {""}, {""}, + {"monthOfForecastUsedInLocalTime",1366}, + {"numberOfMissing",1479}, + {"spare4",2204}, + {""}, {""}, + {"offsetSection10",1579}, + {""}, + {"reservedSection4",1894}, + {"messageLength",1328}, + {""}, + {"inputExtendedDelayedDescriptorReplicationFactor",1013}, + {"sampleSizeOfModelClimate",1964}, + {""}, {""}, + {"productionStatusOfProcessedData",1804}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"easternLongitudeOfDomain",735}, + {"numberOfPackedValues",1487}, + {""}, {""}, {""}, {""}, + {"extraLocalSectionNumber",814}, + {""}, {""}, + {"section7Pointer",2110}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"doExtractDateTime",716}, + {""}, + {"numberOfForecastsInEnsemble",1461}, + {""}, {""}, {""}, {""}, {""}, + {"section4",2095}, + {""}, {""}, {""}, + {"latitudeOfIcosahedronPole",1105}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"scaledValueOfSecondFixedSurface",2022}, + {""}, {""}, {""}, + {"isTemplateExperimental",1051}, + {""}, {""}, + {"sphericalHarmonics",2218}, + {""}, + {"longitudeOfNorthWestCornerOfArea",1224}, + {"defaultSequence",682}, + {""}, + {"M",154}, + {""}, {""}, {""}, + {"modelVersionDate",1359}, + {""}, + {"predefined_grid",1762}, + {"numberOfCategories",1427}, + {""}, {""}, {""}, {""}, {""}, + {"latitudeOfFirstGridPoint",1102}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extraValues",816}, + {""}, {""}, {""}, {""}, + {"is_chemical_distfn",1055}, + {""}, {""}, {""}, {""}, + {"dirty_statistics",709}, + {""}, {""}, {""}, {""}, + {"centralLongitudeInDegrees",404}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"grib3divider",929}, + {"scaledValueOfFirstFixedSurface",2010}, + {""}, {""}, {""}, + {"typicalHour",2416}, + {"listOfContributingSpectralBands",1164}, + {""}, {""}, + {"indicatorOfUnitForTimeRange",1008}, + {"dayOfAnalysis",666}, + {""}, {""}, {""}, {""}, {""}, + {"template_is_deprecated",2292}, + {""}, {""}, {""}, {""}, + {"unitsConversionOffset",2436}, + {""}, {""}, + {"numberOfMissingInStatisticalProcess",1480}, + {""}, + {"preProcessingParameter",1759}, + {"numberOfModeOfDistribution",1482}, + {"calendarIdPresent",386}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"groupWidth",949}, + {""}, {""}, {""}, {""}, {""}, + {"section6",2104}, + {""}, {""}, {""}, {""}, {""}, + {"rectimeMinute",1857}, + {""}, {""}, + {"coordinate1Start",593}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"endOfFileAddress",765}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"param_value_min",1717}, + {""}, + {"centuryOfReferenceTimeOfData",416}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"projectionCenterFlag",1810}, + {""}, {""}, + {"localNumberOfObservations",1195}, + {""}, {""}, {""}, {""}, {""}, + {"calendarIdentification",387}, + {""}, {""}, {""}, {""}, + {"matchAerosolPacking",1291}, + {""}, {""}, {""}, {""}, + {"identificationOfProject",989}, + {""}, + {"Experiment_Identifier",54}, + {"julianDay",1078}, + {""}, {""}, {""}, {""}, {""}, + {"parameterIndicator",1722}, + {""}, {""}, + {"numberOfTimeIncrementsOfForecastsUsedInLocalTime",1523}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"grib1divider",925}, + {""}, {""}, {""}, {""}, {""}, + {"southEastLatitudeOfVerficationArea",2187}, + {""}, {""}, {""}, + {"projectionCentreFlag",1811}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"isCorrection",1038}, + {""}, {""}, {""}, {""}, {""}, + {"westernLongitudeOfDomain",2528}, + {""}, {""}, {""}, {""}, + {"projectLocalTemplateNumber",1809}, + {""}, {""}, + {"scaledFrequencies",2003}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"timeDomainTemplate",2327}, + {"numberOfDistinctSection4s",1450}, + {""}, {""}, {""}, {""}, + {"startOfHeaders",2224}, + {""}, {""}, {""}, {""}, {""}, + {"climateDateTo",436}, + {""}, + {"accumulationInterval",294}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"originatingClass",1626}, + {""}, {""}, {""}, + {"listMembersMissing",1156}, + {""}, {""}, + {"default_max_val",686}, + {""}, {""}, + {"tigge_short_name",2317}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"spatialVicintiyList",2213}, + {"twoOrdersOfSPD",2375}, + {""}, + {"rdbtimeHour",1842}, + {""}, {""}, {""}, {""}, {""}, + {"releaseStartHour",1875}, + {""}, + {"scaleValuesBy",2001}, + {""}, + {"codedNumberOfFirstOrderPackedValues",558}, + {""}, {""}, + {"numberOfDistinctSection6s",1452}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Nx",207}, + {""}, {""}, {""}, + {"gridCoordinate",934}, + {""}, {""}, {""}, {""}, + {"numberOfForecastsInCluster",1460}, + {"longitudeOfLastGridPointInDegrees",1223}, + {"typeOfHorizontalLine",2387}, + {""}, {""}, {""}, + {"coordinate2Start",596}, + {""}, {""}, {""}, + {"numberOfDataPoints",1443}, + {""}, {""}, {""}, + {"g1conceptsMasterDir",911}, + {"NV",191}, + {""}, + {"epsContinuous",786}, + {""}, {""}, + {"coordinateIndexNumber",605}, + {"selectedMonth",2148}, + {"Ncx",195}, + {""}, + {"productIdentifier",1802}, + {"numberOfAnalysis",1418}, + {""}, + {"constituentType",583}, + {"consensusCount",579}, + {""}, {""}, {""}, {""}, {""}, + {"groupWidths",950}, + {"calendarIdentificationTemplateNumber",388}, + {""}, {""}, + {"LyInMetres",153}, + {""}, + {"Nux",205}, + {""}, {""}, {""}, {""}, + {"iDirectionIncrementInDegrees",982}, + {"numberOfDistributionFunctionParameters",1456}, {"DiInMetres",33}, - {"swapScanningLon",2237}, + {"typeOfEnsembleMember",2383}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"coordinate1Flag",592}, + {"forecastMonth",891}, + {"sectionLengthLimitForEnsembles",2119}, {""}, - {"nameOfFirstFixedSurface",1378}, + {"longitudeOfSubSatellitePoint",1232}, + {""}, + {"versionNumOfRootGroupSymbolTableEntry",2493}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"clusterIdentifier",538}, + {""}, {""}, + {"releaseStartMinute",1876}, + {""}, + {"section5",2100}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfSubSatellitePointInDegrees",1233}, + {"originatorLocalTemplate",1627}, + {""}, + {"section3Padding",2092}, + {"spatialVicinityProcessing",2208}, + {""}, {""}, {""}, {""}, + {"isSatelliteType",1047}, + {""}, {""}, + {"lengthOfHeaders",1138}, {""}, {""}, {""}, - {"keySat",1076}, + {"simpleThinningMissingRadius",2169}, + {""}, {""}, {""}, {""}, + {"constantFieldHalfByte",582}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"md5Section6",1311}, + {"clusterMember7",546}, + {"typicalMinute",2417}, + {"offsetSection4",1583}, + {""}, + {"coordinate3Flag",597}, + {""}, {""}, {""}, {""}, + {"numberOfDistinctSection5s",1451}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section10Pointer",2078}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"indicatorOfUnitForTimeRangeForReferencePeriod",1009}, + {""}, {""}, {""}, + {"julianForecastDay",1079}, {""}, {""}, - {"md5Data",1294}, - {"constituentTypeName",585}, + {"radiusInMetres",1829}, + {""}, + {"typicalDateTime",2414}, + {"thresholdIndicator",2309}, + {""}, {""}, {""}, {""}, {""}, + {"expandedCodes",792}, + {""}, {""}, {""}, {""}, + {"shortNameECMF",2163}, {""}, {""}, - {"upperThreshold",2415}, - {"lengthOfOriginatorLocalTemplate",1135}, + {"constituentTypeName",584}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"biFourierResolutionParameterN",364}, + {"subcentreOfAnalysis",2265}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"widthOfLengths",2530}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"backgroundProcess",332}, + {""}, {""}, + {"shapeOfTheEarth",2160}, + {""}, {""}, {""}, + {"scaledValueOfRadiusOfSphericalEarth",2021}, + {"scanningMode7",2040}, + {"section1Padding",2083}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfForecastsInTheCluster",1462}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"paleontologicalOffset",1709}, + {""}, {""}, {""}, + {"offsetSection6",1585}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetAfterBitmap",1558}, + {""}, + {"startStepInHours",2228}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"windVariableDirectionTrend4",2509}, - {""}, {""}, {""}, {""}, - {"bitsPerValue",375}, - {""}, {""}, - {"originatorLocalTemplate",1617}, - {""}, {""}, {""}, {""}, {""}, - {"correction2Part",617}, - {""}, - {"isSatelliteType",1043}, + {"coordinate2Flag",595}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"numberOfForecastsInTheCluster",1453}, - {""}, {""}, {""}, {""}, - {"typeOfCalendar",2336}, - {""}, {""}, - {"verifyingMonth",2447}, {""}, - {"jIncrement",1066}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfAdditionalParametersForReferencePeriod",1408}, - {"epsContinous",786}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfIntervalForFirstAndSecondSize",2345}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"typicalDateTime",2371}, - {"listOfEnsembleForecastNumbers",1160}, - {"radiusInMetres",1817}, - {"referenceOfWidths",1854}, - {"qualityControl",1809}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"operationalForecastCluster",1598}, - {""}, {""}, {""}, {""}, {""}, - {"sphericalHarmonics",2184}, - {""}, - {"listMembersMissing",1150}, - {"windSpeedTrend4",2499}, - {"longitudeOfFirstGridPointInDegrees",1213}, - {""}, {""}, {""}, - {"keyData",1074}, - {""}, - {"doSimpleThinning",718}, - {"primaryMissingValue",1777}, - {"skew",2153}, - {""}, {""}, {""}, {""}, {""}, - {"waveFrequencyNumber",2473}, - {""}, - {"numberOfParallelsBetweenAPoleAndTheEquator",1479}, - {""}, - {"typicalMinute",2374}, - {""}, {""}, {""}, {""}, - {"probContinous",1779}, - {""}, - {"reservedSection4",1875}, - {"numberOfDistinctSection6s",1443}, - {""}, - {"coordinate3Flag",598}, - {""}, {""}, {""}, {""}, {""}, - {"minuteOfModelVersion",1334}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfComponents",1428}, - {"secondOfModelVersion",2030}, - {""}, {""}, - {"totalInitialConditions",2301}, - {""}, {""}, {""}, {""}, {""}, - {"typicalHour",2373}, - {""}, {""}, {""}, {""}, - {"rdbtimeMinute",1831}, - {""}, {""}, {""}, - {"grib2LocalSectionPresent",923}, - {""}, - {"attributeOfTile",324}, - {""}, - {"section3Padding",2065}, - {""}, {""}, - {"md5Structure",1309}, - {""}, {""}, {""}, - {"typeOfIntervalForFirstAndSecondWavelength",2346}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"biFourierResolutionSubSetParameterN",367}, - {"correction1",614}, - {""}, {""}, {""}, - {"spatialSmoothingOfProduct",2179}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"rdbtimeHour",1830}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"packingType",1627}, {"DyInMetres",44}, - {"grib2LocalSectionNumber",922}, - {""}, - {"selectedFcIndex",2118}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"epsStatisticsContinous",788}, + {"verificationMonth",2488}, + {""}, + {"startOfRange",2226}, + {"correction2",615}, + {""}, {""}, {""}, + {"orderingConvention",1616}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"totalNumberOfIterations",2352}, + {"n2",1376}, + {""}, + {"numberOfValues",1536}, + {""}, {""}, {""}, + {"primaryMissingValue",1788}, + {"timeCoordinateDefinition",2326}, + {""}, {""}, {""}, + {"windSpeedTrend4",2548}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"sizeOfLength",2176}, + {"rdbtimeMinute",1843}, + {""}, {""}, {""}, + {"longitudeFirstInDegrees",1210}, + {""}, {""}, {""}, {""}, + {"sp2",2196}, + {"deletePV",692}, + {"minuteOfModelVersion",1340}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"listOfParametersUsedForClustering",1168}, + {""}, + {"secondOfModelVersion",2054}, + {""}, + {"spare2",2202}, + {""}, {""}, + {"La2",101}, + {""}, {""}, {""}, {""}, + {"scaledValueOfDistributionFunctionParameter",2007}, + {"Lar2",109}, + {"marsStream2",1280}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Latin2",114}, + {""}, {""}, {""}, + {"Lo2",124}, + {""}, {""}, {""}, {""}, {""}, + {"Lor2",144}, + {""}, {""}, + {"masterTablesVersionNumber",1288}, + {""}, + {"LcyInMetres",119}, + {"md5Section5",1310}, + {""}, + {"secondDimensionCoordinateValueDefinition",2047}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"operationalForecastCluster",1608}, + {"LoVInDegrees",128}, + {"verifyingMonth",2490}, + {""}, {""}, {""}, {""}, {""}, + {"LuyInMetres",149}, + {""}, + {"attributeOfTile",323}, + {"predefined_grid_values",1763}, + {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfPrimeMeridianOffset",1987}, + {""}, {""}, {""}, + {"unpackedError",2446}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"masterTablesVersionNumberLatest",1289}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"nameOfSecondFixedSurface",1386}, + {"totalInitialConditions",2343}, + {""}, + {"significanceOfReferenceDateAndTime",2167}, + {""}, {""}, {""}, {""}, {"bitMapIndicator",371}, - {""}, - {"frequencyScalingFactor",903}, - {""}, - {"gts_TTAAii",948}, - {"totalTileAttCombo",2320}, - {""}, {""}, - {"typeOfFirstFixedSurface",2341}, - {""}, {""}, {""}, - {"reservedNeedNotBePresent",1871}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"marsStream1",1273}, + {""}, {""}, + {"packingError",1636}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lowerThreshold",1239}, - {""}, {""}, - {"windDirectionTrend4",2488}, + {"windDirectionTrend4",2537}, + {""}, + {"aerosolbinnumber",305}, {""}, {""}, {""}, {""}, - {"combinationOfAttributesOfTile",564}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfOctectsForNumberOfPoints",1475}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"DxInDegrees",40}, {""}, {""}, {""}, - {"SecondOfModelVersion",230}, - {"groupLengths",942}, - {""}, {""}, - {"inputProcessIdentifier",1012}, + {"SecondOfModelVersion",229}, + {""}, + {"subSetM",2264}, + {"lengthOfIndexTemplate",1139}, {""}, {""}, {""}, {""}, - {"monthOfModelVersion",1360}, - {""}, {""}, {""}, - {"expandedOriginalCodes",798}, - {"extremeClockwiseWindDirection",849}, - {"expandedOriginalWidths",801}, - {"resolutionAndComponentFlags",1877}, - {""}, {""}, {""}, - {"ijDirectionIncrementGiven",989}, - {""}, - {"primaryMissingValueSubstitute",1778}, - {"tileIndex",2281}, - {"matrixOfValues",1290}, - {"LcyInMetres",120}, + {"biFourierResolutionSubSetParameterN",366}, + {"monthOfModelVersion",1367}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetSection5",1584}, {""}, {""}, - {"startOfHeaders",2190}, - {""}, - {"centreLatitudeInDegrees",411}, - {"monthlyVerificationMonth",1364}, - {""}, {""}, {""}, {""}, {""}, - {"section_10",2106}, - {""}, {""}, {""}, {""}, {""}, - {"LuyInMetres",150}, + {"primaryMissingValueSubstitute",1789}, + {""}, {""}, {""}, + {"xDirectionGridLengthInMetres",2563}, {""}, {""}, {""}, {""}, - {"maxLevelValue",1292}, - {""}, {""}, {""}, - {"extractedAreaNumberOfSubsets",847}, - {""}, {""}, {""}, - {"Lar2InDegrees",111}, - {""}, {""}, {""}, - {"secondLatitudeInDegrees",2026}, - {"resolutionAndComponentFlags8",1884}, - {""}, {""}, - {"section2Pointer",2060}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"forecastOrSingularVectorNumber",888}, - {""}, {""}, {""}, - {"coordAveragingTims",591}, - {"Lor2InDegrees",146}, - {""}, {""}, - {"is_ocean2d_param",1052}, - {""}, {""}, - {"expandedOriginalScales",800}, + {"monthlyVerificationMonth",1371}, {""}, - {"latitudeOfNorthWestCornerOfArea",1102}, - {"longitudeOfNorthWestCornerOfArea",1218}, - {"firstDimensionCoordinateValueDefinition",869}, - {""}, {""}, {""}, {""}, {""}, - {"extendedFlag",811}, + {"table2Version",2277}, + {"probContinous",1790}, {""}, {""}, {""}, {""}, - {"typeOfHorizontalLine",2344}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"M",155}, + {"tsectionNumber4",2370}, {""}, {""}, - {"extractSubsetIntervalEnd",844}, - {""}, - {"radiusOfCentralCluster",1818}, - {""}, {""}, {""}, {""}, - {"section6Pointer",2079}, - {""}, - {"extractSubsetIntervalStart",845}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"listOfParametersUsedForClustering",1162}, + {"section4Pointer",2098}, + {"isectionNumber4",1063}, {""}, {""}, {""}, - {"scaledValueOfAdditionalParameterForReferencePeriod",1983}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unitsConversionScaleFactor",2394}, - {""}, {""}, {""}, {""}, {""}, - {"coordAveraging0",587}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfPointsAlongXAxis",1490}, - {""}, - {"n2",1369}, - {""}, - {"expandedOriginalReferences",799}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"dataCategory",635}, - {"latitudeOfIcosahedronPole",1099}, - {"stepForClustering",2203}, + {"extremeClockwiseWindDirection",850}, {""}, {""}, {""}, - {"numberOfCoordinatesValues",1431}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"averaging2Flag",328}, - {""}, {""}, {""}, - {"Lar1InDegrees",109}, - {"sp2",2169}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"section1Pointer",2057}, - {""}, - {"scaleFactorOfPrimeMeridianOffset",1967}, - {"lengthOfHeaders",1132}, - {""}, {""}, - {"spare2",2175}, - {""}, - {"yCoordinateOfSubSatellitePoint",2519}, - {"La2",102}, - {""}, {""}, - {"constantFieldHalfByte",583}, - {"Lor1InDegrees",144}, - {""}, - {"Lar2",110}, - {""}, {""}, {""}, - {"conceptsDir1",572}, - {"md5TimeDomainSection",1310}, - {""}, {""}, {""}, {""}, {""}, - {"Latin2",115}, - {""}, {""}, {""}, - {"Lo2",125}, - {""}, {""}, - {"azimuthalWidth",331}, - {""}, {""}, - {"Lor2",145}, - {""}, {""}, {""}, {""}, - {"numberInTheAuxiliaryArray",1404}, - {""}, - {"cloudsTitle1",519}, - {""}, {""}, {""}, {""}, - {"numberOfColumns",1427}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"tsectionNumber4",2327}, - {""}, - {"windVariableDirectionTrend2",2507}, - {""}, - {"isectionNumber4",1057}, - {""}, {""}, {""}, - {"numberOfCodedValues",1424}, - {""}, - {"md5DataSection",1295}, - {""}, {""}, {""}, {""}, {""}, - {"II",87}, - {"La2InDegrees",103}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"doExtractArea",715}, - {""}, {""}, {""}, - {"Lo2InDegrees",126}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"formatVersionMajorNumber",898}, - {"originatingCentreOfAnalysis",1615}, - {""}, {""}, - {"shapeOfTheEarth",2133}, - {""}, {""}, {""}, - {"averaging1Flag",327}, - {""}, {""}, {""}, {""}, {""}, - {"tiggeLAMName",2270}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"XRInMetres",272}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfDistanceFromEnsembleMean",1985}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"section6",2077}, - {""}, {""}, {""}, {""}, - {"numberOfDistinctSection3s",1440}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"updateSequenceNumber",2412}, - {""}, {""}, - {"baseTimeEPS",338}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"swapScanningX",2238}, - {""}, {""}, {""}, {""}, {""}, - {"windVariableDirectionTrend1",2506}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"stepUnits",2211}, - {""}, {""}, {""}, {""}, {""}, - {"La1InDegrees",101}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"longitudeOfFirstDiamondCenterLine",1209}, - {""}, - {"longitudeOfFirstDiamondCentreLine",1210}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Lo1InDegrees",124}, - {""}, - {"typicalCentury",2369}, - {""}, {""}, {""}, {""}, {""}, - {"selectedMinute",2120}, - {""}, {""}, - {"presentTrend4",1758}, - {""}, - {"longitudeOfFirstDiamondCentreLineInDegrees",1211}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfSouthernPoleInDegrees",1107}, - {""}, - {"sp1",2168}, - {""}, - {"dummy2",723}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"spare1",2174}, - {""}, {""}, - {"La1",100}, - {""}, {""}, {""}, {""}, {""}, - {"Lar1",108}, - {""}, {""}, {""}, - {"xDirectionGridLengthInMetres",2514}, - {""}, - {"yearOfCentury",2527}, - {""}, {""}, {""}, {""}, - {"Latin1",113}, + {"unpackedSubsetPrecision",2447}, {""}, {"bufrHeaderCentre",382}, - {""}, - {"Lo1",123}, - {""}, - {"endDayTrend1",746}, - {""}, {""}, - {"scaleFactorOfLengthOfSemiMinorAxis",1962}, - {"Lor1",143}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section1",2049}, - {""}, {""}, - {"fileConsistencyFlags",866}, - {"marsGrid",1257}, + {"formatVersionMajorNumber",902}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfLogicals",1476}, + {""}, + {"dummy2",723}, + {"azimuthalWidth",330}, + {""}, {""}, {""}, + {"section6Pointer",2106}, {""}, {""}, {""}, {""}, {""}, {""}, - {"LLCOSP",98}, - {""}, - {"secondOrderOfDifferentWidth",2033}, - {"backgroundProcess",333}, - {""}, - {"isGridded",1038}, - {""}, {""}, {""}, - {"stepHumanReadable",2204}, - {""}, {""}, {""}, - {"reserved2",1869}, - {""}, {""}, - {"numberOfCoefficientsOrValuesUsedToSpecifyFirstDimensionCoordinateFunction",1425}, - {"numberOfCoefficientsOrValuesUsedToSpecifySecondDimensionCoordinateFunction",1426}, - {""}, - {"marsType2",1277}, - {"X2",269}, - {""}, {""}, - {"runwayDepositState4",1903}, - {""}, {""}, - {"baseDateEPS",336}, - {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfWaveDirections",1977}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfWaveDirectionSequenceParameter",1976}, - {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfWaveFrequencies",1978}, + {"lengthIncrementForTheGroupLengths",1136}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfWavePeriodInterval",2367}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"totalNumberOfValuesInUnpackedSubset",2316}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"verticalVisibilityCoded",2461}, - {"cloudsTitle4Trend4",538}, - {""}, {""}, - {"shortNameECMF",2136}, + {"conceptsDir2",572}, {""}, {""}, {""}, - {"compressedData",568}, + {"gribDataQualityChecks",930}, + {""}, {""}, + {"latitudeOfStretchingPoleInDegrees",1115}, {""}, {""}, {""}, - {"runwaySideCodeState4",1943}, - {"latitudeOfSubSatellitePoint",1110}, + {"level_value_list",1151}, {""}, - {"md5Product",1298}, + {"isotopeIdentificationNumber",1064}, {""}, {""}, {""}, {""}, {""}, - {"numberOfWaveFrequencies",1532}, - {"indicatorOfTypeOfLevel",1001}, - {"xDirectionGridLengthInMillimetres",2515}, - {""}, {""}, {""}, - {"totalNumberOfDataValuesMissingInStatisticalProcess",2305}, - {"timeDomainTemplateNumber",2286}, - {"numberOfWaveDirections",1531}, - {"windUnits",2500}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ls_labeling",1241}, - {""}, - {"unitsBias",2392}, - {""}, {""}, - {"typeOfEnsembleMember",2340}, - {""}, {""}, - {"section3Pointer",2066}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfRepresentativeMember",1502}, + {"typeOfCalendar",2379}, {""}, {""}, {""}, {""}, - {"is_ocean3d_param",1053}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"localExtensionPadding",1177}, - {""}, - {"latitudeOfCentralPointInClusterDomain",1093}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section_7",2113}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetSection2",1571}, - {""}, - {"reducedGrid",1847}, + {"cloudsTitle2",523}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"wrongPadding",2510}, + {"LLCOSP",97}, + {""}, {""}, + {"yCoordinateOfSubSatellitePoint",2568}, + {""}, {""}, + {"extractAreaWestLongitude",822}, + {""}, {""}, + {"lengthOfOriginatorLocalTemplate",1141}, + {""}, {""}, {""}, {""}, + {"qualityControl",1821}, + {""}, {""}, {""}, + {"xDirectionGridLengthInMillimetres",2564}, + {"southEastLatitudeOfLPOArea",2186}, + {""}, {""}, {""}, {""}, + {"reserved2",1888}, {""}, - {"normAtFinalTime",1386}, - {""}, {""}, - {"dummy1",722}, - {""}, {""}, - {"scaleFactorOfSecondWavelength",1971}, + {"lengthOfTimeRange",1143}, + {""}, {""}, {""}, + {"marsType2",1283}, + {""}, {""}, {""}, {""}, + {"correction3",617}, + {"thisMarsClass",2303}, + {""}, + {"localExtensionPadding",1183}, + {"Lar2InDegrees",110}, + {""}, {""}, {""}, + {"typeOfSecondFixedSurface",2400}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"missingValuesPresent",1349}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Lor2InDegrees",145}, + {""}, {""}, {""}, {""}, + {"normAtInitialTime",1395}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"timeRangeIndicator",2336}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"integerPointValues",1017}, - {"DjInDegrees",36}, - {""}, {""}, {""}, {""}, - {"subSetM",2230}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"flagForIrregularGridCoordinateList",879}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"GTSstr",78}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section5Pointer",2102}, + {"conceptsMasterMarsDir",577}, + {""}, + {"nameOfFirstFixedSurface",1385}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle1Trend4",523}, + {"correction1",613}, + {""}, {""}, {""}, {""}, {""}, + {"timeDomainTemplateNumber",2328}, + {""}, {""}, {""}, {""}, + {"numberOfOctectsForNumberOfPoints",1484}, + {""}, {""}, + {"longitudeOfStretchingPoleInDegrees",1231}, + {""}, {""}, + {"spatialSmoothingOfProduct",2206}, + {""}, + {"baseTimeEPS",337}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"groupInternalNodeK",944}, {""}, {""}, {""}, - {"scaleFactorOfWaveFrequencySequenceParameter",1979}, - {"endStepUnit",773}, - {"originatorLocalTemplateNumber",1618}, + {"grib2LocalSectionPresent",927}, + {""}, {""}, {""}, + {"averaging2Flag",327}, + {""}, {""}, {""}, + {"numberOfDistinctSection3s",1449}, + {""}, + {"marsStream1",1279}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"section_7",2140}, + {"stepHumanReadable",2238}, + {""}, {""}, + {"offsetSection2",1581}, + {""}, {""}, {""}, {""}, + {"windVariableDirectionTrend4",2558}, + {""}, {""}, {""}, {""}, {""}, + {"postAuxiliary",1754}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"grib2LocalSectionNumber",926}, + {""}, {""}, + {"totalNumberOfDataValuesMissingInStatisticalProcess",2347}, + {""}, {""}, {""}, {""}, {""}, + {"local_padding",1206}, + {""}, + {"biFourierSubTruncationType",367}, + {""}, + {"lengthOfTimeRangeForReferencePeriod",1144}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"unitsConversionScaleFactor",2437}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfDataValues",1445}, + {"endDayTrend2",747}, + {"iScansNegatively",984}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"resolutionAndComponentFlags",1896}, + {""}, {""}, {""}, + {"numberOfComponents",1437}, + {"section2Pointer",2087}, + {""}, {""}, {""}, + {"La2InDegrees",102}, + {"indicatorOfUnitForTimeIncrement",1007}, + {""}, {""}, + {"X2",268}, + {""}, {""}, {""}, {""}, + {"productDefinitionTemplateNumberInternal",1801}, + {"temporalVicinityUnit",2299}, + {""}, + {"typeOfOriginalFieldValues",2392}, + {""}, {""}, {""}, + {"originatorLocalTemplateNumber",1628}, + {"firstDimensionCoordinateValueDefinition",870}, + {""}, {""}, {""}, + {"Lo2InDegrees",125}, + {""}, {""}, {""}, + {"longitudeOfFirstGridPointInDegrees",1219}, + {"mAngleMultiplier",1251}, {"centreForTable2",409}, {""}, {""}, - {"reserved1",1868}, - {""}, - {"pressureUnits",1775}, - {""}, - {"offsetSection6",1575}, - {""}, - {"marsType1",1276}, - {"X1",267}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"windGust",2489}, + {"typeOfWavePeriodInterval",2410}, + {"frequencyNumber",906}, + {""}, {""}, + {"tsectionNumber5",2371}, {""}, {""}, {""}, {""}, {""}, - {"sizeOfLength",2149}, + {"7777",5}, + {"baseDateEPS",335}, + {"numberOfColumns",1436}, {""}, - {"section_07",2102}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"windVariableDirectionTrend3",2508}, - {""}, {""}, - {"clusterMember10",541}, - {""}, {""}, - {"gribDataQualityChecks",926}, - {""}, {""}, - {"southEastLongitudeOfVerficationArea",2162}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"thisMarsClass",2262}, + {"missing_values",1350}, + {""}, {""}, {""}, + {"typicalCentury",2412}, + {""}, {""}, {""}, {""}, + {"stepRangeInHours",2241}, + {"scaledValueOfDistanceFromEnsembleMean",2006}, + {"TIDE",236}, + {""}, {""}, {""}, + {"secondsOfAnalysis",2071}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"spatialVicinityMissingData",2207}, + {""}, {""}, {""}, + {"boot_edition",377}, {""}, - {"missingValueManagement",1341}, + {"upperThresholdValue",2459}, + {""}, {""}, + {"cloudsTitle4Trend4",537}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"distinctLongitudes",714}, + {"typeOfFirstFixedSurface",2384}, + {""}, + {"radiusOfCentralCluster",1830}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"sectionLengthLimitForProbability",2120}, + {""}, {""}, {""}, + {"bitsPerValue",375}, + {"numberOfTimeRange",1524}, + {""}, + {"yearOfCentury",2576}, + {""}, {""}, + {"section9Length",2116}, + {""}, {""}, {""}, + {"longitudeOfFirstDiamondCenterLine",1215}, + {""}, + {"longitudeOfFirstDiamondCentreLine",1216}, + {"numberOfTimeRanges",1525}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"jIncrement",1072}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"windSpeedTrend2",2546}, + {"longitudeOfFirstDiamondCentreLineInDegrees",1217}, + {""}, {""}, + {"section_07",2129}, + {"cloudsTitle3",528}, + {""}, {""}, {""}, + {"iScansPositively",985}, + {""}, {""}, + {"stepForClustering",2237}, + {"nTileAttCombo",1379}, + {""}, + {"runwayDepositState4",1922}, + {""}, + {"keyMore",1081}, + {""}, {""}, {""}, {""}, {""}, + {"tileAttribute",2319}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"N2",172}, + {"shapeOfVerificationArea",2161}, + {"reservedSection2",1892}, + {""}, + {"md5Section4",1309}, + {"conceptsDir1",571}, + {""}, {""}, + {"numberOfCoordinatesValues",1440}, + {""}, {""}, {""}, {""}, {""}, + {"quantileValue",1825}, + {""}, {""}, + {"firstDimensionPhysicalSignificance",871}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"driverInformationBlockAddress",720}, + {""}, {""}, {""}, {""}, + {"cloudsTitle1",518}, + {""}, {""}, + {"fileConsistencyFlags",867}, + {"heightPressureEtcOfLevels",960}, + {"versionOfModelClimate",2498}, + {""}, {""}, {""}, {""}, {""}, + {"runwaySideCodeState4",1962}, + {"section10Length",2077}, + {"secondOrderOfDifferentWidth",2057}, + {""}, {""}, {""}, {""}, + {"scaleFactorOfAdditionalParameterForReferencePeriod",1971}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"primaryBitmap",1776}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"postAuxiliaryArrayPresent",1744}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GTS",77}, - {""}, {""}, - {"windSpeedTrend2",2497}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"jDirectionIncrement",1068}, + {"defaultCfVarName",676}, {""}, {""}, {""}, {""}, - {"flagForAnyFurtherInformation",878}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"latitudeOfFirstGridPointInDegrees",1097}, - {"numberOfClusters",1423}, + {"section8Length",2113}, + {""}, {""}, {""}, + {"XRInMetres",271}, {""}, - {"correction3",618}, + {"scaleFactorOfWaveDirections",1998}, + {"numberOfWaveFrequencies",1542}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfWaveDirections",1541}, + {""}, {""}, + {"scaleFactorOfWaveDirectionSequenceParameter",1997}, + {""}, + {"latitudeLongitudeValues",1098}, + {""}, + {"scaleFactorOfWaveFrequencies",1999}, + {""}, {""}, + {"expandedAbbreviations",791}, + {""}, {""}, + {"numberOfCodedValues",1433}, + {""}, {""}, {""}, {""}, {""}, + {"resolutionAndComponentFlags8",1903}, + {""}, {""}, + {"versionNumberOfExperimentalSuite",2495}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"packedValues",1635}, + {""}, {""}, {""}, {""}, {""}, + {"temporalVicinityProcessing",2296}, + {"centuryOfAnalysis",414}, + {""}, + {"inputOriginatingCentre",1014}, + {""}, + {"windVariableDirectionTrend2",2556}, + {""}, + {"section0Length",2074}, + {""}, {""}, {""}, + {"windDirectionTrend2",2535}, + {""}, + {"expandedOriginalCodes",798}, + {""}, + {"expandedOriginalWidths",801}, + {"NWPused",192}, + {""}, {""}, + {"swapScanningLat",2270}, + {"indicatorOfTypeOfLevel",1005}, + {""}, {""}, {""}, + {"selectedHour",2146}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"swapScanningLon",2271}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"lowerThresholdValue",1246}, + {"NC",175}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"isectionNumber2",1061}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"doExtractSubsets",717}, {""}, {""}, {""}, - {"earthMajorAxis",728}, - {""}, {""}, {""}, - {"earthMinorAxisInMetres",731}, - {"legBaseTime",1126}, - {""}, - {"flagShowingPostAuxiliaryArrayInUse",881}, - {""}, {""}, {""}, {""}, - {"offsetSection1",1568}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"LxInMetres",152}, + {"waveFrequencyNumber",2522}, {""}, {""}, {""}, {""}, {""}, - {"offsetEndSection4",1562}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"spaceUnitFlag",2171}, - {"numberOfPointsAlongASide",1485}, - {""}, {""}, - {"deleteCalendarId",689}, - {"thisExperimentVersionNumber",2261}, - {""}, {""}, - {"biFourierResolutionParameterM",364}, - {""}, {""}, - {"unitOfTimeRange",2390}, - {""}, - {"endOfMessage",768}, + {"expandedOriginalScales",800}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unstructuredGrid",2407}, - {""}, {""}, {""}, - {"numberOfPointsAlongAMeridian",1483}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"upperThresholdValue",2416}, - {""}, {""}, {""}, - {"section_4",2110}, - {""}, {""}, - {"halfByte",951}, - {""}, {""}, - {"monthOfEndOfOverallTimeInterval",1357}, - {"unstructuredGridType",2409}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"endDayTrend3",748}, {""}, - {"instrumentType",1016}, - {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfFirstWavelength",1960}, - {""}, - {"northWestLatitudeOfLPOArea",1391}, - {""}, {""}, {""}, - {"windDirectionTrend2",2486}, - {""}, {""}, - {"bufrdcExpandedDescriptors",385}, - {""}, - {"indexedStorageInternalNodeK",994}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudinalDirectionGridLength",1122}, - {""}, {""}, {""}, {""}, {""}, - {"centralLongitudeInMicrodegrees",405}, - {""}, - {"Dj",34}, - {"param_value_max",1704}, - {"heightPressureEtcOfLevels",956}, - {"selectedHour",2119}, + {"timeRangeIndicatorFromStepRange",2337}, + {"extendedFlag",811}, {""}, {""}, {""}, {""}, - {"DiGiven",31}, - {""}, {""}, {""}, - {"tablesLocalDir",2247}, - {""}, {""}, {""}, {""}, - {"coordinate2Start",597}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"subDefinitions2",2221}, - {""}, - {"longitudeOfReferencePoint",1219}, - {""}, - {"legBaseDate",1125}, - {""}, - {"Yp",285}, - {""}, {""}, - {"unpackedSubsetPrecision",2404}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Yo",284}, - {"longitudeOfTangencyPoint",1228}, - {""}, {""}, {""}, {""}, {""}, - {"typeOfGrid",2343}, - {"numberOfPointsInDomain",1494}, - {""}, - {"cloudsTitle4Trend2",536}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"windSpeedTrend1",2496}, - {"conceptsMasterMarsDir",578}, - {""}, - {"observationType",1540}, - {""}, - {"rootGroupObjectHeaderAddress",1886}, - {""}, - {"N2",173}, - {""}, {""}, {""}, {""}, - {"rangeBinSpacing",1822}, - {"extractDateTimeYearStart",842}, - {"section_04",2099}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section1Flags",2054}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"startDateOfReferencePeriod",2189}, - {""}, - {"minuteOfEndOfOverallTimeInterval",1331}, - {""}, {""}, - {"DxInMetres",41}, - {"rootTablesDir",1888}, - {""}, {""}, {""}, {""}, - {"secondOfEndOfOverallTimeInterval",2027}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"southPoleOnProjectionPlane",2165}, - {"section7Length",2082}, - {""}, - {"numberOfPointsAlongSecondAxis",1487}, - {""}, - {"P_INST",218}, - {""}, - {"isRotatedGrid",1041}, - {""}, {""}, {""}, - {"northWestLatitudeOfVerficationArea",1392}, - {""}, {""}, - {"secondaryBitmap",2037}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"jPointsAreConsecutive",1067}, {"P2",214}, {""}, {""}, {""}, - {"BufrTemplate",19}, + {"typeOfAuxiliaryInformation",2378}, + {""}, {""}, {""}, + {"selectedMinute",2147}, {""}, - {"componentIndex",567}, - {"packedValues",1625}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"coordinate1End",591}, + {""}, {""}, {""}, + {"scaleFactorOfSecondWavelength",1992}, {""}, - {"selectStepTemplateInstant",2115}, - {"tiggeSuiteID",2274}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"subLocalDefinition2",2223}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle4Trend1",535}, + {"cloudsCode4",513}, {""}, - {"longitudeOfTheSouthernPoleOfProjection",1232}, + {"tileIndex",2322}, {""}, {""}, {""}, {""}, {""}, - {"versionOfModelClimate",2455}, + {"basicAngleOfTheInitialProductionDomain",339}, + {""}, {""}, {""}, {""}, {""}, + {"inputProcessIdentifier",1016}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractSubsetIntervalEnd",844}, + {""}, {""}, {""}, {""}, + {"cloudsTitle4Trend2",535}, + {""}, {""}, {""}, + {"extractSubsetIntervalStart",845}, + {""}, {""}, {""}, {""}, {""}, + {"endDayTrend1",746}, + {"expandedOriginalReferences",799}, + {"doSimpleThinning",718}, + {""}, {""}, {""}, + {"Lar1InDegrees",108}, + {""}, {""}, {""}, + {"mars_labeling",1284}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfSouthEastCornerOfArea",1227}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Lor1InDegrees",143}, {""}, {""}, - {"scaledValueOfPrimeMeridianOffset",1998}, + {"biFourierResolutionParameterM",363}, + {"scaleFactorOfWaveFrequencySequenceParameter",2000}, + {"n3",1377}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"clusterMember10",540}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfTangencyPoint",1234}, + {"offsetEndSection4",1572}, + {""}, {""}, {""}, {""}, + {"sp3",2197}, + {""}, {""}, + {"forecastOrSingularVectorNumber",892}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"subDefinitions2",2255}, + {"spare3",2203}, + {""}, + {"marsGrid",1263}, + {""}, {""}, {""}, + {"earthMajorAxis",728}, + {""}, + {"md5Headers",1303}, + {""}, + {"qnhAPresent",1818}, + {"section3Pointer",2093}, + {""}, + {"monthOfEndOfOverallTimeInterval",1364}, + {"isGridded",1042}, + {""}, {""}, {""}, + {"numberOfCoefficientsOrValuesUsedToSpecifyFirstDimensionCoordinateFunction",1434}, + {"numberOfCoefficientsOrValuesUsedToSpecifySecondDimensionCoordinateFunction",1435}, + {""}, {""}, {""}, + {"matrixOfValues",1296}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberInTheAuxiliaryArray",1413}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"frequencyScalingFactor",907}, + {""}, {""}, {""}, + {"reservedSection3",1893}, + {"maxLevelValue",1298}, + {""}, {""}, {""}, + {"selectedFcIndex",2145}, + {"averaging1Flag",326}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"verticalVisibilityCoded",2504}, + {"endOfMessage",768}, + {""}, + {"coordinate2End",594}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"firstMonthUsedToBuildClimateMonth2",875}, + {"stepUnits",2245}, + {"compressedData",567}, + {""}, {""}, + {"presentTrend4",1769}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"_numberOfValues",293}, + {""}, {""}, + {"typicalMonth",2418}, + {""}, + {"tiggeLAMName",2311}, + {"unitsBias",2435}, + {"outerLoopTypeOfStatisticalProcessing",1630}, + {""}, + {"latitudeOfCentralPointInClusterDomain",1099}, + {""}, {""}, + {"LxInMetres",151}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"ijDirectionIncrementGiven",993}, + {""}, {""}, + {"section1Pointer",2084}, + {""}, {""}, {""}, + {"La1InDegrees",100}, + {""}, {""}, {""}, + {"subLocalDefinition2",2257}, + {""}, {""}, {""}, {""}, {""}, + {"centralLongitudeInMicrodegrees",405}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"missingValueManagement",1347}, + {""}, {""}, + {"Lo1InDegrees",123}, + {""}, {""}, + {"temporalVicinityTowardsFuture",2297}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"dataCategory",634}, + {""}, {""}, {""}, + {"reducedGrid",1859}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"remarkPresent",1880}, + {""}, {""}, + {"longitudeOfThePoleOfStretching",1235}, + {"default_min_val",687}, + {"totalTileAttCombo",2362}, + {"latitudeOfSouthernPoleInDegrees",1113}, + {""}, {""}, {""}, + {"numberOfClusters",1432}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"is_ocean2d_param",1058}, + {""}, + {"runwayFrictionCoefficientState4",1958}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfFirstWavelength",1980}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"sp1",2195}, + {"minuteOfEndOfOverallTimeInterval",1337}, + {"centreLatitudeInDegrees",411}, + {""}, {""}, {""}, {""}, + {"GTSstr",77}, + {""}, {""}, + {"secondOfEndOfOverallTimeInterval",2051}, + {""}, {""}, + {"spare1",2201}, + {""}, {""}, + {"La1",99}, + {""}, {""}, {""}, {""}, {""}, + {"Lar1",107}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"II",86}, + {""}, {""}, + {"secondLatitudeInDegrees",2050}, + {"Latin1",112}, + {"Yp",284}, + {""}, + {"hourOfEndOfOverallTimeInterval",970}, + {"Lo1",122}, + {""}, + {"template_is_experimental",2293}, + {""}, {""}, + {"stepInHours",2239}, + {"Lor1",142}, + {"Yo",283}, + {""}, {""}, {""}, + {"thisExperimentVersionNumber",2302}, + {""}, + {"biFourierResolutionSubSetParameterM",365}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"section1",2076}, + {"windGust",2538}, + {""}, {""}, {""}, {""}, {""}, + {"latitudeOfFirstGridPointInDegrees",1103}, + {""}, + {"subLocalDefinitionLength2",2259}, + {""}, {""}, {""}, {""}, {""}, + {"windVariableDirectionTrend3",2557}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfParallelsBetweenAPoleAndTheEquator",1488}, + {""}, {""}, {""}, + {"rdbtimeMonth",1844}, + {"windUnits",2549}, + {""}, {""}, {""}, + {"reserved3",1889}, + {""}, + {"extractDateTimeYearStart",842}, + {""}, {""}, {""}, {""}, {""}, + {"yearOfEndOfOverallTimeInterval",2577}, + {""}, {""}, {""}, + {"runwayDepositState2",1920}, + {""}, {""}, {""}, {""}, + {"primaryBitmap",1787}, + {""}, {""}, {""}, {""}, + {"DxInMetres",41}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"doExtractArea",715}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"GTS",76}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwaySideCodeState2",1960}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"legBaseTime",1132}, + {""}, {""}, {""}, {""}, {""}, + {"secondaryMissingValue",2069}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"isTemplateDeprecated",1050}, + {""}, + {"cloudsTitle1Trend4",522}, + {""}, + {"windVariableDirectionTrend1",2555}, + {""}, {""}, {""}, {""}, {""}, + {"diffInHours",701}, + {"numberOfRepresentativeMember",1511}, + {""}, + {"parametersVersion",1727}, + {"mask",1285}, + {"clusterMember4",543}, + {"selectedYear",2150}, + {""}, {""}, {""}, + {"cloudsTitle4Trend3",536}, + {"earthMinorAxisInMetres",731}, + {"DELETE",24}, + {""}, {""}, {""}, + {"latitudeOfNorthWestCornerOfArea",1108}, + {""}, {""}, + {"latitudeOfSubSatellitePoint",1116}, + {""}, {""}, {""}, {""}, + {"LcxInMetres",117}, + {"localYear",1205}, + {"cfVarNameECMF",421}, + {""}, {""}, {""}, {""}, + {"NrInRadiusOfEarthScaled",202}, + {""}, {""}, {""}, + {"pack",1634}, + {""}, {""}, {""}, + {"endMinuteTrend4",760}, + {"endStepUnit",773}, + {"selectStepTemplateInstant",2142}, + {"LuxInMetres",147}, + {"offsetSection3",1582}, + {""}, {""}, {""}, + {"pressureUnits",1786}, + {""}, + {"bufrdcExpandedDescriptors",385}, + {""}, + {"cloudsTitle3Trend4",532}, + {""}, {""}, + {"dummy1",722}, + {""}, {""}, {""}, + {"cavokOrVisibility",391}, + {""}, {""}, + {"unstructuredGrid",2450}, + {"scaledValueOfPrimeMeridianOffset",2020}, + {""}, {""}, + {"halfByte",955}, + {""}, {""}, + {"WMO",263}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"NrInRadiusOfEarth",201}, {""}, {"extractDateTimeHourStart",829}, {""}, - {"cloudsTitle3",529}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"parametersVersion",1715}, + {"unstructuredGridType",2452}, {""}, {""}, - {"selectedYear",2123}, - {""}, - {"lowerThresholdValue",1240}, - {"hourOfEndOfOverallTimeInterval",966}, - {""}, {""}, {""}, {""}, - {"numberOfPointsAlongAParallel",1484}, - {"LcxInMetres",118}, - {""}, {""}, - {"yCoordinateOfOriginOfSectorImage",2518}, - {""}, {""}, {""}, {""}, - {"n3",1370}, - {"cloudsTitle1Trend2",521}, - {"localYear",1199}, - {""}, {""}, {""}, {""}, {""}, - {"windDirectionTrend1",2485}, - {""}, - {"LuxInMetres",148}, - {""}, - {"offsetBeforeData",1558}, + {"unpack",2445}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"biFourierResolutionSubSetParameterM",366}, + {"percentileValue",1741}, + {""}, {""}, {""}, + {"scanningMode4",2037}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"firstWavelengthInMetres",879}, {""}, - {"offsetBSection9",1556}, + {"firstWavelengthInNanometres",880}, + {""}, {""}, + {"DjInDegrees",36}, + {""}, {""}, + {"firstWavelength",878}, + {""}, {""}, {""}, + {"latitudinalDirectionGridLength",1128}, + {"clusterMember6",545}, + {""}, {""}, {""}, + {"runwayFrictionCoefficientState2",1956}, + {""}, {""}, {""}, {""}, + {"cloudsTitle4Trend1",534}, + {"reserved1",1887}, + {""}, + {"flagForIrregularGridCoordinateList",883}, + {""}, {""}, + {"DiGiven",31}, + {"marsType1",1282}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfThePoleOfStretching",1229}, - {"isectionNumber2",1055}, - {"sp3",2170}, + {"legBaseDate",1131}, + {"patch_precip_fp",1737}, {""}, {""}, - {"oceanAtmosphereCoupling",1543}, - {"easternLongitudeOfClusterDomain",734}, - {""}, {""}, - {"runwayFrictionCoefficientState4",1939}, - {""}, {""}, {""}, - {"secondaryMissingValue",2042}, - {""}, - {"spare3",2176}, - {""}, - {"Product_Identifier",221}, - {"yearOfEndOfOverallTimeInterval",2528}, - {""}, {""}, {""}, {""}, - {"cloudsTitle3Trend4",533}, - {""}, {""}, {""}, {""}, - {"subDefinitions1",2220}, - {""}, {""}, {""}, {""}, - {"padding_sec1_loc",1692}, - {""}, {""}, {""}, - {"section4Length",2069}, - {""}, {""}, {""}, {""}, {""}, - {"dateSSTFieldUsed",663}, - {"percentileValue",1729}, - {""}, {""}, {""}, {""}, - {"beginDayTrend4",344}, - {"produceLargeConstantFields",1785}, - {"secondaryBitmapPresent",2038}, - {""}, {""}, - {"formatVersionMinorNumber",899}, - {""}, {""}, - {"NC",176}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"md5Section7",1306}, - {"unstructuredGridSubtype",2408}, - {""}, - {"PUnset",216}, - {"coordinate1End",592}, - {""}, {""}, - {"N1",172}, - {""}, - {"longitudeOfSouthEastCornerOfArea",1221}, - {"subLocalDefinitionLength2",2225}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"firstMonthUsedToBuildClimateMonth2",874}, - {""}, - {"expandedCrex_scales",793}, - {""}, {""}, - {"jDirectionIncrementInDegrees",1065}, - {""}, {""}, {""}, - {"Model_Additional_Information",167}, - {""}, - {"TIDE",237}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle1Trend1",520}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"identificationOfOriginatingGeneratingCentre",984}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"uerraLocalVersion",2383}, - {""}, - {"clusterMember7",547}, - {""}, {""}, - {"xCoordinateOfSubSatellitePoint",2512}, - {""}, - {"meanRVR4",1314}, - {""}, {""}, - {"NrInRadiusOfEarthScaled",202}, - {""}, - {"P1",213}, - {"expandedCrex_units",794}, - {""}, - {"numberOfDistinctSection5s",1442}, - {""}, - {"coordinate2Flag",596}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"NUT",191}, - {""}, {""}, {""}, {""}, {""}, - {"versionNumberOfExperimentalSuite",2452}, - {"stepInHours",2205}, - {""}, {""}, - {"LIMITS",97}, - {"falseEasting",859}, - {""}, - {"subLocalDefinition1",2222}, - {"alternativeRowScanning",308}, - {"presentTrend2",1756}, - {""}, - {"typicalYear",2378}, - {""}, {""}, {""}, - {"marsKeywords1",1260}, - {"Sub-Experiment_Identifier",234}, - {""}, {""}, {""}, {""}, - {"endDayTrend3",748}, - {""}, {""}, {""}, {""}, {""}, - {"NrInRadiusOfEarth",201}, - {""}, {""}, - {"qfeUnits",1804}, - {"numberOfClusterHighResolution",1421}, - {""}, - {"directionOfVariation",707}, - {"qnhUnits",1808}, - {"secondaryBitmaps",2039}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unpackedError",2403}, - {"firstMonthUsedToBuildClimateMonth1",873}, - {""}, {""}, - {"totalNumberOfWaveDirections",2317}, - {""}, {""}, - {"rdbtimeYear",1835}, - {"parameterUnits",1713}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfLengthOfSemiMinorAxis",1993}, - {""}, - {"totalNumberOfWaveFrequencies",2318}, - {""}, - {"scanningMode7",2017}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfClusterLowResolution",1422}, - {""}, {""}, {""}, - {"Ensemble_Identifier",50}, - {""}, {""}, {""}, {""}, - {"secondaryBitmapsCount",2040}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetFromReferenceOfFirstTime",1565}, - {""}, {""}, - {"westernLongitudeOfClusterDomain",2478}, - {""}, {""}, {""}, {""}, - {"remarkPresent",1862}, - {""}, - {"packingError",1626}, + {"northWestLatitudeOfVerficationArea",1400}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section3Flags",2063}, - {""}, {""}, {""}, {""}, - {"runwayDepositState2",1901}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"visibilityInKilometresTrend4",2466}, - {""}, {""}, {""}, {""}, - {"tiggeLocalVersion",2271}, + {"section7Length",2109}, {""}, {""}, - {"scaledValueOfWaveDirectionSequenceParameter",2007}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"sourceOfGridDefinition",2157}, - {"scaleFactorOfUpperLimit",1974}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"firstDimensionPhysicalSignificance",870}, - {""}, {""}, - {"METARstr",157}, - {""}, {""}, {""}, - {"totalNumberOfClusters",2304}, - {""}, {""}, - {"diffInHours",701}, - {""}, {""}, {""}, - {"subLocalDefinitionLength1",2224}, - {""}, {""}, {""}, {""}, - {"longitudeOfCentralPointInClusterDomain",1206}, - {""}, {""}, {""}, - {"reserved3",1870}, - {""}, {""}, {""}, {""}, {""}, - {"runwaySideCodeState2",1941}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"startStepUnit",2195}, - {""}, {""}, {""}, {""}, - {"cloudsTitle4Trend3",537}, - {""}, {""}, {""}, {""}, - {"reservedSection3",1874}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation4",454}, - {"selectStepTemplateInterval",2116}, - {"cloudsCode4",514}, - {""}, {""}, {""}, {""}, {""}, - {"section11Pointer",2053}, - {""}, {""}, {""}, {""}, - {"numberOfUnexpandedDescriptors",1517}, - {""}, {""}, {""}, {""}, {""}, - {"expandedCrex_widths",795}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfUsedTileAttributes",1521}, + {"HDF5str",79}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentTrend1",1755}, - {"section5Pointer",2075}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"scaledValueOfSecondWavelength",2002}, - {"numberOfWaveFrequencySequenceParameters",1533}, - {"numberOfStepsUsedForClustering",1510}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfUsedTileAttributesForTileAttributeCombination",1522}, - {""}, {""}, {""}, - {"scaledValuesOfWaveDirections",2009}, - {"Nj",199}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfWaveDirectionSequenceParameters",1530}, - {""}, - {"secondaryMissingValueSubstitute",2043}, - {""}, - {"dataSubCategory",647}, - {""}, {""}, {""}, {""}, {""}, - {"clusterMember4",544}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberMissingFromAveragesOrAccumulations",1407}, - {""}, {""}, {""}, {""}, - {"Model_Identifier",168}, - {""}, {""}, - {"offsetSection3",1572}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endMinuteTrend4",760}, - {"forceStepUnits",885}, - {"scaledValueOfWaveFrequencySequenceParameter",2008}, - {""}, {""}, - {"numberOfPointsAlongXAxisInCouplingArea",1491}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfTangencyPoint",1112}, - {""}, {""}, {""}, - {"clusteringDomain",552}, - {""}, {""}, {""}, {""}, - {"runwayDepositState1",1900}, - {"numberIncludedInAverage",1406}, - {"scaledValuesOfWaveFrequencies",2010}, - {""}, {""}, - {"cloudsTitle1Trend3",522}, - {""}, - {"longitudeOfThePolePoint",1230}, - {"runwayFrictionCoefficientState2",1937}, - {""}, {""}, - {"cfVarNameECMF",421}, - {"WRAPstr",266}, - {""}, {""}, {""}, - {"swapScanningAlternativeRows",2235}, - {""}, - {"variationOfVisibilityDirection",2433}, - {""}, {""}, {""}, - {"cloudsTitle3Trend2",531}, - {""}, - {"variationOfVisibilityDirectionAngle",2434}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"secondOrderValuesDifferentWidths",2034}, - {""}, {""}, {""}, - {"section2Length",2058}, - {""}, {""}, - {"scanningMode4",2014}, - {""}, - {"deleteLocalDefinition",691}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"tempPressureUnits",2254}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"runwaySideCodeState1",1940}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"gaussianGridName",909}, - {""}, {""}, - {"numberOfBits",1410}, - {""}, {""}, {""}, - {"typeOfReferenceDataset",2354}, - {""}, - {"section6Length",2078}, - {""}, {""}, {""}, {""}, {""}, - {"cavokOrVisibility",391}, - {"runwayDesignatorState4",1919}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"keyMore",1075}, - {""}, {""}, - {"scaleFactorOfCentralWaveNumber",1953}, - {"inputShortDelayedDescriptorReplicationFactor",1013}, - {""}, {""}, - {"rdb_key",1826}, - {"preBitmapValues",1747}, - {"correction2",616}, - {""}, {""}, - {"firstOrderValues",875}, - {""}, {""}, - {"GDSPresent",67}, - {"scaleFactorOfLowerWavePeriodLimit",1964}, - {""}, {""}, - {"runwayFrictionCoefficientState1",1936}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfUsedSpatialTiles",1519}, - {""}, {""}, {""}, {""}, - {"cloudsTitle3Trend1",530}, - {""}, - {"************_PRODUCT_***************",3}, - {"WMO",264}, - {""}, {""}, {""}, - {"windSpeedTrend3",2498}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"section1Length",2055}, - {""}, {""}, {""}, - {"iDirectionIncrementGiven",976}, - {""}, {""}, - {"section11Length",2052}, - {"localLatitude2",1183}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"variationOfVisibility",2432}, - {"localUsePresent",1198}, - {""}, - {"endGridDefinition",751}, - {"dayOfForecastUsedInLocalTime",670}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"marsStream2",1274}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"coordinateFlag2",605}, - {""}, {""}, - {"probabilityType",1782}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"dateOfSSTFieldUsed",662}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetAfterData",1550}, - {""}, - {"section_2",2108}, - {"extractDateTimeMinuteEnd",830}, - {"mBasicAngle",1246}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeMinuteStart",832}, - {""}, {""}, - {"secondaryBitmapsSize",2041}, - {""}, {""}, - {"probabilityTypeName",1783}, - {""}, {""}, {""}, - {"scaledValueOfFirstWavelength",1991}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeMonthEnd",833}, - {""}, - {"YR",280}, - {""}, {""}, {""}, {""}, - {"extractDateTimeMonthStart",835}, - {""}, {""}, {""}, {""}, - {"METAR",156}, - {""}, {""}, {""}, {""}, {""}, - {"md5Section6",1305}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfContributingSpectralBands",1429}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetBeforePL",1559}, - {""}, {""}, {""}, {""}, {""}, - {"localFlagLatestVersion",1179}, - {""}, {""}, - {"extractAreaNorthLatitude",820}, - {"latitudeWhereDxAndDyAreSpecified",1118}, - {""}, {""}, - {"theHindcastMarsStream",2259}, - {""}, - {"iDirectionIncrementGridLength",977}, - {"windDirectionTrend3",2487}, - {""}, {""}, {""}, - {"section_6",2112}, - {""}, {""}, {""}, {""}, - {"expandedUnits",803}, - {""}, {""}, - {"latitudeWhereDxAndDyAreSpecifiedInDegrees",1119}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"jScansNegatively",1068}, - {""}, - {"southEastLongitudeOfLPOArea",2161}, - {""}, {""}, - {"section_02",2097}, - {""}, {""}, {""}, - {"jScansPositively",1069}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfReferencePoint",1103}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfRadarSitesUsed",1497}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"unpackedValues",2405}, - {""}, - {"MinuteOfModelVersion",159}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"extractDateTimeStart",839}, - {""}, {""}, {""}, {""}, - {"localTablesVersion",1193}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfSubSatellitePointInDegrees",1111}, - {""}, {""}, {""}, {""}, {""}, - {"localLatitude1",1182}, - {""}, {""}, - {"subLocalDefinitionNumber2",2227}, - {""}, {""}, {""}, - {"extractDateTimeSecondEnd",836}, - {""}, {""}, {""}, - {"numberOfDataBinsAlongRadials",1432}, - {""}, {""}, {""}, {""}, - {"extractDateTimeSecondStart",838}, - {""}, - {"localLongitude2",1186}, - {""}, {""}, - {"conceptsDir2",573}, - {""}, {""}, - {"unexpandedDescriptors",2385}, - {""}, - {"typeOfSSTFieldUsed",2356}, - {""}, {""}, {""}, {""}, - {"NRj",189}, - {"coordinateFlag1",604}, - {"section_06",2101}, - {""}, - {"ITERATOR",90}, - {""}, - {"gribTablesVersionNo",928}, - {""}, {""}, - {"longitudeOfSouthernPole",1222}, - {"numberOfHorizontalPoints",1461}, - {""}, {""}, {""}, - {"cloudsTitle2",524}, - {""}, {""}, {""}, {""}, - {"dayOfTheYearDate",674}, - {""}, {""}, - {"section9UniqueIdentifier",2091}, - {"section_1",2105}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"section8UniqueIdentifier",2088}, - {""}, {""}, {""}, {""}, - {"numberOfControlForecastTube",1430}, - {""}, {""}, {""}, {""}, - {"uuidOfVGrid",2426}, - {""}, {""}, - {"unexpandedDescriptorsEncoded",2386}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"kindOfProduct",1077}, - {""}, {""}, {""}, {""}, {""}, - {"matchAerosolBinNumber",1284}, - {"typeOfPacking",2350}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfDataPointsExpected",1435}, - {""}, {""}, {""}, - {"horizontalDomainTemplate",962}, - {""}, {""}, - {"MonthOfModelVersion",170}, - {""}, {""}, {""}, - {"pentagonalResolutionParameterK",1727}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"backgroundGeneratingProcessIdentifier",332}, - {"runwayFrictionCoefficientState3",1938}, - {""}, {""}, {""}, {""}, - {"DjInMetres",37}, - {"beginDayTrend2",342}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle3Trend3",532}, - {""}, {""}, {""}, {""}, {""}, - {"northWestLongitudeOfVerficationArea",1394}, - {"typicalMonth",2375}, - {"tsectionNumber3",2326}, - {""}, {""}, {""}, - {"isectionNumber3",1056}, - {"latitudeOfLastGridPoint",1100}, - {"section3Length",2064}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"section_01",2096}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"expandBy",790}, - {""}, {""}, {""}, {""}, {""}, - {"runwayDesignatorState2",1917}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"NEAREST",180}, - {"rdbtimeMonth",1832}, - {""}, {""}, {""}, {""}, - {"qualityControlIndicator",1810}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"minuteOfStartOfReferencePeriod",1336}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"secondOfStartOfReferencePeriod",2031}, - {""}, {""}, {""}, {""}, - {"runwayFrictionCodeValueState4",1931}, - {"padding_local40_1",1689}, - {""}, {""}, {""}, {""}, {""}, - {"meanRVR2",1312}, - {""}, - {"mixedCoordinateFieldFlag",1346}, - {""}, {""}, {""}, {""}, - {"cloudsCode1",499}, - {""}, {""}, {""}, {""}, - {"subLocalDefinitionNumber1",2226}, - {""}, {""}, - {"xCoordinateOfOriginOfSectorImage",2511}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"listMembersUsed4",1157}, - {""}, {""}, - {"localLongitude1",1185}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"Latin2InDegrees",116}, - {""}, - {"endDayTrend2",747}, - {""}, - {"referenceForGroupWidths",1852}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"satelliteID",1947}, + {"monthOfAnalysis",1363}, + {"typeOfGrid",2386}, + {"updateSequenceNumber",2455}, {""}, {"endOfHeadersMarker",766}, + {"uerraLocalVersion",2426}, + {"classOfAnalysis",434}, + {""}, {""}, {""}, + {"cloudsTitle2Trend4",527}, + {"rangeBinSpacing",1834}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"kindOfProduct",1083}, + {""}, {""}, + {"easternLongitudeOfClusterDomain",734}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfThePolePoint",1236}, {""}, - {"extractAreaEastLongitude",817}, + {"scanningMode6",2039}, + {""}, {""}, {""}, {""}, + {"totalNumberOfWaveDirections",2359}, + {""}, {""}, + {"typicalYear",2421}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section_10",2133}, + {""}, {""}, {""}, + {"windSpeedTrend3",2547}, + {"totalNumberOfWaveFrequencies",2360}, + {""}, {""}, {""}, + {"spaceUnitFlag",2198}, + {""}, + {"secondaryBitmap",2064}, + {""}, {""}, + {"directionOfVariation",707}, + {""}, {""}, {""}, {""}, + {"produceLargeConstantFields",1796}, + {"unitOfTimeRange",2433}, + {""}, {""}, {""}, {""}, {""}, + {"BufrTemplate",19}, + {""}, {""}, {""}, {""}, + {"yCoordinateOfOriginOfSectorImage",2567}, + {"extractedAreaNumberOfSubsets",847}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"rootGroupObjectHeaderAddress",1905}, + {""}, {""}, + {"typeOfIntervalForFirstAndSecondSize",2388}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDesignatorState1",1916}, + {"wrongPadding",2559}, + {"offsetSection1",1578}, + {"xCoordinateOfSubSatellitePoint",2561}, + {""}, + {"tiggeSuiteID",2315}, + {""}, {""}, {""}, {""}, + {"LIMITS",96}, + {""}, {""}, {""}, {""}, + {"deleteCalendarId",689}, + {"is_ocean3d_param",1059}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"firstMonthUsedToBuildClimateMonth1",874}, + {""}, + {"tablesLocalDir",2281}, + {""}, + {"temporalVicinityTowardsPast",2298}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"longitudeOfCentralPointInClusterDomain",1212}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"inputOverriddenReferenceValues",1011}, - {""}, - {"physicalMeaningOfVerticalCoordinate",1737}, + {"backgroundGeneratingProcessIdentifier",331}, {""}, {""}, - {"presentTrend3",1757}, - {""}, {""}, {""}, - {"Original_Parameter_Identifier",211}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"crraSuiteID",631}, - {""}, {""}, - {"codedNumberOfGroups",560}, + {"tiggeLocalVersion",2312}, {""}, - {"referenceForGroupLengths",1851}, - {""}, {""}, {""}, - {"typeOfProcessedData",2353}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"visibilityInKilometresTrend2",2464}, + {"cloudsTitle1Trend2",520}, {""}, {""}, {""}, {""}, - {"totalAerosolBinsNumbers",2300}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfUpperLimit",2005}, - {""}, {""}, {""}, - {"beginDayTrend1",341}, - {""}, {""}, {""}, - {"Latin1InDegrees",114}, - {""}, {""}, - {"verificationYear",2446}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"sizeOfPostAuxiliaryArray",2151}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"constantAntennaElevationAngle",582}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"projTargetString",1795}, - {""}, {""}, {""}, {""}, - {"runwayDepositState3",1902}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endStepInHours",772}, - {""}, {""}, {""}, - {"reservedSection2",1873}, + {"offsetBeforeData",1568}, + {""}, + {"longitudeOfSouthernPole",1228}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation2",444}, + {"X1",266}, + {"longitudeOfReferencePoint",1225}, + {""}, {""}, {""}, + {"nameECMF",1383}, + {""}, + {"presentTrend2",1767}, + {""}, {""}, + {"formatVersionMinorNumber",903}, + {"oceanAtmosphereCoupling",1553}, + {"offsetBSection9",1566}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"meanRVR1",1311}, {""}, {""}, {""}, {""}, {""}, {""}, - {"projSourceString",1793}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetICEFieldsUsed",1566}, - {""}, {""}, - {"runwaySideCodeState3",1942}, - {""}, {""}, {""}, - {"longitudeLastInDegrees",1205}, - {""}, {""}, {""}, - {"experimentVersionNumber",805}, - {"totalNumberOfGridPoints",2309}, + {"observationType",1550}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfMajorAxisOfOblateSpheroidEarth",1965}, + {"clusterMember5",544}, + {""}, + {"rootTablesDir",1907}, {""}, {""}, - {"numberOfGroups",1459}, + {"cloudsTitle3Trend2",530}, + {""}, {""}, + {"windDirectionTrend3",2536}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"horizontalDimensionProcessed",961}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"marsClass2",1250}, + {"secondaryBitmapPresent",2065}, + {""}, {""}, {""}, {""}, + {"dateOfAnalysis",654}, + {""}, {""}, {""}, + {"timeOfAnalysis",2331}, + {""}, + {"startDateOfReferencePeriod",2223}, + {""}, {""}, {""}, + {"unitsECMF",2439}, + {""}, + {"rdbtimeYear",1847}, + {""}, {""}, {""}, + {"MinuteOfModelVersion",158}, + {""}, + {"releaseStartYear",1879}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfPointsAlongFirstAxis",1486}, - {"pentagonalResolutionParameterJ",1726}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"listMembersUsed4",1163}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"tsectionNumber3",2369}, + {"westernLongitudeOfClusterDomain",2527}, + {""}, {""}, + {"isectionNumber3",1062}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfHorizontalPoints",1470}, {""}, {""}, {""}, {""}, {""}, - {"clusterMember2",542}, + {"section3Flags",2090}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Threshold_Or_Distribution_Units",250}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"WRAP",265}, + {"windSpeedTrend1",2545}, + {""}, + {"isRotatedGrid",1045}, + {"swapScanningX",2272}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scanningMode5",2038}, + {""}, {""}, {""}, + {"totalNumberOfClusters",2346}, + {""}, {""}, {""}, {""}, {""}, + {"identificationOfOriginatingGeneratingCentre",988}, + {""}, {""}, {""}, {""}, {""}, + {"selectStepTemplateInterval",2143}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"NUT",190}, + {""}, + {"N1",171}, + {"addEmptySection2",298}, + {""}, + {"falseEasting",860}, + {""}, + {"subLocalDefinitionNumber2",2261}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"integerPointValues",1021}, + {""}, + {"cloudsTitle2Trend2",525}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"coordAveragingTims",590}, + {"_leg_number",292}, + {""}, {""}, {""}, + {"typeOfPacking",2393}, + {""}, + {"localLatitude2",1189}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"secondaryBitmaps",2066}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"PUnset",216}, + {""}, {""}, {""}, {""}, + {"normAtFinalTime",1394}, + {""}, {""}, + {"hourOfAnalysis",969}, + {""}, {""}, + {"unpackedValues",2448}, + {"theHindcastMarsStream",2300}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"section1Flags",2081}, + {""}, {""}, + {"variationOfVisibilityDirection",2476}, + {"Dj",34}, + {"secondaryMissingValueSubstitute",2070}, + {"MonthOfModelVersion",169}, + {""}, {""}, {""}, {""}, + {"variationOfVisibilityDirectionAngle",2477}, + {"secondaryBitmapsCount",2067}, + {""}, {""}, {""}, {""}, + {"unstructuredGridSubtype",2451}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"dateSSTFieldUsed",662}, + {""}, + {"secondOrderValuesDifferentWidths",2058}, + {""}, {""}, {""}, + {"numberOfClusterLowResolution",1431}, + {""}, {""}, + {"md5Section2",1307}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"yearOfAnalysis",2575}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"windDirectionTrend1",2534}, + {""}, {""}, {""}, + {"coordinateFlag2",604}, + {"runwayFrictionCoefficientState3",1957}, + {""}, + {"typeOfAnalysis",2377}, + {""}, {""}, {""}, {""}, + {"scaleFactorOfLowerWavePeriodLimit",1984}, + {""}, {""}, {""}, + {"indexedStorageInternalNodeK",998}, + {""}, + {"numberOfClusterHighResolution",1430}, + {"instrumentType",1020}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"sourceOfGridDefinition",2184}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"totalNumberOfValuesInUnpackedSubset",2358}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"section_4",2137}, + {""}, + {"clusterMember2",541}, + {"firstOrderValues",876}, + {""}, {""}, + {"recentWeather",1852}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValuesOfWaveDirections",2032}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"P1",213}, + {""}, {""}, {""}, {""}, {"endMinuteTrend2",758}, + {"extractDateTimeMinuteEnd",830}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeMinuteStart",832}, + {""}, + {"alternativeRowScanning",307}, + {""}, + {"scaledValueOfAdditionalParameterForReferencePeriod",2004}, + {""}, {""}, + {"variationOfVisibility",2475}, + {""}, {""}, {""}, {""}, + {"coordAveraging0",586}, + {""}, + {"beginDayTrend4",343}, + {""}, + {"gaussianGridName",913}, + {"originatingCentreOfAnalysis",1625}, + {""}, {""}, {""}, {""}, + {"southPoleOnProjectionPlane",2192}, + {""}, {""}, + {"runwayFrictionCoefficientState1",1955}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"extractDateTimeMonthEnd",833}, + {""}, {""}, {""}, + {"scaledValueOfWaveDirectionSequenceParameter",2030}, + {""}, {""}, + {"extractDateTimeMonthStart",835}, + {""}, {""}, + {"scaledValuesOfWaveFrequencies",2033}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"METARstr",156}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberInMixedCoordinateDefinition",1403}, + {"section_6",2139}, + {"localLongitude2",1192}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetFromReferenceOfFirstTime",1575}, + {""}, {""}, {""}, {""}, {""}, + {"dataSubCategory",646}, + {""}, {""}, {""}, {""}, {""}, + {"nameLegacyECMF",1384}, + {""}, {""}, + {"latitudeOfTangencyPoint",1118}, + {""}, {""}, {""}, {""}, + {"rdb_key",1838}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode2",503}, + {""}, {""}, {""}, {""}, + {"subDefinitions1",2254}, {""}, {""}, {""}, - {"typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing",2364}, + {"cloudsTitle1Trend3",521}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"P_INST",218}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endMonthTrend4",764}, + {"localFlagLatestVersion",1185}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"visibilityInKilometresTrend1",2463}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfPointsAlongTheXAxis",1488}, + {""}, {""}, {""}, {""}, {""}, + {"section_04",2126}, + {""}, {""}, + {"minutesAfterReferenceTimeOfDataCutoff",1344}, + {""}, {""}, {""}, + {"latitudeWhereDxAndDyAreSpecified",1124}, + {""}, {""}, + {"marsClass2",1256}, + {"northWestLatitudeOfLPOArea",1399}, + {""}, {""}, {""}, {""}, + {"marsKeywords1",1266}, + {"ls_labeling",1247}, + {""}, {""}, {""}, + {"cloudsTitle3Trend3",531}, + {""}, {""}, {""}, + {"latitudeWhereDxAndDyAreSpecifiedInDegrees",1125}, + {""}, {""}, {""}, + {"scaledValueOfSecondWavelength",2025}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"realPartOf00",1837}, - {"clusterMember6",546}, + {"runwayDepositState3",1921}, + {""}, + {"Sub-Experiment_Identifier",233}, + {""}, {""}, {""}, {""}, + {"GDSPresent",66}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"section11Pointer",2080}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle2Trend4",528}, - {""}, {""}, {""}, - {"changeIndicatorTrend4",427}, + {"cloudsTitle1Trend1",519}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"subLocalDefinition1",2256}, + {"scaledValueOfWaveFrequencySequenceParameter",2031}, + {""}, + {"meanRVR4",1320}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfWaveFrequencySequenceParameters",1543}, + {""}, + {"runwaySideCodeState3",1961}, + {""}, + {"section4Length",2096}, + {""}, {""}, + {"md5Section3",1308}, + {""}, + {"section_06",2128}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"numberOfWaveDirectionSequenceParameters",1540}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfSingularVectorsComputed",1507}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ZLMULT",288}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"nameECMF",1376}, + {"cloudsTitle3Trend1",529}, {""}, - {"hoursAfterReferenceTimeOfDataCutoff",973}, + {"dayOfTheYearDate",673}, {""}, {""}, {""}, + {"runwayDepthOfDepositCodeState4",1926}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongXAxis",1499}, + {"cloudsTitle2Trend3",526}, + {"resolutionAndComponentFlags7",1902}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"visibilityInKilometresTrend4",2509}, + {""}, {""}, {""}, + {"section6Length",2105}, + {""}, {""}, + {"Nj",199}, + {"Ensemble_Identifier",50}, + {""}, + {"tempPressureUnits",2289}, + {"md5Section1",1305}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section_5",2138}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"expandedCrex_scales",793}, + {"scaleFactorOfUpperLimit",1995}, {"extractDateTimeYearEnd",840}, + {""}, {""}, + {"offsetICEFieldsUsed",1576}, + {""}, {""}, {""}, {""}, + {"offsetBeforePL",1569}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"secondaryBitmapsSize",2068}, + {""}, {""}, {""}, + {"numberOfUnexpandedDescriptors",1527}, + {""}, {""}, + {"numberOfBits",1419}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"generalExtended2ordr",915}, + {""}, {""}, + {"combinationOfAttributesOfTile",563}, + {""}, + {"localTablesVersion",1199}, + {""}, {""}, {""}, {""}, + {"numberOfUsedTileAttributes",1531}, + {""}, {""}, + {"scaleFactorOfCentralWaveNumber",1972}, + {"subLocalDefinitionLength1",2258}, + {""}, {""}, {""}, + {"md5Section10",1306}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation1",439}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"disableGrib1LocalSection",710}, - {""}, - {"latitudeFirstInDegrees",1090}, - {""}, - {"scaledValueOfCentralWaveNumber",1984}, - {""}, {""}, - {"offsetValuesBy",1580}, - {""}, {""}, {""}, {""}, - {"section2Used",2062}, - {"longitudeOfReferencePointInDegrees",1220}, - {""}, - {"runwayDepositCodeState4",1899}, - {""}, - {"scaledValueOfLowerWavePeriodLimit",1995}, - {"runwayDesignatorState3",1918}, - {""}, - {"runwayFrictionCodeValueState2",1929}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"legacyGaussSubarea",1128}, - {"scanningMode6",2016}, - {"numberOfBytesPerInteger",1417}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"unitsECMF",2396}, - {""}, {""}, {""}, {""}, - {"numberOfSingularVectorsEvolved",1508}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"definitionFilesVersion",688}, - {""}, {""}, {""}, {""}, - {"marsClass1",1249}, - {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Combination_Number",49}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"clusterMember1",540}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"modelErrorType",1349}, - {"extractDateTimeHourEnd",827}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"expandedCrex_units",794}, {""}, {""}, {""}, {""}, {""}, {""}, - {"getNumberOfValues",917}, - {""}, {""}, {""}, {""}, {""}, - {"endMinuteTrend1",757}, + {"realPartOf00",1849}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsTitle2Trend1",524}, + {""}, {""}, + {"numberOfStepsUsedForClustering",1520}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDepthOfDepositCodeState4",1907}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayFrictionCodeValueState1",1928}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayDepositState1",1919}, + {""}, {""}, {""}, + {"scaleFactorOfLengthOfSemiMinorAxis",1982}, {""}, - {"recentWeather",1840}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Used",138}, - {"unstructuredGridUUID",2410}, - {""}, - {"monthlyVerificationYear",1366}, + {"componentIndex",566}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"localUsePresent",1204}, {""}, {""}, {""}, {""}, - {"numberOfSecondOrderPackedValues",1505}, + {"section5Length",2101}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section_3",2109}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Total_Number_Members_Used",259}, + {"typeOfReferenceDataset",2397}, {""}, {""}, - {"numberOfDaysInClimateSamplingWindow",1437}, - {""}, {""}, - {"scaleFactorOfLengthOfSemiMajorAxis",1961}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"matrixBitmapsPresent",1289}, - {""}, {""}, - {"nameLegacyECMF",1377}, - {""}, {""}, {""}, - {"Date_E4",28}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"md5Section4",1303}, - {""}, {""}, {""}, {""}, - {"numberOfGroupsOfDataValues",1460}, - {""}, {""}, {""}, - {"numberOfPressureLevelsUsedForClustering",1496}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"outerLoopTypeOfTimeIncrement",1621}, - {""}, {""}, {""}, {""}, {""}, - {"reflectivityCalibrationConstant",1861}, - {""}, {""}, {""}, - {"localTablesVersionNumber",1194}, - {"Local_Number_Members_Possible",134}, - {"mask",1279}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfAdditionalParametersForReferencePeriod",1417}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"dateOfIceFieldUsed",659}, - {""}, - {"Total_Number_Members_Possible",258}, - {""}, {""}, {""}, {""}, {""}, - {"templatesMasterDir",2258}, - {"section_03",2098}, - {"pack",1624}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"northLatitudeOfDomainOfTubing",1390}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"eastLongitudeOfDomainOfTubing",733}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unpack",2402}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfWaveFrequencySequence",2366}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"pastTendencyRVR4",1724}, - {"dateOfForecastUsedInLocalTime",658}, - {""}, {""}, {""}, - {"timeOfForecastUsedInLocalTime",2291}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Missing",130}, - {""}, {""}, {""}, {""}, - {"southLatitudeOfDomainOfTubing",2164}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"ceilingAndVisibilityOK",397}, - {""}, {""}, - {"resolutionAndComponentFlags7",1883}, - {"Total_Number_Members_Missing",257}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"extractAreaSouthLatitude",821}, - {"paramIdLegacyECMF",1702}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"offsetSection11",1570}, - {""}, {""}, {""}, {""}, - {"listMembersMissing4",1153}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"cloudsTitle2Trend2",526}, - {""}, {""}, {""}, - {"changeIndicatorTrend2",425}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"probProductDefinition",1781}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"md5Headers",1297}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"observationDiagnostic",1538}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode3",509}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"beginDayTrend3",343}, - {""}, - {"section5Length",2074}, - {""}, {""}, - {"hourOfForecastUsedInLocalTime",968}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"secondaryBitMap",2036}, - {""}, {""}, - {"coordinate2End",595}, - {""}, {""}, {""}, {""}, - {"section5",2073}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayFrictionCodeValueState3",1930}, - {""}, {""}, {""}, - {"timeUnitFlag",2296}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsTitle2Trend1",525}, - {""}, {""}, - {"yearOfForecastUsedInLocalTime",2530}, - {"changeIndicatorTrend1",424}, - {"sizeOfPostAuxiliaryArrayPlusOne",2152}, - {"westLongitudeOfDomainOfTubing",2477}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"meanRVR3",1313}, - {""}, {""}, {""}, - {"earthMajorAxisInMetres",729}, - {"checkInternalVersion",433}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"NC2",178}, - {""}, {""}, {""}, {""}, - {"lengthOf4DvarWindow",1131}, - {""}, - {"laplacianScalingFactorUnset",1085}, - {"runwayDepthOfDepositCodeState2",1905}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation4Trend4",458}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfPointsUsed",1495}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayFrictionCoefficientCodeState4",1935}, - {"variationOfVisibilityTrend4",2442}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"visibilityTrend4",2470}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfEarthMajorAxis",1956}, - {""}, {""}, - {"variationOfVisibilityDirectionTrend4",2438}, - {""}, {""}, - {"scaleFactorOfEarthMinorAxis",1957}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfGridInReference",1457}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"timeIncrementBetweenSuccessiveFields",2288}, - {""}, {""}, {""}, - {"resolutionAndComponentFlags4",1881}, - {""}, {""}, {""}, - {"md5Section5",1304}, - {""}, - {"numberOfBitsForScaledGroupLengths",1412}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"visibilityInKilometresTrend3",2465}, - {""}, {""}, {""}, {""}, {""}, - {"physicalFlag2",1736}, - {"DjGiven",35}, - {""}, {""}, - {"gribMasterTablesVersionNumber",927}, - {""}, {""}, - {"runwayDepthOfDepositCodeState1",1904}, - {""}, {""}, {""}, {""}, - {"horizontalDomainTemplateNumber",963}, - {""}, - {"northWestLongitudeOfLPOArea",1393}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfMajorAxisOfOblateSpheroidEarth",1996}, - {""}, {""}, {""}, - {"SOH",227}, - {""}, {""}, {""}, {""}, {""}, - {"DELETE",24}, - {"scaleFactorOfMinorAxisOfOblateSpheroidEarth",1966}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation3",449}, - {""}, {""}, {""}, - {"latitudeOfReferencePointInDegrees",1104}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"7777",5}, - {""}, - {"longitudeOfThePolePointInDegrees",1231}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"firstLatitudeInDegrees",872}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"NC1",177}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"endMonthTrend2",762}, - {""}, - {"beginHourTrend4",348}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"clusterMember3",543}, - {""}, {""}, - {"padding_grid90_1",1635}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfGeneratingProcess",2342}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"CLNOMA",23}, - {""}, - {"endMinuteTrend3",759}, - {""}, {""}, {""}, {""}, - {"dateOfModelVersion",660}, - {""}, {""}, {""}, - {"timeOfModelVersion",2292}, - {"offsetSection5",1574}, - {""}, {""}, {""}, {""}, - {"section7UniqueIdentifier",2084}, - {""}, {""}, {""}, {""}, - {"padding_local_7_1",1691}, - {""}, - {"flagForNormalOrStaggeredGrid",880}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"physicalFlag1",1735}, - {"widthOfWidths",2483}, - {""}, {""}, {""}, {""}, - {"cloudsTitle2Trend3",527}, - {""}, {""}, {""}, - {"changeIndicatorTrend3",426}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfBytesInLocalDefinition",1415}, - {""}, {""}, {""}, - {"beginMinuteTrend4",352}, - {""}, {""}, {""}, {""}, - {"versionNumOfSharedHeaderMessageFormat",2451}, - {"accuracyMultipliedByFactor",297}, - {""}, {""}, - {"md5Section1",1299}, - {""}, {""}, {""}, {""}, - {"runwayDepositCodeState2",1897}, {"cfNameECMF",418}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"HDF5str",80}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc9_2",1685}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"baseTimeOfThisLeg",339}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"hourOfModelVersion",969}, - {""}, {""}, - {"spacingOfBinsAlongRadials",2172}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"countOfICEFieldsUsed",624}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section4UniqueIdentifier",2072}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation2Trend4",448}, + {"cloudsCode3",508}, {""}, - {"endMonthTrend1",761}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"radiusOfTheEarth",1820}, - {"pastTendencyRVR1",1721}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayFrictionCoefficientCodeState2",1933}, - {"variationOfVisibilityTrend2",2440}, - {""}, {""}, {""}, {""}, - {"yearOfModelVersion",2531}, - {"runwayDepthOfDepositCodeState3",1906}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"NEAREST",179}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwaySideCodeState1",1959}, {""}, {""}, {""}, - {"numberOfUsedTileAttributeCombinationsForTypeOfTile",1520}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfLengthOfSemiMajorAxis",1992}, + {"inputShortDelayedDescriptorReplicationFactor",1017}, + {""}, {""}, {""}, + {"scaledValueOfFirstWavelength",2013}, + {""}, + {"numberOfUsedTileAttributesForTileAttributeCombination",1532}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"secondWavelength",2060}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"variationOfVisibilityDirectionTrend2",2436}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"Date_E2",26}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"listOfWaveFrequencySequenceParameters",1166}, - {""}, {""}, {""}, {""}, {""}, - {"dayOfModelVersion",671}, - {""}, {""}, {""}, {""}, - {"generalExtended2ordr",911}, - {""}, - {"cloudsBase4",474}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"indexingTimeMM",999}, - {"baseDateOfThisLeg",337}, - {"cloudsAbbreviation1Trend4",443}, - {"shortNameLegacyECMF",2137}, - {""}, {""}, - {"runwayDepositCodeState1",1896}, - {"runwayDesignatorRVR4",1915}, + {"dayOfForecastUsedInLocalTime",669}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfSouthernPoleInDegrees",1223}, - {""}, {""}, {""}, {""}, - {"runwayFrictionCoefficientCodeState1",1932}, - {"variationOfVisibilityTrend1",2439}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section_05",2127}, {""}, - {"typeOfWavelengthInterval",2368}, + {"radiusOfTheEarth",1832}, {""}, {""}, {""}, - {"Less_Than_Or_To_Overall_Distribution",121}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"listMembersUsed3",1156}, - {""}, {""}, {""}, {""}, {""}, - {"NH",183}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"padding_loc9_1",1684}, - {"padding_loc7_1",1683}, + {"extractDateTimeHourEnd",827}, + {"numberOfPointsInDomain",1503}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode1",498}, {""}, - {"variationOfVisibilityDirectionTrend1",2435}, + {"YR",279}, {""}, - {"coordinate4OfFirstGridPoint",602}, - {"padding_loc6_1",1682}, - {""}, {""}, {""}, {""}, {""}, - {"experimentVersionNumberOfAnalysis",808}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"padding_loc5_1",1681}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfUsefulPointsAlongXAxis",1523}, - {""}, {""}, {""}, {""}, - {"subdivisionsOfBasicAngle",2232}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfDataPointsExpected",1444}, {""}, {""}, {""}, - {"latitudeOfLastGridPointInDegrees",1101}, + {"SOH",227}, + {""}, + {"dateOfSSTFieldUsed",661}, + {""}, {""}, + {"endStepInHours",772}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endHourTrend4",755}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"qfeUnits",1816}, + {"Model_Identifier",167}, {""}, {""}, - {"listMembersMissing2",1151}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"tileGrouping",2280}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc50_1",1680}, - {""}, {""}, {""}, {""}, - {"visibilityTrend1",2467}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"DayOfModelVersion",29}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsCode2",504}, - {""}, {""}, {""}, {""}, - {"numberOfBytesOfFreeFormatData",1416}, - {""}, {""}, {""}, {""}, {""}, - {"beginMinuteTrend2",350}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"windUnitsTrend4",2504}, - {""}, - {"offsetBeforePV",1560}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetFromOriginToInnerBound",1564}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"md5Section10",1300}, - {""}, {""}, - {"tsectionNumber5",2328}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"addEmptySection2",299}, - {""}, {""}, {""}, - {"pentagonalResolutionParameterM",1728}, - {""}, {""}, {""}, {""}, {""}, - {"Threshold_Or_Distribution_0_no_1_yes",249}, - {"latitudeOfThePolePoint",1114}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded4",494}, - {""}, {""}, {""}, {""}, - {"Original_CodeTable_2_Version_Number",209}, - {""}, {""}, {""}, - {"commonBlock",565}, - {""}, - {"cloudsBaseCoded4Trend4",498}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"coordAveraging2",589}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"beginMinuteTrend1",349}, - {""}, - {"jDirectionIncrementGiven",1063}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation4Trend2",456}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation3Trend4",453}, - {"section6UniqueIdentifier",2080}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"qualityValueAssociatedWithParameter",1811}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayFrictionCoefficientCodeState3",1934}, - {"variationOfVisibilityTrend3",2441}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfEarthMajorAxis",1987}, - {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfEarthMinorAxis",1988}, + {"qnhUnits",1820}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"*********_EXTRA_DATA_***************",4}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"resolutionAndComponentFlags2",1879}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"parameterUnits",1725}, {""}, - {"variationOfVisibilityDirectionTrend3",2437}, + {"jDirectionIncrementInDegrees",1071}, + {""}, + {"DjInMetres",37}, + {""}, + {"section2Length",2085}, + {""}, {""}, {""}, + {"gribTablesVersionNo",932}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDepthOfDepositState4",1911}, + {"numberInMixedCoordinateDefinition",1412}, + {"runwayFrictionCodeValueState4",1950}, + {"spatialVicinityType",2211}, + {"param_value_max",1716}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfSecondOrderPackedValues",1514}, + {""}, {""}, {""}, + {"latitudeOfReferencePoint",1109}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"section_2",2135}, + {"runwayDepthOfDepositCodeState2",1924}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section_11",2107}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"physicalMeaningOfVerticalCoordinate",1749}, {""}, {""}, - {"cloudsBaseCoded1Trend4",483}, + {"presentTrend3",1768}, + {""}, + {"numberOfUsedSpatialTiles",1529}, + {""}, + {"expandedCrex_widths",795}, + {""}, {""}, {""}, + {"extractDateTimeStart",839}, + {"latitudeOfLastGridPoint",1106}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"flagForAnyFurtherInformation",882}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"preBitmapValues",1758}, + {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeSecondEnd",836}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeSecondStart",838}, + {""}, + {"beginDayTrend2",341}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"clusteringDomain",551}, + {""}, {""}, + {"runwayDepositCodeState4",1918}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfDataBinsAlongRadials",1441}, + {""}, + {"paramIdLegacyECMF",1714}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"startStepUnit",2229}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"deleteLocalDefinition",691}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"NC2",177}, + {"extractAreaNorthLatitude",820}, + {""}, {""}, + {"METAR",155}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfSSTFieldUsed",2399}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"widthOfWidths",2532}, + {""}, {""}, {""}, + {"unexpandedDescriptors",2428}, + {""}, {""}, + {"jPointsAreConsecutive",1073}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayDesignatorState4",1938}, + {""}, {""}, + {"section_02",2124}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"jDirectionIncrementGridLength",1064}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"NH",182}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"typeOfProcessedData",2396}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfMinorAxisOfOblateSpheroidEarth",1997}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"resolutionAndComponentFlags6",1882}, + {"iDirectionIncrementGiven",980}, + {""}, {""}, {""}, + {"unexpandedDescriptorsEncoded",2429}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"endGridDefinition",751}, + {"forceStepUnits",889}, + {""}, {""}, {""}, + {"presentTrend1",1766}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"expandedUnits",803}, + {""}, {""}, {""}, {""}, + {"minuteOfStartOfReferencePeriod",1342}, + {""}, {""}, {""}, {""}, {""}, + {"endMonthTrend4",764}, + {""}, {""}, + {"secondOfStartOfReferencePeriod",2055}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"coordAveraging1",588}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation4Trend1",455}, - {"extractDateTimeEnd",826}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"g1conceptsLocalDirAll",906}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"beginHourTrend2",346}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"offsetToEndOf4DvarWindow",1579}, - {"numberInHorizontalCoordinates",1402}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"resolutionAndComponentFlags1",1878}, - {""}, {""}, {""}, - {"endMonthTrend3",763}, + {"meanRVR2",1318}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"md5Section3",1302}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"uuidOfHGrid",2425}, - {""}, {""}, {""}, {""}, - {"numberOfMissingValues",1472}, - {""}, - {"md5GridSection",1296}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"visibilityTrend4",2513}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfContributingSpectralBands",1438}, {""}, {""}, {""}, - {"latitudeOfThePoleOfStretching",1113}, - {"cloudsBase1",459}, + {"runwayFrictionCodeValueState2",1948}, + {"xCoordinateOfOriginOfSectorImage",2560}, + {""}, + {"expandBy",790}, + {""}, {""}, {""}, {""}, + {"AA",6}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"experimentVersionNumber",805}, + {""}, {""}, {""}, {""}, + {"clusterMember3",542}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"coordinate3OfFirstGridPoint",599}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginMinuteTrend3",351}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Possible_E4",137}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Local_Number_Members_Missing_E4",133}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"INBITS",88}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"runwayDepositCodeState3",1898}, + {"Latin2InDegrees",115}, {""}, {""}, {""}, - {"hook_post_meta_data",958}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"cloudsBaseCoded4Trend2",496}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"pastTendencyRVR3",1723}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Identifier_E4",53}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation2Trend2",446}, - {""}, {""}, {""}, - {"beginHourTrend1",345}, - {""}, {""}, {""}, - {"countOfGroupLengths",623}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section3UniqueIdentifier",2067}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"weightAppliedToClimateMonth1",2475}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"changeIndicatorTrend4",426}, {""}, - {"sourceSinkChemicalPhysicalProcess",2158}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"radiusOfClusterDomain",1819}, + {"listMembersMissing4",1159}, {""}, - {"cloudsBaseCoded4Trend1",495}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"recentWeatherTry",1841}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation1Trend2",441}, - {""}, {""}, {""}, {""}, - {"runwayDesignatorRVR2",1913}, - {"cloudsBaseCoded1Trend2",481}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Minute_E4",162}, - {""}, - {"section_5",2111}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Date_E3",27}, - {""}, - {"latitudeOfSouthEastCornerOfArea",1105}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfParametersUsedForClustering",1480}, - {""}, {""}, {""}, - {"listMembersUsed2",1155}, + {"visibilityInKilometresTrend2",2507}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded3Trend4",493}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"endMinuteTrend3",759}, {""}, {""}, {""}, {""}, - {"intervalBetweenTimes",1025}, - {"cloudsCode4Trend4",518}, - {""}, {""}, - {"numberOfPointsAlongYAxis",1492}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded1",479}, - {""}, {""}, {""}, {""}, - {"cloudsAbbreviation2Trend1",445}, + {"iDirectionIncrementGridLength",981}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded1Trend1",480}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"section_05",2100}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"endHourTrend2",753}, - {"superblockExtensionAddress",2234}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_local11_1",1686}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"visibilityTrend3",2469}, - {""}, {""}, - {"beginYearTrend4",360}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"uvRelativeToGrid",2427}, - {""}, {""}, {""}, {""}, - {"cfVarNameLegacyECMF",422}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Number_Combination_Ensembles_1_none",204}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation1Trend1",440}, - {""}, {""}, {""}, {""}, - {"runwayDesignatorRVR1",1912}, - {""}, {""}, {""}, {""}, {""}, - {"listMembersMissing3",1152}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsCode1Trend4",503}, - {"YRInMetres",281}, + {"horizontalDimensionProcessed",965}, {""}, - {"windUnitsTrend2",2502}, + {"ZLMULT",287}, + {"getNumberOfValues",921}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Product_Identifier",221}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"subLocalDefinitionNumber1",2260}, + {""}, {""}, {""}, {""}, + {"************_PRODUCT_***************",3}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"NRj",188}, + {""}, {""}, {""}, {""}, + {"uuidOfVGrid",2469}, + {""}, + {"referenceForGroupWidths",1864}, + {""}, + {"localLatitude1",1188}, + {""}, + {"listMembersUsed2",1161}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"baseTimeOfThisLeg",338}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"indexingTimeMM",1003}, + {""}, + {"numberOfRadarSitesUsed",1506}, + {"codedNumberOfGroups",559}, + {""}, {""}, {""}, + {"section9UniqueIdentifier",2118}, + {"WRAPstr",265}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section3Length",2091}, + {""}, {""}, {""}, + {"typeOfWavelengthInterval",2411}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"satelliteID",1966}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"runwayDepthOfDepositCodeState3",1925}, + {"runwayFrictionCoefficientCodeState4",1954}, + {""}, + {"section11Length",2079}, + {"templatesMasterDir",2295}, + {"referenceForGroupLengths",1863}, {"endMark",756}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginMonthTrend4",356}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Possible_E2",135}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Local_Number_Members_Missing_E2",131}, - {"runwayExtentOfContaminationState4",1927}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"typeOfWaveDirectionSequence",2365}, - {""}, {""}, - {"mixedCoordinateDefinition",1345}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_loc190_1",1650}, - {""}, {""}, {""}, {""}, {""}, - {"************_EXPERIMENT_************",2}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Identifier_E2",51}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsBaseCoded4Trend3",497}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endHourTrend1",752}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"windGustTrend4",2493}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsAbbreviation3Trend2",451}, - {""}, - {"missingValueManagementUsed",1342}, + {"coordinateFlag1",603}, {""}, {""}, {""}, {""}, {""}, {""}, - {"coordAveraging3",590}, + {"runwayDesignatorState2",1936}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc4_2",1679}, + {"sourceSinkChemicalPhysicalProcess",2185}, + {"localTablesVersionNumber",1200}, + {""}, + {"pentagonalResolutionParameterK",1739}, + {""}, + {"gribMasterTablesVersionNumber",931}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"verificationYear",2489}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"secondWavelengthInNanometres",2062}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfControlForecastTube",1439}, + {"crraSuiteID",630}, + {""}, {""}, + {"clusterMember1",539}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Model_Additional_Information",166}, + {""}, {""}, {""}, {""}, {""}, + {"section8UniqueIdentifier",2115}, + {"section1Length",2082}, + {""}, + {"probabilityType",1793}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation4Trend3",457}, + {"totalNumberOfGridPoints",2351}, + {""}, + {"horizontalDomainTemplate",966}, + {""}, {""}, {""}, + {"endMinuteTrend1",757}, + {"baseDateOfThisLeg",336}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"versionNumOfSharedHeaderMessageFormat",2494}, + {""}, {""}, {""}, + {"cloudsAbbreviation4",453}, + {""}, {""}, {""}, {""}, {""}, + {"runwayDepthOfDepositCodeState1",1923}, + {""}, {""}, {""}, {""}, + {"mixedCoordinateFieldFlag",1352}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_sec1_loc",1703}, + {""}, + {"numberIncludedInAverage",1415}, + {""}, {""}, {""}, {""}, {""}, + {"latitudeOfSubSatellitePointInDegrees",1117}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"pentagonalResolutionParameterJ",1738}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"definitionFilesVersion",688}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section2Used",2089}, + {"transportModelUsed",2363}, + {""}, {""}, + {"numberMissingFromAveragesOrAccumulations",1416}, + {"modelErrorType",1355}, + {""}, {""}, {""}, {""}, + {"localLongitude1",1191}, + {""}, {""}, + {"changeIndicatorTrend2",424}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"latitudeOfThePolePoint",1120}, + {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfLowerWavePeriodLimit",2017}, + {"longitudeLastInDegrees",1211}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"probabilityTypeName",1794}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"md5GridSection",1302}, + {""}, {""}, {""}, {""}, + {"secondaryBitMap",2063}, + {"runwayDepositCodeState2",1916}, + {""}, {""}, {""}, + {"numberOfBytesPerInteger",1426}, + {""}, {""}, {""}, {""}, + {"beginHourTrend4",347}, + {""}, + {"jScansNegatively",1074}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"HDF5",78}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"marsClass1",1255}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"extractAreaEastLongitude",817}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"southEastLongitudeOfVerficationArea",2189}, + {"disableGrib1LocalSection",710}, + {"listMembersUsed3",1162}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"runwayFrictionCodeValueState3",1949}, + {"numberOfGroups",1468}, + {"numberOfSingularVectorsEvolved",1517}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"runwayFrictionCoefficientCodeState2",1952}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Date_E4",28}, + {""}, {""}, {""}, + {"dateOfModelVersion",659}, + {""}, {""}, {""}, + {"timeOfModelVersion",2334}, + {""}, {""}, {""}, + {"inputOverriddenReferenceValues",1015}, + {""}, + {"beginMinuteTrend4",351}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"jScansPositively",1075}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"monthlyVerificationYear",1373}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"gts_TTAAii",952}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"qualityControlIndicator",1822}, + {""}, {""}, {""}, {""}, {""}, + {"latitudeFirstInDegrees",1096}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"endMonthTrend2",762}, + {"runwayFrictionCodeValueState1",1947}, + {""}, {""}, {""}, {""}, + {"southEastLongitudeOfLPOArea",2188}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"postAuxiliaryArrayPresent",1755}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Y2",278}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"runwayDepthOfDepositState2",1909}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"presentWeather2Present",1764}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"windUnitsTrend1",2501}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"setToMissingIfOutOfRange",2131}, + {"Latin1InDegrees",113}, {""}, {""}, {""}, {""}, {""}, {""}, - {"resolutionAndComponentFlags3",1880}, + {"matrixBitmapsPresent",1295}, + {""}, {""}, {""}, {""}, + {"variationOfVisibilityTrend4",2485}, + {""}, {""}, {""}, {""}, + {"Ensemble_Combination_Number",49}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"hourOfModelVersion",973}, + {""}, {""}, {""}, + {"section_3",2136}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"listMembersMissing2",1157}, + {""}, {""}, {""}, + {"mBasicAngle",1252}, + {""}, + {"variationOfVisibilityDirectionTrend4",2481}, + {"runwayDesignatorState3",1937}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetAfterData",1560}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetValuesBy",1590}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"yearOfModelVersion",2580}, + {""}, {""}, + {"beginDayTrend3",342}, + {""}, {""}, {""}, {""}, {""}, + {"typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing",2407}, + {""}, {""}, + {"physicalFlag2",1748}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"unstructuredGridUUID",2453}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"longitudeOfThePolePointInDegrees",1237}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfReferencePointInDegrees",1226}, + {""}, {""}, + {"numberOfSingularVectorsComputed",1516}, + {""}, + {"countOfICEFieldsUsed",623}, + {""}, + {"dayOfModelVersion",670}, + {"scaledValueOfUpperLimit",2028}, + {""}, {""}, {""}, {""}, + {"latitudeOfThePoleOfStretching",1119}, + {""}, {""}, + {"runwayDesignatorState1",1935}, + {""}, {""}, {""}, + {"shortNameLegacyECMF",2164}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"checkInternalVersion",432}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"reflectivityCalibrationConstant",1873}, + {""}, {""}, + {"scaledValueOfCentralWaveNumber",2005}, + {""}, {""}, {""}, + {"changeIndicatorTrend3",425}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"beginMinuteTrend2",349}, + {""}, {""}, {""}, {""}, + {"section_03",2125}, + {""}, {""}, + {"numberOfPressureLevelsUsedForClustering",1505}, + {"isCavok",1032}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsBase4",473}, + {""}, {""}, + {"accuracyMultipliedByFactor",296}, + {""}, + {"projTargetString",1807}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfLengthOfSemiMinorAxis",2015}, + {"ITERATOR",89}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfSouthernPoleInDegrees",1229}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"section_1",2132}, + {"legacyGaussSubarea",1134}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfGroupsOfDataValues",1469}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"projSourceString",1805}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"lengthOf4DvarWindow",1137}, + {"cloudsAbbreviation2",443}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayDepthOfDepositState4",1930}, + {""}, {""}, {""}, + {"beginDayTrend1",340}, + {"commonBlock",564}, + {"meanRVR3",1319}, + {""}, + {"typeOfWaveFrequencySequence",2409}, + {""}, {""}, {""}, {""}, + {"changeIndicatorTrend1",423}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"variationOfVisibilityTrend2",2483}, + {""}, + {"padding_local40_1",1700}, + {""}, {""}, + {"resolutionAndComponentFlags4",1900}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayFrictionCoefficientCodeState3",1953}, + {""}, + {"northLatitudeOfDomainOfTubing",1398}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"WRAP",264}, + {"eastLongitudeOfDomainOfTubing",733}, + {""}, + {"visibilityInKilometresTrend3",2508}, + {""}, + {"NC1",176}, + {"variationOfVisibilityDirectionTrend2",2479}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfTheSouthernPoleOfProjection",1238}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"DayOfModelVersion",29}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"southLatitudeOfDomainOfTubing",2191}, + {""}, {""}, {""}, {""}, {""}, + {"dateOfIceFieldUsed",658}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"beginHourTrend2",345}, + {""}, + {"section7UniqueIdentifier",2111}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"resolutionAndComponentFlags6",1901}, + {""}, {""}, + {"section_01",2123}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"coordinate4OfFirstGridPoint",601}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayFrictionCoefficientCodeState1",1951}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"dateOfForecastUsedInLocalTime",657}, + {""}, {""}, {""}, + {"timeOfForecastUsedInLocalTime",2333}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Date_E2",26}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"meanRVR1",1317}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"numberOfPointsAlongASide",1494}, + {"scaleFactorOfMajorAxisOfOblateSpheroidEarth",1985}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"numberOfPointsAlongXAxisInCouplingArea",1500}, + {""}, {""}, {""}, + {"cloudsBaseCoded4",493}, + {""}, {""}, {""}, {""}, + {"matchAerosolBinNumber",1290}, + {"numberOfPointsAlongAMeridian",1492}, + {""}, {""}, {""}, {""}, + {"cloudsBaseCoded4Trend4",497}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"spatialVicinityProcessingArgument2",2210}, + {"visibilityInKilometresTrend1",2506}, + {"westLongitudeOfDomainOfTubing",2526}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"sizeOfPostAuxiliaryArray",2178}, + {""}, {""}, {""}, {""}, + {"cloudsCode4Trend4",517}, + {""}, {""}, + {"hourOfForecastUsedInLocalTime",972}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"swapScanningAlternativeRows",2269}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"endHourTrend4",755}, + {""}, {""}, {""}, {""}, + {"visibilityTrend2",2511}, + {""}, + {"extractDateTimeEnd",826}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfEarthMajorAxis",1975}, + {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfEarthMinorAxis",1976}, + {""}, + {"earthMajorAxisInMetres",729}, + {"secondWavelengthInMetres",2061}, + {""}, {""}, + {"offsetSection11",1580}, + {"extractAreaSouthLatitude",821}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetToEndOf4DvarWindow",1589}, + {""}, + {"yearOfForecastUsedInLocalTime",2579}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"beginMinuteTrend3",350}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"outerLoopTypeOfTimeIncrement",1631}, + {""}, {""}, + {"probProductDefinition",1792}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"numberOfPointsAlongSecondAxis",1496}, + {"runwayDepositCodeState3",1917}, + {""}, + {"beginMonthTrend4",355}, + {""}, {""}, {""}, {""}, + {"totalAerosolBinsNumbers",2342}, + {""}, + {"numberOfDaysInClimateSamplingWindow",1446}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather2Present",1775}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"DjGiven",35}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"timeUnitFlag",2338}, + {""}, {""}, + {"flagForNormalOrStaggeredGrid",884}, + {""}, {""}, {""}, {""}, {""}, + {"beginMinuteTrend1",348}, + {"variationOfVisibilityTrend3",2484}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongAParallel",1493}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"variationOfVisibilityDirectionTrend3",2480}, + {"numberOfSpatialVicinityValues",1518}, + {""}, + {"latitudeOfReferencePointInDegrees",1110}, + {""}, {""}, + {"laplacianScalingFactorUnset",1091}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"pastTendencyRVR4",1736}, + {"numberInHorizontalCoordinates",1411}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"horizontalDomainTemplateNumber",967}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Used",137}, + {""}, {""}, + {"cloudsBaseCoded4Trend2",495}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfLevelECMF",2391}, + {""}, {""}, {""}, {""}, + {"Total_Number_Members_Used",258}, + {""}, {""}, {""}, {""}, {""}, + {"variationOfVisibilityTrend1",2482}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"endMonthTrend3",763}, + {""}, {""}, {""}, + {"versionNumberOfSuperblock",2497}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode4Trend2",515}, + {"runwayDepthOfDepositState2",1928}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"numberOfUsedTileAttributeCombinationsForTypeOfTile",1530}, + {"runwayDepositCodeState1",1915}, + {""}, {""}, {""}, {""}, + {"typeOfGeneratingProcess",2385}, + {""}, + {"variationOfVisibilityDirectionTrend1",2478}, + {""}, {""}, + {"constantAntennaElevationAngle",581}, + {""}, + {"resolutionAndComponentFlags2",1898}, + {""}, + {"firstLatitudeInDegrees",873}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"numberOfGridInReference",1466}, + {"Local_Number_Members_Possible",133}, + {""}, {""}, {""}, + {"numberOfBitsForScaledGroupLengths",1421}, + {""}, {""}, {""}, {""}, + {"visibilityTrend3",2512}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"listMembersMissing3",1158}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Total_Number_Members_Possible",257}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"ccsdsCompressionOptionsMask",394}, - {"paramIdECMF",1701}, - {""}, {""}, {""}, - {"cloudsBaseCoded1Trend3",482}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Original_Parameter_Identifier",211}, + {""}, {""}, {""}, + {"numberOfMissingValues",1481}, + {""}, {""}, + {"uuidOfHGrid",2468}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"numberOfBytesInLocalDefinition",1424}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded3Trend2",491}, + {"visibilityTrend1",2510}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetBBitmap",1553}, + {"numberOfPointsUsed",1504}, + {""}, {""}, + {"listOfWaveFrequencySequenceParameters",1172}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ZLBASE",287}, + {"hoursAfterReferenceTimeOfDataCutoff",977}, + {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Missing",129}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"typeOfLevelECMF",2348}, - {""}, {""}, {""}, - {"padding_sec4_1",1697}, - {""}, {""}, {""}, {""}, - {"cloudsCode4Trend2",516}, - {""}, {""}, - {"padding_loc19_2",1655}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"presentWeather1Present",1759}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc18_2",1649}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"is_chemical_srcsink",1050}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation3Trend1",450}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"cloudsBaseCoded3Trend1",490}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"setPackingType",2130}, - {""}, {""}, - {"endYearTrend4",778}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Y1",276}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"beginHourTrend3",347}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"md5Section2",1301}, - {""}, {""}, - {"cloudsCode4Trend1",515}, - {""}, {""}, - {"runwayDepthOfDepositState1",1908}, - {""}, - {"typicalYearOfCentury",2380}, - {"cloudsBase3",469}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"isCavok",1028}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"clusterMember5",545}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode1Trend2",501}, + {"Total_Number_Members_Missing",256}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"spatialVicinityValue",2212}, + {""}, + {"endMonthTrend1",761}, + {""}, {""}, + {"timeIncrementBetweenSuccessiveFields",2330}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"pentagonalResolutionParameterM",1740}, + {""}, {""}, {""}, {""}, {""}, + {"spatialVicinityProcessingArgument1",2209}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc43",1689}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"section4UniqueIdentifier",2099}, + {"typeOfIntervalForFirstAndSecondWavelength",2389}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetBSection6",1555}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetBeforeBitmap",1557}, + {"ceilingAndVisibilityOK",397}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeDayStart",825}, + {"latitudeOfLastGridPointInDegrees",1107}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather3Present",1780}, {""}, {""}, - {"runwayExtentOfContaminationState2",1925}, + {"cloudsAbbreviation3",448}, + {""}, {""}, {""}, + {"section6UniqueIdentifier",2107}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"physicalFlag1",1747}, + {""}, {""}, + {"endHourTrend2",753}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"coordinate3OfFirstGridPoint",598}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"windUnitsTrend4",2553}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"ECMWF",45}, + {""}, {""}, {""}, {""}, {""}, + {"observationDiagnostic",1548}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBaseCoded1Trend4",482}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"paramIdECMF",1712}, + {""}, {""}, + {"presentWeather1Present",1770}, + {""}, {""}, {""}, {""}, + {"cloudsBaseCoded4Trend3",496}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"beginHourTrend3",346}, + {""}, {""}, {""}, + {"section5UniqueIdentifier",2103}, + {""}, + {"sizeOfPostAuxiliaryArrayPlusOne",2179}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"cloudsCode1Trend4",502}, + {"cloudsBaseCoded3Trend4",492}, + {""}, {""}, + {"is_chemical_srcsink",1056}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"cloudsCode4Trend3",516}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Minute_E4",161}, + {""}, {""}, + {"recentWeatherTry",1853}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode3Trend4",512}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation4Trend4",457}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"altitudeOfTheCameraFromTheEarthsCentreMeasuredInUnitsOfTheEarthsRadius",308}, + {""}, {""}, {""}, + {"Date_E3",27}, + {"cloudsAbbreviation1",438}, + {""}, + {"cloudsBaseCoded4Trend1",494}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase2",463}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfBytesOfFreeFormatData",1425}, + {""}, {""}, {""}, + {"cloudsBaseCoded2Trend4",487}, + {""}, + {"cloudsCode4Trend1",514}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsCode2Trend4",507}, + {""}, {""}, {""}, {""}, {""}, + {"superblockExtensionAddress",2268}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"ICPLSIZE",85}, + {"beginHourTrend1",344}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode3Trend4",513}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"hoursAfterDataCutoff",972}, - {""}, - {"Local_Number_Members_Possible_E3",136}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Local_Number_Members_Missing_E3",132}, - {""}, {""}, - {"scanningMode5",2015}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"pastTendencyRVR2",1722}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"skipExtraKeyAttributes",2155}, - {""}, {""}, {""}, {""}, {""}, - {"padding_loc18_1",1648}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsCode1Trend1",500}, - {""}, - {"scaleFactorOfUpperWavePeriodLimit",1975}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Identifier_E3",52}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"padding_local1_1",1687}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"runwayExtentOfContaminationState1",1924}, - {""}, {""}, - {"padding_grid4_1",1632}, + {"offsetBSection6",1565}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section5UniqueIdentifier",2076}, - {""}, - {"cloudsAbbreviation2Trend3",447}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc10_1",1636}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"RVR4_1",226}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Minute_E2",160}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ICPLSIZE",86}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather3Present",1769}, - {""}, {""}, {""}, - {"XpInGridLengths",275}, - {""}, - {"padding_local_35",1690}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"beginMonthTrend1",353}, - {"cloudsAbbreviation1Trend3",442}, - {""}, {""}, {""}, {""}, - {"runwayDesignatorRVR3",1914}, - {""}, {""}, {""}, - {"versionNumberOfSuperblock",2454}, - {""}, {""}, - {"cloudsBaseCoded3",489}, - {""}, {""}, {"RENAME",222}, {""}, {""}, {""}, - {"NG",182}, - {""}, {""}, {""}, - {"cloudsBaseCoded3Trend3",492}, - {""}, {""}, {""}, {""}, - {"extractAreaLongitudeRank",819}, - {""}, {""}, {""}, {""}, - {"numberOfGridUsed",1458}, - {""}, {""}, {""}, - {"numberOfReforecastYearsInModelClimate",1500}, + {"runwayDesignatorRVR4",1934}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Time_Range_One_E4",253}, + {""}, {""}, {""}, {""}, + {"numberOfUsefulPointsAlongXAxis",1533}, + {""}, {""}, {""}, + {"Y2",277}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"cloudsBaseCoded1Trend2",480}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"cloudsCode1Trend2",500}, + {"cloudsBaseCoded3Trend2",490}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"northWestLongitudeOfVerficationArea",1402}, + {""}, {""}, {""}, + {"runwayExtentOfContaminationState4",1946}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"scaleFactorOfLengthOfSemiMajorAxis",1981}, + {"latitudeOfTheSouthernPoleOfProjection",1122}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeOfThePolePointInDegrees",1121}, + {""}, {""}, + {"cloudsCode3Trend2",510}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation2Trend4",447}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"intervalBetweenTimes",1029}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode4Trend3",517}, + {"radiusOfClusterDomain",1831}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"latitudeOfThePolePointInDegrees",1115}, - {""}, {""}, {""}, {""}, {""}, - {"Extra_Data_FreeFormat_0_none",55}, - {""}, {""}, - {"visibilityTrend2",2468}, - {""}, {""}, {""}, {""}, {""}, - {"beginYearTrend2",358}, - {""}, {""}, - {"ccsdsBlockSize",393}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"bufrHeaderSubCentre",383}, + {"cloudsBaseCoded2",483}, {""}, - {"NB",175}, - {""}, {""}, {""}, {""}, {""}, - {"listOfWaveDirectionSequenceParameters",1165}, + {"offsetBeforePV",1570}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ECMWF",45}, + {"cloudsBaseCoded2Trend2",485}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsBase3",468}, + {""}, {""}, {""}, {""}, {""}, + {"beginYearTrend4",359}, + {""}, {""}, {""}, + {"northWestLongitudeOfLPOArea",1401}, {""}, {""}, - {"latitudeOfTheSouthernPoleOfProjection",1116}, + {"YRInMetres",280}, + {""}, {""}, + {"offsetBSection5",1564}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"CLNOMA",23}, + {"scaledValueOfMajorAxisOfOblateSpheroidEarth",2018}, + {"padding_loc9_2",1696}, + {""}, {""}, {""}, {""}, + {"runwayDepthOfDepositState3",1929}, + {"cloudsCode2Trend2",505}, + {""}, {""}, + {"typicalYear2",2422}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"cloudsBase1",458}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"resolutionAndComponentFlags3",1899}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_local_7_1",1702}, + {""}, {""}, {""}, + {"numberOfParametersUsedForClustering",1489}, + {""}, {""}, {""}, {""}, {""}, + {"windUnitsTrend2",2551}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"tileGrouping",2321}, + {"INBITS",87}, + {""}, + {"oneMinuteMeanMaximumRVR4",1600}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section3UniqueIdentifier",2094}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfEarthMajorAxis",2008}, + {""}, {""}, {""}, {""}, + {"beginMonthTrend2",353}, + {"scaledValueOfEarthMinorAxis",2009}, + {""}, {""}, {""}, {""}, + {"typeOfWaveDirectionSequence",2408}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"scaleFactorOfMinorAxisOfOblateSpheroidEarth",1986}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayExtentOfContaminationState2",1944}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"setPackingType",2157}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Minute_E2",159}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation4Trend2",455}, + {""}, + {"uvRelativeToGrid",2470}, + {""}, {""}, + {"experimentVersionNumberOfAnalysis",808}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayDepthOfDepositState1",1927}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetFromOriginToInnerBound",1574}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"pastTendencyRVR2",1734}, + {""}, {""}, {""}, + {"resolutionAndComponentFlags1",1897}, + {""}, + {"FMULTE",64}, + {""}, + {"cloudsBaseCoded1Trend3",481}, + {""}, {""}, + {"jDirectionIncrementGiven",1069}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"coordAveraging2",588}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBaseCoded3",488}, + {""}, {""}, {""}, + {"extractAreaLongitudeRank",819}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsCode1Trend3",501}, + {"cloudsBaseCoded3Trend3",491}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"endHourTrend3",754}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBaseCoded1",478}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsCode3Trend3",511}, + {""}, {""}, {""}, {""}, + {"cloudsBaseCoded1Trend1",479}, + {"cloudsAbbreviation3Trend4",452}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"altitudeOfTheCameraFromTheEarthsCentreMeasuredInUnitsOfTheEarthsRadius",309}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"runwayDesignatorRVR2",1932}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"jDirectionIncrementGridLength",1070}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"cloudsCode1Trend1",499}, + {"cloudsBaseCoded3Trend1",489}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc30_2",1674}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"biFourierPackingModeForAxes",363}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"************_ENSEMBLE_**************",1}, - {""}, {""}, - {"cloudsCode1Trend3",502}, + {"cloudsBaseCoded2Trend3",486}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_sec3_1",1696}, - {"padding_grid1_2",1630}, - {""}, {""}, {""}, - {"cloudsCode3Trend2",511}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"windUnitsTrend3",2503}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayExtentOfContaminationState3",1926}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc3_1",1678}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"BUFR",18}, - {"windGustTrend2",2491}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc38_1",1677}, - {""}, {""}, {""}, - {"beginYearTrend1",357}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode3Trend1",510}, - {""}, {""}, {""}, - {"numberOfBitsContainingEachPackedValue",1411}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"padding_local1_31",1688}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation3Trend3",452}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"RVR2_1",224}, + {"countOfGroupLengths",622}, {""}, {""}, {""}, {""}, - {"padding_loc30_1",1673}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"unusedBitsInBitmap",2411}, + {"Threshold_Or_Distribution_Units",249}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"Original_CodeTable_2_Version_Number",209}, + {""}, {""}, {""}, {""}, + {"cloudsCode3Trend1",509}, + {""}, + {"beginMonthTrend3",354}, + {""}, {""}, {""}, + {"cloudsAbbreviation1Trend4",442}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode2Trend3",506}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"latitudeOfSouthEastCornerOfArea",1111}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsAbbreviation2Trend2",445}, + {""}, {""}, {""}, {""}, {""}, + {"beginMonthTrend1",352}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"padding_local_35",1701}, + {"numberOfPointsAlongFirstAxis",1495}, + {""}, + {"cloudsBaseCoded2Trend1",484}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"padding_grid90_1",1645}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"endHourTrend1",752}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"ccsdsBlockSize",393}, + {""}, {""}, {""}, {""}, + {"ZLBASE",286}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_grid1_1",1629}, - {""}, {""}, {""}, - {"runwayDepthOfDepositState3",1910}, + {"cloudsCode2Trend1",504}, + {""}, {""}, {""}, {""}, {""}, + {"pastTendencyRVR3",1735}, + {""}, {""}, {""}, {""}, {""}, + {"beginYearTrend2",357}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayExtentOfContaminationState3",1945}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TYPE_OF",246}, + {"pastTendencyRVR1",1733}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"isCavokTrend4",1036}, + {""}, {""}, {""}, {""}, + {"numberOfBitsContainingEachPackedValue",1420}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Hour_E4",84}, - {""}, {""}, {""}, - {"oneMinuteMeanMaximumRVR4",1590}, + {"missingValueManagementUsed",1348}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"oneMinuteMeanMaximumRVR2",1598}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded2Trend4",488}, + {"runwayExtentOfContaminationState1",1943}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"spacingOfBinsAlongRadials",2199}, + {""}, + {"extractDateTimeDayStart",825}, + {"mixedCoordinateDefinition",1351}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Missing_E4",132}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetBBitmap",1563}, + {""}, {""}, {""}, {""}, + {"endYearTrend4",778}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongTheXAxis",1497}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"windGustTrend4",2542}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"typicalYearOfCentury",2423}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"listOfWaveDirectionSequenceParameters",1171}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Hour_E4",83}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc4_2",1690}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TYPE_FF",244}, - {"Time_Range_One_E2",251}, + {"Y1",275}, + {""}, {""}, {""}, {""}, {""}, + {"weightAppliedToClimateMonth1",2524}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"RVR1_1",223}, - {""}, {""}, - {"P_TACC",219}, + {"CCCC",20}, + {""}, {""}, {""}, {""}, + {"section_11",2134}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"subdivisionsOfBasicAngle",2266}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfUpperWavePeriodLimit",1996}, + {""}, {""}, {""}, {""}, + {"numberOfReforecastYearsInModelClimate",1509}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation3Trend2",450}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"Number_Combination_Ensembles_1_none",204}, + {""}, {""}, {""}, + {"windUnitsTrend3",2552}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"unitsLegacyECMF",2441}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unitsLegacyECMF",2398}, - {""}, {""}, {""}, {"extractAreaLatitudeRank",818}, - {"windGustTrend1",2490}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"TYPE_FX",245}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfPointsAlongYAxisInCouplingArea",1493}, {""}, {""}, {""}, - {"endYearTrend2",776}, - {"ceilingAndVisibilityOKTrend4",401}, + {"offsetBeforeBitmap",1567}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation1Trend2",440}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Missing_E2",130}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"g1conceptsLocalDirAll",910}, + {""}, {""}, {""}, {""}, + {"Minute_E3",160}, + {""}, + {"NG",181}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"HourOfModelVersion",80}, + {""}, {""}, {""}, + {"cloudsAbbreviation4Trend3",456}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"Ensemble_Identifier_E4",53}, + {""}, {""}, {""}, {""}, + {"padding_loc9_1",1695}, + {"padding_loc7_1",1694}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc6_1",1693}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"scaledValueOfLengthOfSemiMajorAxis",2014}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"NB",174}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"coordAveraging3",589}, + {""}, {""}, {""}, + {"FMULTM",65}, + {""}, {""}, {""}, {""}, {""}, + {"windUnitsTrend1",2550}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"qualityValueAssociatedWithParameter",1823}, + {"************_EXPERIMENT_************",2}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"setToMissingIfOutOfRange",2158}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase2",464}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"FMULTE",64}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"isCavokTrend4",1032}, + {"padding_loc5_1",1692}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode3Trend3",512}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"rootGroupSymbolTableEntry",1887}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfUpperWavePeriodLimit",2006}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ICEFieldsUsed",85}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"TYPE_OR",247}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfBitsUsedForTheScaledGroupLengths",1414}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endYearTrend1",775}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_grid3_1",1631}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"isCavokTrend2",1034}, + {""}, {""}, {""}, {""}, {""}, + {"hook_post_meta_data",962}, {""}, {""}, - {"setBitsPerValue",2126}, + {"runwayDesignatorRVR3",1933}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Combinat_Number_0_none_E4",48}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation4Trend1",454}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"bufrHeaderSubCentre",383}, + {"LSTCUM",98}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"cfNameLegacyECMF",419}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginMonthTrend3",355}, + {"TYPE_OF",245}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ICEFieldsUsed",84}, + {""}, {""}, {""}, {""}, + {"coordAveraging1",587}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"RVR3_1",225}, + {"endYearTrend2",776}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded2",484}, + {"skipExtraKeyAttributes",2182}, {""}, {""}, {""}, - {"Minute_E3",161}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded2Trend2",486}, - {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation2Trend3",446}, + {"scaledValueOfMinorAxisOfOblateSpheroidEarth",2019}, + {"TYPE_FF",243}, + {""}, + {"windGustTrend2",2540}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc50_1",1691}, + {""}, {""}, + {"Ensemble_Identifier_E2",51}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {"experimentVersionNumber2",807}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Time_Range_One_E3",252}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsBaseCoded2Trend1",485}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"padding_loc17_2",1647}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"beginYearTrend3",359}, - {""}, {""}, {""}, - {"numberOfVGridUsed",1525}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TYPE_PF",248}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"experimentVersionNumber1",806}, + {""}, {""}, {""}, {""}, + {"Hour_E2",81}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode2Trend4",508}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"beginYearTrend3",358}, + {"runwayDesignatorRVR1",1931}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc14_2",1644}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"LSTCUM",99}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc13_4",1641}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"FMULTM",65}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typicalYear2",2379}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"CCCC",20}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"windGustTrend3",2492}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"Ensemble_Combinat_Number_0_none_E2",46}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc192_1",1654}, - {""}, {""}, {""}, {""}, {""}, - {"padding_grid50_1",1633}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"runwayExtentOfContaminationCodeState4",1923}, + {"oneMinuteMeanMinimumRVR4",1604}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeDayEnd",823}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"HourOfModelVersion",81}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Hour_E2",82}, - {""}, {""}, {""}, - {"oneMinuteMeanMaximumRVR2",1588}, - {""}, {""}, {""}, - {"cloudsBase4Trend4",478}, - {"oneMinuteMeanMinimumRVR4",1594}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_sec2_2",1694}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"HDF5",79}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc14_1",1643}, - {""}, {""}, - {"cloudsBaseCoded2Trend3",487}, - {""}, {""}, {""}, {""}, {""}, - {"padding_loc191_1",1651}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"listOfUsedTileAttributesInCombination",1164}, - {""}, - {"padding_loc2_2",1672}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc29_2",1669}, - {""}, {""}, {""}, {""}, {""}, - {"ceilingAndVisibilityOKTrend2",399}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfTensOfThousandsOfYearsOfOffset",1512}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfPointsAlongTheYAxis",1489}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"cloudsBase1Trend4",463}, - {""}, {""}, - {"isCavokTrend2",1030}, - {""}, {""}, - {"endYearTrend3",777}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc37_2",1676}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"oneMinuteMeanMaximumRVR1",1587}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_sec2_1",1693}, - {""}, {""}, {""}, {""}, - {"cloudsCode2Trend2",506}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extremeValuesRVR4",854}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc2_1",1671}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc29_1",1668}, - {""}, {""}, {""}, {""}, {""}, - {"ceilingAndVisibilityOKTrend1",398}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"padding_loc28_1",1667}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsCode2Trend1",505}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"At_least__Or_Distribut_Proportion_Of",14}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"isCavokTrend1",1029}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc37_1",1675}, - {""}, {""}, {""}, {""}, - {"padding_grid5_1",1634}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"Ensemble_Combinat_Number_0_none_E3",47}, - {""}, {""}, {""}, - {"beginMonthTrend2",354}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"padding_loc20_1",1656}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"runwayExtentOfContaminationCodeState2",1921}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsBase4Trend2",476}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"padding_loc12_1",1637}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"DIAG",25}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"padding_loc16_1",1646}, - {"octetAtWichPackedDataBegins",1546}, - {""}, {""}, - {"runwayExtentOfContaminationCodeState1",1920}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Used_E4",141}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase4Trend1",475}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Missing_Model_LBC",163}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase1Trend2",461}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"X2InGridLengths",270}, - {""}, - {"cloudsBase3Trend4",473}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"cloudsBase1Trend1",460}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode2Trend3",507}, - {""}, - {"extremeValuesRVR2",852}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"padding_loc13_2",1639}, - {""}, {""}, {""}, {""}, {""}, - {"X1InGridLengths",268}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"extremeValuesRVR1",851}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongYAxis",1501}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayExtentOfContaminationCodeState3",1922}, + {"Local_Number_Members_Missing_E3",131}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc191_3",1653}, + {"cloudsBase4Trend4",477}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"indexingTimeHH",1001}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"oneMinuteMeanMaximumRVR3",1599}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfGridUsed",1467}, {""}, {""}, {""}, - {"oneMinuteMeanMinimumRVR2",1592}, + {"************_ENSEMBLE_**************",1}, + {""}, {""}, {""}, + {"cloudsAbbreviation2Trend1",444}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsBase4Trend3",477}, - {""}, {""}, {""}, {""}, {""}, - {"TYPE_AN",241}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"Hour_E3",83}, {""}, {""}, - {"padding_loc13_1",1638}, - {"oneMinuteMeanMaximumRVR3",1589}, + {"padding_loc19_2",1665}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_sec2_3",1695}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"indexingTimeHH",997}, - {""}, - {"TYPE_CF",242}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Original_Parameter_Iden_CodeTable2",210}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc29_3",1670}, - {""}, {""}, {""}, {""}, {""}, - {"ceilingAndVisibilityOKTrend3",400}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase1Trend3",462}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase3Trend2",471}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"extractDateTimeYearRank",841}, - {"isCavokTrend3",1031}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"oneMinuteMeanMinimumRVR1",1591}, + {""}, {""}, {""}, {""}, {""}, + {"padding_local11_1",1697}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"beginYearTrend1",356}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_sec2_2",1705}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"setBitsPerValue",2153}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc18_2",1659}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetBSection5",1554}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"biFourierPackingModeForAxes",362}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extremeValuesRVR3",853}, + {"padding_loc2_2",1682}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc29_2",1679}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase3Trend1",470}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeDayEnd",823}, + {""}, + {"oneMinuteMeanMaximumRVR1",1597}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {"extractDateTimeHourRank",828}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"LBC_Initial_Conditions",96}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"YearOfModelVersion",283}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"presentWeather2PresentTrend4",1768}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfUsefulPointsAlongYAxis",1524}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Used_E2",139}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"TYPE_FX",244}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather1PresentTrend4",1763}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc30_2",1684}, {""}, - {"bitsPerValueAndRepack",376}, - {""}, {""}, {""}, - {"gts_CCCC",947}, - {""}, {""}, {""}, {""}, - {"padding_loc27_2",1666}, + {"runwayExtentOfContaminationCodeState4",1942}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"octetAtWichPackedDataBegins",1556}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation3Trend3",451}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsBase3Trend3",472}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"Time_Range_Two_E4",256}, {""}, {""}, + {"cloudsBase4Trend2",475}, + {"Ensemble_Identifier_E3",52}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"hoursAfterDataCutoff",976}, + {""}, {"extractDateTimeMinuteRank",831}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"padding_sec4_1",1708}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"extractDateTimeMonthRank",834}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"TYPE_PF",247}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"genVertHeightCoords",910}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc13_3",1640}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"cloudsAbbreviation1Trend3",441}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc27_1",1665}, + {"numberOfTensOfThousandsOfYearsOfOffset",1522}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"wallClockInitialTimeOfExecutionSecond",2518}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc190_1",1660}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"precisionOfTheUnpackedSubset",1750}, + {"cloudsAbbreviation3Trend1",449}, + {""}, {""}, + {"TYPE_OR",246}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"extractDateTimeSecondRank",837}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"oneMinuteMeanMinimumRVR2",1602}, + {"flagShowingPostAuxiliaryArrayInUse",885}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"BUFR",18}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"unusedBitsInBitmap",2454}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc191_2",1652}, + {"runwayExtentOfContaminationCodeState2",1940}, + {""}, {""}, {""}, + {"*********_EXTRA_DATA_***************",4}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"isCavokTrend3",1035}, + {"cloudsAbbreviation1Trend1",439}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"XpInGridLengths",274}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfUpperWavePeriodLimit",2029}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"oneMinuteMeanMinimumRVR3",1593}, + {"presentWeather2PresentTrend4",1779}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"endYearTrend3",777}, + {""}, {""}, {""}, + {"padding_grid50_1",1643}, + {""}, {""}, {""}, {""}, + {"wallClockInitialTimeOfExecutionDay",2514}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase1Trend4",462}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"windGustTrend3",2541}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase4Trend3",476}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"cloudsBase3Trend4",472}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Possible_E4",136}, + {""}, {""}, + {"numberOfBitsUsedForTheScaledGroupLengths",1423}, + {""}, {""}, {""}, + {"Hour_E3",82}, + {""}, {""}, {""}, {""}, + {"isCavokTrend1",1033}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"Time_Range_One_E4",252}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsBase4Trend1",474}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsBase2Trend4",467}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"padding_loc17_2",1657}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeSecondRank",837}, + {"endYearTrend1",775}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ceilingAndVisibilityOKTrend4",401}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"P_TACC",219}, + {"windGustTrend1",2539}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc37_2",1686}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"padding_grid1_2",1640}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"experimentVersionNumber1",806}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"runwayExtentOfContaminationCodeState3",1941}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase1Trend2",460}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"padding_sec2_3",1706}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"rootGroupSymbolTableEntry",1906}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather3PresentTrend4",1773}, - {""}, {""}, {""}, {""}, {""}, - {"padding_loc15_1",1645}, + {"Less_Than_Or_To_Overall_Distribution",120}, + {""}, {""}, {""}, + {"padding_loc27_2",1676}, + {""}, {""}, {""}, + {"cloudsBase3Trend2",470}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"runwayExtentOfContaminationCodeState1",1939}, + {"padding_loc29_3",1680}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"padding_sec3_1",1707}, + {""}, + {"Time_Range_One_E2",250}, + {""}, + {"presentWeather3PresentTrend4",1784}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lastMonthUsedToBuildClimateMonth2",1087}, + {"RVR4_1",226}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase2Trend2",465}, + {""}, {""}, + {"padding_loc3_1",1688}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"padding_local1_1",1698}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"indexingTimeHHMM",1002}, + {""}, {""}, {""}, {""}, + {"padding_grid4_1",1642}, + {""}, {""}, {""}, + {"Extra_Data_FreeFormat_0_none",55}, + {""}, {""}, + {"presentWeather1PresentTrend4",1774}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Missing_Model_LBC",162}, + {"padding_sec2_1",1704}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"genVertHeightCoords",914}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_local1_31",1699}, + {""}, {""}, + {"padding_loc18_1",1658}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"presentWeather2PresentTrend2",1777}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"padding_loc2_1",1681}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc10_1",1646}, + {"padding_loc38_1",1687}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc29_1",1678}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc30_1",1683}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Possible_E2",134}, + {""}, {""}, {""}, {""}, {""}, + {"padding_grid5_1",1644}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"oneMinuteMeanMinimumRVR3",1603}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc28_1",1677}, + {""}, {""}, + {"numberOfVGridUsed",1535}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"lastMonthUsedToBuildClimateMonth2",1093}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsBase1Trend3",461}, + {""}, {""}, {""}, + {"RVR2_1",224}, + {""}, {""}, {""}, + {"YearOfModelVersion",282}, + {""}, {""}, {""}, + {"padding_loc20_1",1666}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"TYPE_CF",241}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase3Trend3",471}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ExtremeValuesRVR4",63}, + {"ceilingAndVisibilityOKTrend2",399}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Time_Range_One_E3",251}, + {"requestedByEntity",1885}, + {"cloudsBase1Trend1",459}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase2Trend4",468}, + {"numberOfPointsAlongYAxisInCouplingArea",1502}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"oneMinuteMeanMinimumRVR1",1601}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase3Trend1",469}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"padding_loc14_2",1654}, + {""}, {""}, {""}, + {"cloudsBase2Trend3",466}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"presentWeather3PresentTrend2",1782}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"cloudsBase2Trend1",464}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"padding_loc13_4",1651}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"presentWeather1PresentTrend2",1772}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Time_Range_Two_E2",254}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lastMonthUsedToBuildClimateMonth1",1086}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"gts_CCCC",951}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"RVR3_1",225}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"wallClockInitialTimeOfExecutionMinute",2516}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_grid3_1",1641}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"lastMonthUsedToBuildClimateMonth1",1092}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"RVR1_1",223}, + {"wallClockInitialTimeOfExecutionMonth",2517}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc37_1",1685}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"padding_grid1_1",1639}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"padding_loc13_5",1652}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather2PresentTrend3",1778}, + {""}, + {"padding_loc27_1",1675}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"padding_loc192_1",1664}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {"extractDateTimeDayRank",824}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"Local_Number_Members_Possible_E3",135}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"precisionOfTheUnpackedSubset",1761}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc191_2",1662}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather2PresentTrend1",1776}, + {""}, + {"padding_loc13_2",1649}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"listOfUsedTileAttributesInCombination",1170}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"ceilingAndVisibilityOKTrend3",400}, + {""}, {""}, {""}, + {"TYPE_AN",240}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"extremeValuesRVR4",855}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"X2InGridLengths",269}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"presentWeather3PresentTrend3",1783}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"ceilingAndVisibilityOKTrend1",398}, + {""}, {""}, {""}, + {"numberOfUsefulPointsAlongYAxis",1534}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"extremeCounterClockwiseWindDirection",851}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc191_3",1663}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"presentWeather1PresentTrend3",1773}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc14_1",1653}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc191_1",1661}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"extremeValuesRVR2",853}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"padding_loc16_1",1656}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather3PresentTrend1",1781}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc15_1",1655}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"presentWeather1PresentTrend1",1771}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"LBC_Initial_Conditions",95}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"DIAG",25}, + {""}, {""}, {""}, {""}, + {"padding_loc26_1",1674}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc12_1",1647}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"X1InGridLengths",267}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"Local_Number_Members_Used_E4",140}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"TYPE_FC",242}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"wallClockInitialTimeOfExecutionHour",2515}, + {""}, {""}, + {"extremeValuesRVR3",854}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc244_2",1670}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"padding_loc13_3",1650}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extremeValuesRVR1",852}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"bitsPerValueAndRepack",376}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"Time_Range_Two_E4",255}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc245_2",1673}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Ensemble_Combinat_Number_0_none_E4",48}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc13_1",1648}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"GG",67}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc244_3",1671}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"numberOfPointsAlongTheYAxis",1498}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc244_1",1669}, + {"padding_loc23_1",1668}, + {"Missing_Model_LBC_E4",165}, + {""}, {""}, {""}, {""}, + {"ExtremeValuesRVR4",63}, + {""}, {""}, {""}, {""}, {""}, {""}, {"ExtremeValuesInMaximumRVR4",59}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GG",68}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather2PresentTrend2",1766}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lBB",1080}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc26_1",1664}, - {"Model_LBC_Member_Identifier",169}, - {""}, {""}, {""}, {""}, - {"Local_Number_Members_Used_E3",140}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"presentWeather1PresentTrend2",1761}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Used_E2",138}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ExtremeValuesRVR2",61}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"padding_loc21_1",1657}, + {"Time_Range_Two_E2",253}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase2Trend2",466}, - {""}, - {"P_TAVG",220}, + {"lBB",1086}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Threshold_Or_Distribution_0_no_1_yes",248}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"indexingTimeHHMM",998}, - {""}, {""}, {""}, {""}, - {"swapScanningY",2239}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Time_Range_Two_E3",255}, - {"NINT_RITZ_EXP",185}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather2PresentTrend1",1765}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ExtremeValuesRVR1",60}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsBase2Trend1",465}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather1PresentTrend1",1760}, + {""}, {""}, {""}, {""}, {""}, + {"Ensemble_Combinat_Number_0_none_E2",46}, + {"padding_loc21_1",1667}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7585,51 +8184,100 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc245_1",1672}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"presentWeather3PresentTrend2",1771}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc23_1",1658}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"TYPE_FC",243}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"GRIBEditionNumber",73}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extremeCounterClockwiseWindDirection",850}, + {"swapScanningY",2273}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Original_Parameter_Iden_CodeTable2",210}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ExtremeValuesRVR2",61}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"Time_Range_Two_E3",254}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Ensemble_Combinat_Number_0_none_E3",47}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Missing_Model_LBC_E2",163}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"ExtremeValuesInMaximumRVR2",57}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"YY",281}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"NINT_RITZ_EXP",184}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Model_LBC_Member_Identifier",168}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"ExtremeValuesRVR3",62}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_loc244_1",1659}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase2Trend3",467}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7637,21 +8285,64 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather3PresentTrend1",1770}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"ExtremeValuesInMaximumRVR2",57}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"ExtremeValuesRVR1",60}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayBrakingActionState4",1895}, + {"GRIBEditionNumber",72}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"runwayBrakingActionState4",1914}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"meanValueRVR4",1325}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"meanValueRVR4",1319}, + {"Local_Number_Members_Used_E3",139}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7662,8 +8353,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"YpInGridLengths",286}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7675,13 +8364,62 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"YpInGridLengths",285}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Missing_Model_LBC_E3",164}, + {"runwayBrakingActionState2",1912}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"ExtremeValuesInMaximumRVR3",58}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"meanValueRVR2",1323}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"wallClockInitialTimeOfExecutionYear",2519}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {"ExtremeValuesInMaximumRVR1",56}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"presentWeather2PresentTrend3",1767}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7694,10 +8432,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Missing_Model_LBC_E4",166}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather1PresentTrend3",1762}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7711,8 +8445,53 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"P_TAVG",220}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Show_Combination_Ensem_E4_0_no_1_yes",233}, + {"GRIB",68}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7725,8 +8504,287 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"runwayBrakingActionState3",1913}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"meanValueRVR3",1324}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayBrakingActionState1",1911}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"meanValueRVR1",1322}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"GRIBEXSection1Problem",69}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"At_least__Or_Distribut_Proportion_Of",14}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc13_5",1642}, + {"numberOfUnusedBitsAtEndOfSection3",1528}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"Y2InGridLengths",278}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Y1InGridLengths",276}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Used_Model_LBC",259}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7746,48 +8804,7 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"YY",282}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"presentWeather3PresentTrend3",1772}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc244_3",1661}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Show_Combination_Ensem_E2_0_no_1_yes",231}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayBrakingActionState2",1893}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"meanValueRVR2",1317}, - {""}, {""}, {""}, - {"ExtremeValuesInMaximumRVR3",58}, + {"INGRIB",88}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7806,379 +8823,36 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIB",69}, - {""}, {""}, {""}, {""}, - {"numberOfUnusedBitsAtEndOfSection3",1518}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"runwayBrakingActionState1",1892}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"meanValueRVR1",1316}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"Missing_Model_LBC_E2",164}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"Show_Combination_Ensem_E3_0_no_1_yes",232}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc244_2",1660}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfBitsUsedForTheGroupWidths",1422}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc245_1",1662}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayBrakingActionState3",1894}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"meanValueRVR3",1318}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIBEXSection1Problem",70}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"Y2InGridLengths",279}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"Missing_Model_LBC_E3",165}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"AEC_PAD_RSI_OPTION_MASK",11}, - {""}, {""}, {""}, {""}, - {"Y1InGridLengths",277}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"Used_Model_LBC",260}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"INGRIB",89}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc245_2",1663}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"BUDG",17}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfBitsUsedForTheGroupWidths",1413}, - {""}, {"BBB",16}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"NINT_LOG10_RITZ",184}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"BUDG",17}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8232,6 +8906,11 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"GRIBEX_boustrophedonic",71}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8297,89 +8976,7 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIBEX_boustrophedonic",72}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"NINT_LOG10_RITZ",183}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8426,6 +9023,8 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"AEC_PAD_RSI_OPTION_MASK",11}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8473,7 +9072,138 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIBEXShBugPresent",71}, + {"Show_Combination_Ensem_E4_0_no_1_yes",232}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Show_Combination_Ensem_E2_0_no_1_yes",230}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"GRIBEXShBugPresent",70}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"Show_Combination_Ensem_E3_0_no_1_yes",231}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8556,6 +9286,520 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"GRIB_DEPTH",73}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Used_Model_LBC_E4",262}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Used_Model_LBC_E2",260}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"Used_Model_LBC_E3",261}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"GRIB_LATITUDE",74}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"AEC_RESTRICTED_OPTION_MASK",12}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"AEC_DATA_SIGNED_OPTION_MASK",10}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8703,22 +9947,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Used_Model_LBC_E4",263}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8748,7 +9976,184 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIB_DEPTH",74}, + {"GRIB_LONGITUDE",75}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8765,202 +10170,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Used_Model_LBC_E2",261}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"Used_Model_LBC_E3",262}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIB_LATITUDE",75}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"AEC_RESTRICTED_OPTION_MASK",12}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {"AEC_DATA_3BYTE_OPTION_MASK",7}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8994,10 +10203,7 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {"AEC_DATA_MSB_OPTION_MASK",8}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -9305,168 +10511,130 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIB_LONGITUDE",76}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {"AEC_DATA_PREPROCESS_OPTION_MASK",9} }; -const struct grib_keys_hash * -grib_keys_hash_get ( const char *str, size_t len) +const struct grib_keys_hash* +grib_keys_hash_get(const char* str, size_t len) { - if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) - { - unsigned int key = hash_keys (str, len); + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) { + unsigned int key = hash_keys(str, len); - if (key <= MAX_HASH_VALUE) - if (len == lengthtable[key]) - { - const char *s = wordlist[key].name; + if (key <= MAX_HASH_VALUE) + if (len == lengthtable[key]) { + const char* s = wordlist[key].name; - if (*str == *s && !memcmp (str + 1, s + 1, len - 1)) - return &wordlist[key]; - } + if (*str == *s && !memcmp(str + 1, s + 1, len - 1)) + return &wordlist[key]; + } } - return 0; + return 0; } /* * (C) Copyright 2005- ECMWF. diff --git a/src/grib_iarray.cc b/src/grib_iarray.cc index f69adfffd..85ad7bca5 100644 --- a/src/grib_iarray.cc +++ b/src/grib_iarray.cc @@ -33,23 +33,19 @@ void grib_iarray_print(const char* title, const grib_iarray* iarray) // v->v[i] = src_array[i]; // v->n = size; // v->number_of_pop_front = 0; -// v->context = c; // return v; // } -grib_iarray* grib_iarray_new(grib_context* c, size_t size, size_t incsize) +grib_iarray* grib_iarray_new(size_t size, size_t incsize) { grib_iarray* v = NULL; - - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v = (grib_iarray*)grib_context_malloc(c, sizeof(grib_iarray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_iarray)); return NULL; } - v->context = c; v->size = size; v->n = 0; v->incsize = incsize; @@ -86,14 +82,11 @@ static grib_iarray* grib_iarray_resize_to(grib_iarray* v, size_t newsize) { long* newv; size_t i; - grib_context* c = v->context; + grib_context* c = grib_context_get_default(); if (newsize < v->size) return v; - if (!c) - c = grib_context_get_default(); - newv = (long*)grib_context_malloc_clear(c, newsize * sizeof(long)); if (!newv) { grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(long) * newsize); @@ -125,7 +118,7 @@ grib_iarray* grib_iarray_push(grib_iarray* v, long val) size_t start_incsize = 100; if (!v) - v = grib_iarray_new(0, start_size, start_incsize); + v = grib_iarray_new(start_size, start_incsize); if (v->n >= v->size - v->number_of_pop_front) v = grib_iarray_resize(v); @@ -177,24 +170,21 @@ grib_iarray* grib_iarray_push(grib_iarray* v, long val) void grib_iarray_delete(grib_iarray* v) { - grib_context* c; + grib_context* c = grib_context_get_default(); if (!v) return; - c = v->context; grib_iarray_delete_array(v); - grib_context_free(c, v); } void grib_iarray_delete_array(grib_iarray* v) { - grib_context* c; + grib_context* c = grib_context_get_default(); if (!v) return; - c = v->context; if (v->v) { long* vv = v->v - v->number_of_pop_front; @@ -206,8 +196,7 @@ long* grib_iarray_get_array(grib_iarray* v) { long* vv; size_t i; - grib_context* c = v->context; - DEBUG_ASSERT(c); + grib_context* c = grib_context_get_default(); vv = (long*)grib_context_malloc_clear(c, sizeof(long) * v->n); for (i = 0; i < v->n; i++) diff --git a/src/grib_iterator.cc b/src/grib_iterator.cc deleted file mode 100644 index 0d253bc68..000000000 --- a/src/grib_iterator.cc +++ /dev/null @@ -1,168 +0,0 @@ -/* - * (C) Copyright 2005- ECMWF. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - * - * 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. - */ - -/*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - ***************************************************************************/ -#include "grib_api_internal.h" - -#if GRIB_PTHREADS -static pthread_once_t once = PTHREAD_ONCE_INIT; -static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; - -static void init_mutex() -{ - pthread_mutexattr_t attr; - pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - pthread_mutex_init(&mutex, &attr); - pthread_mutexattr_destroy(&attr); -} -#elif GRIB_OMP_THREADS -static int once = 0; -static omp_nest_lock_t mutex; - -static void init_mutex() -{ - GRIB_OMP_CRITICAL(lock_iterator_c) - { - if (once == 0) { - omp_init_nest_lock(&mutex); - once = 1; - } - } -} -#endif - -int grib_get_data(const grib_handle* h, double* lats, double* lons, double* values) -{ - int err = 0; - grib_iterator* iter = NULL; - double *lat, *lon, *val; - - iter = grib_iterator_new(h, 0, &err); - if (!iter || err != GRIB_SUCCESS) - return err; - - lat = lats; - lon = lons; - val = values; - while (grib_iterator_next(iter, lat++, lon++, val++)) {} - - grib_iterator_delete(iter); - - return err; -} - -int grib_iterator_next(grib_iterator* i, double* lat, double* lon, double* value) -{ - grib_iterator_class* c = i->cclass; - while (c) { - grib_iterator_class* s = c->super ? *(c->super) : NULL; - if (c->next) - return c->next(i, lat, lon, value); - c = s; - } - - grib_context_log(i->h->context, GRIB_LOG_FATAL, "%s: No next() function in iterator '%s'", __func__, i->cclass->name); - return 0; -} - -int grib_iterator_has_next(grib_iterator* i) -{ - grib_iterator_class* c = i->cclass; - while (c) { - grib_iterator_class* s = c->super ? *(c->super) : NULL; - if (c->has_next) - return c->has_next(i); - c = s; - } - grib_context_log(i->h->context, GRIB_LOG_FATAL, "%s: No has_next() function in iterator '%s'", __func__, i->cclass->name); - return 0; -} - -int grib_iterator_previous(grib_iterator* i, double* lat, double* lon, double* value) -{ - grib_iterator_class* c = i->cclass; - while (c) { - grib_iterator_class* s = c->super ? *(c->super) : NULL; - if (c->previous) - return c->previous(i, lat, lon, value); - c = s; - } - grib_context_log(i->h->context, GRIB_LOG_FATAL, "%s: No previous() function in iterator '%s'", __func__, i->cclass->name); - return 0; -} - -int grib_iterator_reset(grib_iterator* i) -{ - grib_iterator_class* c = i->cclass; - while (c) { - grib_iterator_class* s = c->super ? *(c->super) : NULL; - if (c->reset) - return c->reset(i); - c = s; - } - grib_context_log(i->h->context, GRIB_LOG_FATAL, "%s: No reset() function in iterator '%s'", __func__, i->cclass->name); - return 0; -} - -/* For this one, ALL init are called */ -static int init_iterator(grib_iterator_class* c, grib_iterator* i, grib_handle* h, grib_arguments* args) -{ - if (c) { - int ret = GRIB_SUCCESS; - grib_iterator_class* s = c->super ? *(c->super) : NULL; - if (!c->inited) { - if (c->init_class) - c->init_class(c); - c->inited = 1; - } - if (s) - ret = init_iterator(s, i, h, args); - - if (ret != GRIB_SUCCESS) - return ret; - - if (c->init) - return c->init(i, h, args); - } - return GRIB_INTERNAL_ERROR; -} - -int grib_iterator_init(grib_iterator* i, grib_handle* h, grib_arguments* args) -{ - int r = 0; - GRIB_MUTEX_INIT_ONCE(&once, &init_mutex); - GRIB_MUTEX_LOCK(&mutex); - r = init_iterator(i->cclass, i, h, args); - GRIB_MUTEX_UNLOCK(&mutex); - return r; -} - -/* For this one, ALL destroy are called */ -int grib_iterator_delete(grib_iterator* i) -{ - if (i) { - grib_iterator_class* c = i->cclass; - while (c) { - grib_iterator_class* s = c->super ? *(c->super) : NULL; - if (c->destroy) - c->destroy(i); - c = s; - } - /* This should go in a top class */ - grib_context_free(i->h->context, i); - } - else { - return GRIB_INVALID_ARGUMENT; - } - return 0; -} diff --git a/src/grib_iterator_class.cc b/src/grib_iterator_class.cc index 6e1ec78b7..fbf208818 100644 --- a/src/grib_iterator_class.cc +++ b/src/grib_iterator_class.cc @@ -14,22 +14,53 @@ ***************************************************************************/ #include "grib_api_internal.h" +#include "geo_iterator/grib_iterator.h" +#include "accessor/grib_accessor_class_iterator.h" /* This file is generated by ./make_class.pl */ #include "grib_iterator_class.h" +#if GRIB_PTHREADS +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + +static void init_mutex() +{ + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex, &attr); + pthread_mutexattr_destroy(&attr); +} +#elif GRIB_OMP_THREADS +static int once = 0; +static omp_nest_lock_t mutex; + +static void init_mutex() +{ + GRIB_OMP_CRITICAL(lock_grib_accessor_class_c) + { + if (once == 0) { + omp_init_nest_lock(&mutex); + once = 1; + } + } +} +#endif + struct table_entry { const char* type; - grib_iterator_class** cclass; + eccodes::geo_iterator::Iterator** iterator; }; static const struct table_entry table[] = { -/* This file is generated by ./make_class.pl */ -#include "grib_iterator_factory.h" + /* This file is generated by ./make_class.pl */ + #include "grib_iterator_factory.h" }; -grib_iterator* grib_iterator_factory(grib_handle* h, grib_arguments* args, unsigned long flags, int* error) + +eccodes::geo_iterator::Iterator* grib_iterator_factory(grib_handle* h, grib_arguments* args, unsigned long flags, int* error) { size_t i = 0, num_table_entries = 0; const char* type = (char*)grib_arguments_get_name(h, args, 0); @@ -38,16 +69,20 @@ grib_iterator* grib_iterator_factory(grib_handle* h, grib_arguments* args, unsig num_table_entries = sizeof(table) / sizeof(table[0]); for (i = 0; i < num_table_entries; i++) { if (strcmp(type, table[i].type) == 0) { - grib_iterator_class* c = *(table[i].cclass); - grib_iterator* it = (grib_iterator*)grib_context_malloc_clear(h->context, c->size); - it->cclass = c; - it->flags = flags; - *error = grib_iterator_init(it, h, args); + eccodes::geo_iterator::Iterator* builder = *(table[i].iterator); + eccodes::geo_iterator::Iterator* it = builder->create(); + it->flags_ = flags; + + GRIB_MUTEX_INIT_ONCE(&once, &init_mutex); + GRIB_MUTEX_LOCK(&mutex); + *error = it->init(h, args); + GRIB_MUTEX_UNLOCK(&mutex); + if (*error == GRIB_SUCCESS) return it; grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator factory: Error instantiating iterator %s (%s)", table[i].type, grib_get_error_message(*error)); - grib_iterator_delete(it); + gribIteratorDelete(it); return NULL; } } @@ -56,3 +91,119 @@ grib_iterator* grib_iterator_factory(grib_handle* h, grib_arguments* args, unsig return NULL; } + +int grib_get_data(const grib_handle* h, double* lats, double* lons, double* values) +{ + int err = 0; + eccodes::geo_iterator::Iterator* iter = NULL; + double *lat, *lon, *val; + + iter = eccodes::geo_iterator::gribIteratorNew(h, 0, &err); + if (!iter || err != GRIB_SUCCESS) + return err; + + lat = lats; + lon = lons; + val = values; + while (iter->next(lat++, lon++, val++)) {} + + gribIteratorDelete(iter); + + return err; +} + +/* + * Return pointer to data at (i,j) (Fortran convention) + */ +static double* pointer_to_data(unsigned int i, unsigned int j, + long iScansNegatively, long jScansPositively, + long jPointsAreConsecutive, long alternativeRowScanning, + unsigned int nx, unsigned int ny, double* data) +{ + /* Regular grid */ + if (nx > 0 && ny > 0) { + if (i >= nx || j >= ny) + return NULL; + j = (jScansPositively) ? j : ny - 1 - j; + i = ((alternativeRowScanning) && (j % 2 == 1)) ? nx - 1 - i : i; + i = (iScansNegatively) ? nx - 1 - i : i; + + return (jPointsAreConsecutive) ? data + j + i * ny : data + i + nx * j; + } + + /* Reduced or other data not on a grid */ + return NULL; +} + +/* Apply the scanning mode flags which may require data array to be transformed + * to standard west-to-east (+i) south-to-north (+j) mode. + * The data array passed in should have 'numPoints' elements. +*/ +int transform_iterator_data(grib_context* context, double* data, + long iScansNegatively, long jScansPositively, + long jPointsAreConsecutive, long alternativeRowScanning, + size_t numPoints, long nx, long ny) +{ + double* data2; + double *pData0, *pData1, *pData2; + long ix, iy; + + if (!iScansNegatively && jScansPositively && !jPointsAreConsecutive && !alternativeRowScanning) { + /* Already +i and +j. No need to change */ + return GRIB_SUCCESS; + } + if (!data) return GRIB_SUCCESS; + + if (!context) context = grib_context_get_default(); + + if (!iScansNegatively && !jScansPositively && !jPointsAreConsecutive && !alternativeRowScanning && + nx > 0 && ny > 0) { + /* Regular grid +i -j: convert from we:ns to we:sn */ + size_t row_size = ((size_t)nx) * sizeof(double); + data2 = (double*)grib_context_malloc(context, row_size); + if (!data2) { + grib_context_log(context, GRIB_LOG_ERROR, "Geoiterator data: Error allocating %ld bytes", row_size); + return GRIB_OUT_OF_MEMORY; + } + for (iy = 0; iy < ny / 2; iy++) { + memcpy(data2, data + ((size_t)iy) * nx, row_size); + memcpy(data + iy * nx, data + (ny - 1 - iy) * ((size_t)nx), row_size); + memcpy(data + (ny - 1 - iy) * ((size_t)nx), data2, row_size); + } + grib_context_free(context, data2); + return GRIB_SUCCESS; + } + + if (nx < 1 || ny < 1) { + grib_context_log(context, GRIB_LOG_ERROR, "Geoiterator data: Invalid values for Nx and/or Ny"); + return GRIB_GEOCALCULUS_PROBLEM; + } + data2 = (double*)grib_context_malloc(context, numPoints * sizeof(double)); + if (!data2) { + grib_context_log(context, GRIB_LOG_ERROR, "Geoiterator data: Error allocating %ld bytes", numPoints * sizeof(double)); + return GRIB_OUT_OF_MEMORY; + } + pData0 = data2; + for (iy = 0; iy < ny; iy++) { + long deltaX = 0; + pData1 = pointer_to_data(0, iy, iScansNegatively, jScansPositively, jPointsAreConsecutive, alternativeRowScanning, nx, ny, data); + if (!pData1) { + grib_context_free(context, data2); + return GRIB_GEOCALCULUS_PROBLEM; + } + pData2 = pointer_to_data(1, iy, iScansNegatively, jScansPositively, jPointsAreConsecutive, alternativeRowScanning, nx, ny, data); + if (!pData2) { + grib_context_free(context, data2); + return GRIB_GEOCALCULUS_PROBLEM; + } + deltaX = pData2 - pData1; + for (ix = 0; ix < nx; ix++) { + *pData0++ = *pData1; + pData1 += deltaX; + } + } + memcpy(data, data2, ((size_t)numPoints) * sizeof(double)); + grib_context_free(context, data2); + + return GRIB_SUCCESS; +} diff --git a/src/grib_iterator_class.h b/src/grib_iterator_class.h index e9f95f5ec..31aabe985 100644 --- a/src/grib_iterator_class.h +++ b/src/grib_iterator_class.h @@ -1,13 +1,13 @@ /* This file is automatically generated by ./make_class.pl, do not edit */ -extern grib_iterator_class* grib_iterator_class_gaussian; -extern grib_iterator_class* grib_iterator_class_gaussian_reduced; -extern grib_iterator_class* grib_iterator_class_gen; -extern grib_iterator_class* grib_iterator_class_healpix; -extern grib_iterator_class* grib_iterator_class_lambert_azimuthal_equal_area; -extern grib_iterator_class* grib_iterator_class_lambert_conformal; -extern grib_iterator_class* grib_iterator_class_latlon; -extern grib_iterator_class* grib_iterator_class_latlon_reduced; -extern grib_iterator_class* grib_iterator_class_mercator; -extern grib_iterator_class* grib_iterator_class_polar_stereographic; -extern grib_iterator_class* grib_iterator_class_regular; -extern grib_iterator_class* grib_iterator_class_space_view; +extern eccodes::geo_iterator::Iterator* grib_iterator_gaussian; +extern eccodes::geo_iterator::Iterator* grib_iterator_gaussian_reduced; +//extern eccodes::geo_iterator::Iterator* grib_iterator_gen; +extern eccodes::geo_iterator::Iterator* grib_iterator_healpix; +extern eccodes::geo_iterator::Iterator* grib_iterator_lambert_azimuthal_equal_area; +extern eccodes::geo_iterator::Iterator* grib_iterator_lambert_conformal; +extern eccodes::geo_iterator::Iterator* grib_iterator_latlon; +extern eccodes::geo_iterator::Iterator* grib_iterator_latlon_reduced; +extern eccodes::geo_iterator::Iterator* grib_iterator_mercator; +extern eccodes::geo_iterator::Iterator* grib_iterator_polar_stereographic; +extern eccodes::geo_iterator::Iterator* grib_iterator_regular; +extern eccodes::geo_iterator::Iterator* grib_iterator_space_view; diff --git a/src/grib_iterator_class_gen.cc b/src/grib_iterator_class_gen.cc deleted file mode 100644 index 7124e8cf9..000000000 --- a/src/grib_iterator_class_gen.cc +++ /dev/null @@ -1,251 +0,0 @@ -/* - * (C) Copyright 2005- ECMWF. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - * - * 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. - */ - -#include "grib_api_internal.h" - -/* - This is used by make_class.pl - - START_CLASS_DEF - CLASS = iterator - IMPLEMENTS = destroy - IMPLEMENTS = has_next - IMPLEMENTS = init - IMPLEMENTS = reset - MEMBERS = int carg - MEMBERS = const char* missingValue; - END_CLASS_DEF - - */ - -/* START_CLASS_IMP */ - -/* - -Don't edit anything between START_CLASS_IMP and END_CLASS_IMP -Instead edit values between START_CLASS_DEF and END_CLASS_DEF -or edit "iterator.class" and rerun ./make_class.pl - -*/ - - -static void init_class (grib_iterator_class*); - -static int init (grib_iterator* i,grib_handle*,grib_arguments*); -static int destroy (grib_iterator* i); -static int reset (grib_iterator* i); -static long has_next (grib_iterator* i); - - -typedef struct grib_iterator_gen{ - grib_iterator it; - /* Members defined in gen */ - int carg; - const char* missingValue; -} grib_iterator_gen; - - -static grib_iterator_class _grib_iterator_class_gen = { - 0, /* super */ - "gen", /* name */ - sizeof(grib_iterator_gen),/* size of instance */ - 0, /* inited */ - &init_class, /* init_class */ - &init, /* constructor */ - &destroy, /* destructor */ - 0, /* Next Value */ - 0, /* Previous Value */ - &reset, /* Reset the counter */ - &has_next, /* has next values */ -}; - -grib_iterator_class* grib_iterator_class_gen = &_grib_iterator_class_gen; - - -static void init_class(grib_iterator_class* c) -{ -} -/* END_CLASS_IMP */ - -/* - * Return pointer to data at (i,j) (Fortran convention) - */ -static double* pointer_to_data(unsigned int i, unsigned int j, - long iScansNegatively, long jScansPositively, - long jPointsAreConsecutive, long alternativeRowScanning, - unsigned int nx, unsigned int ny, double* data) -{ - /* Regular grid */ - if (nx > 0 && ny > 0) { - if (i >= nx || j >= ny) - return NULL; - j = (jScansPositively) ? j : ny - 1 - j; - i = ((alternativeRowScanning) && (j % 2 == 1)) ? nx - 1 - i : i; - i = (iScansNegatively) ? nx - 1 - i : i; - - return (jPointsAreConsecutive) ? data + j + i * ny : data + i + nx * j; - } - - /* Reduced or other data not on a grid */ - return NULL; -} - -/* Apply the scanning mode flags which may require data array to be transformed - * to standard west-to-east (+i) south-to-north (+j) mode. - * The data array passed in should have 'numPoints' elements. -*/ -int transform_iterator_data(grib_context* context, double* data, - long iScansNegatively, long jScansPositively, - long jPointsAreConsecutive, long alternativeRowScanning, - size_t numPoints, long nx, long ny) -{ - double* data2; - double *pData0, *pData1, *pData2; - unsigned long ix, iy; - - if (!iScansNegatively && jScansPositively && !jPointsAreConsecutive && !alternativeRowScanning) { - /* Already +i and +j. No need to change */ - return GRIB_SUCCESS; - } - if (!data) return GRIB_SUCCESS; - - if (!context) context = grib_context_get_default(); - - if (!iScansNegatively && !jScansPositively && !jPointsAreConsecutive && !alternativeRowScanning && - nx > 0 && ny > 0) { - /* Regular grid +i -j: convert from we:ns to we:sn */ - size_t row_size = ((size_t)nx) * sizeof(double); - data2 = (double*)grib_context_malloc(context, row_size); - if (!data2) { - grib_context_log(context, GRIB_LOG_ERROR, "Geoiterator data: Error allocating %ld bytes", row_size); - return GRIB_OUT_OF_MEMORY; - } - for (iy = 0; iy < ny / 2; iy++) { - memcpy(data2, data + ((size_t)iy) * nx, row_size); - memcpy(data + iy * nx, data + (ny - 1 - iy) * ((size_t)nx), row_size); - memcpy(data + (ny - 1 - iy) * ((size_t)nx), data2, row_size); - } - grib_context_free(context, data2); - return GRIB_SUCCESS; - } - - if (nx < 1 || ny < 1) { - grib_context_log(context, GRIB_LOG_ERROR, "Geoiterator data: Invalid values for Nx and/or Ny"); - return GRIB_GEOCALCULUS_PROBLEM; - } - data2 = (double*)grib_context_malloc(context, numPoints * sizeof(double)); - if (!data2) { - grib_context_log(context, GRIB_LOG_ERROR, "Geoiterator data: Error allocating %ld bytes", numPoints * sizeof(double)); - return GRIB_OUT_OF_MEMORY; - } - pData0 = data2; - for (iy = 0; iy < ny; iy++) { - long deltaX = 0; - pData1 = pointer_to_data(0, iy, iScansNegatively, jScansPositively, jPointsAreConsecutive, alternativeRowScanning, nx, ny, data); - if (!pData1) { - grib_context_free(context, data2); - return GRIB_GEOCALCULUS_PROBLEM; - } - pData2 = pointer_to_data(1, iy, iScansNegatively, jScansPositively, jPointsAreConsecutive, alternativeRowScanning, nx, ny, data); - if (!pData2) { - grib_context_free(context, data2); - return GRIB_GEOCALCULUS_PROBLEM; - } - deltaX = pData2 - pData1; - for (ix = 0; ix < nx; ix++) { - *pData0++ = *pData1; - pData1 += deltaX; - } - } - memcpy(data, data2, ((size_t)numPoints) * sizeof(double)); - grib_context_free(context, data2); - - return GRIB_SUCCESS; -} - -static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) -{ - grib_iterator_gen* self = (grib_iterator_gen*)iter; - size_t dli = 0; - int err = GRIB_SUCCESS; - const char* s_rawData = NULL; - const char* s_numPoints = NULL; - long numberOfPoints = 0; - self->carg = 1; - - s_numPoints = grib_arguments_get_name(h, args, self->carg++); - self->missingValue = grib_arguments_get_name(h, args, self->carg++); - s_rawData = grib_arguments_get_name(h, args, self->carg++); - - iter->data = NULL; - iter->h = h; /* We may not need to keep them */ - iter->args = args; - if ((err = grib_get_size(h, s_rawData, &dli)) != GRIB_SUCCESS) - return err; - - if ((err = grib_get_long_internal(h, s_numPoints, &numberOfPoints)) != GRIB_SUCCESS) - return err; - - // See ECC-1792. If we don't want to decode the Data Section, we should not do a check - // to see if it is consistent with the Grid Section - if (iter->flags & GRIB_GEOITERATOR_NO_VALUES) { - // Iterator's number of values taken from the Grid Section - iter->nv = numberOfPoints; - } else { - // Check for consistency between the Grid and Data Sections - if (numberOfPoints != dli) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator: %s != size(%s) (%ld!=%ld)", - s_numPoints, s_rawData, numberOfPoints, dli); - return GRIB_WRONG_GRID; - } - iter->nv = dli; - } - - if (iter->nv == 0) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator: size(%s) is %ld", s_rawData, dli); - return GRIB_WRONG_GRID; - } - - if ((iter->flags & GRIB_GEOITERATOR_NO_VALUES) == 0) { - // ECC-1525 - // When the NO_VALUES flag is unset, decode the values and store them in the iterator. - // By default (and legacy) flags==0, so we decode - iter->data = (double*)grib_context_malloc(h->context, (iter->nv) * sizeof(double)); - - if ((err = grib_get_double_array_internal(h, s_rawData, iter->data, &(iter->nv)))) { - return err; - } - } - iter->e = -1; - - return err; -} - -static int reset(grib_iterator* iter) -{ - iter->e = -1; - return 0; -} - -static int destroy(grib_iterator* iter) -{ - const grib_context* c = iter->h->context; - grib_context_free(c, iter->data); - return GRIB_SUCCESS; -} - -static long has_next(grib_iterator* iter) -{ - if (iter->flags == 0 && iter->data == NULL) - return 0; - if (iter->e >= (long)(iter->nv - 1)) - return 0; - return 1; -} diff --git a/src/grib_iterator_class_latlon.cc b/src/grib_iterator_class_latlon.cc deleted file mode 100644 index 2d68b8f4e..000000000 --- a/src/grib_iterator_class_latlon.cc +++ /dev/null @@ -1,224 +0,0 @@ -/* - * (C) Copyright 2005- ECMWF. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - * - * 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. - */ - -#include "grib_api_internal.h" - -/* - This is used by make_class.pl - - START_CLASS_DEF - CLASS = iterator - SUPER = grib_iterator_class_regular - IMPLEMENTS = init;next - END_CLASS_DEF - - */ - -/* START_CLASS_IMP */ - -/* - -Don't edit anything between START_CLASS_IMP and END_CLASS_IMP -Instead edit values between START_CLASS_DEF and END_CLASS_DEF -or edit "iterator.class" and rerun ./make_class.pl - -*/ - - -static void init_class (grib_iterator_class*); - -static int init (grib_iterator* i,grib_handle*,grib_arguments*); -static int next (grib_iterator* i, double *lat, double *lon, double *val); - - -typedef struct grib_iterator_latlon{ - grib_iterator it; - /* Members defined in gen */ - int carg; - const char* missingValue; - /* Members defined in regular */ - double *las; - double *los; - long Ni; - long Nj; - long iScansNegatively; - long isRotated; - double angleOfRotation; - double southPoleLat; - double southPoleLon; - long jPointsAreConsecutive; - long disableUnrotate; - /* Members defined in latlon */ -} grib_iterator_latlon; - -extern grib_iterator_class* grib_iterator_class_regular; - -static grib_iterator_class _grib_iterator_class_latlon = { - &grib_iterator_class_regular, /* super */ - "latlon", /* name */ - sizeof(grib_iterator_latlon),/* size of instance */ - 0, /* inited */ - &init_class, /* init_class */ - &init, /* constructor */ - 0, /* destructor */ - &next, /* Next Value */ - 0, /* Previous Value */ - 0, /* Reset the counter */ - 0, /* has next values */ -}; - -grib_iterator_class* grib_iterator_class_latlon = &_grib_iterator_class_latlon; - - -static void init_class(grib_iterator_class* c) -{ - c->previous = (*(c->super))->previous; - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; -} -/* END_CLASS_IMP */ - -static int next(grib_iterator* iter, double* lat, double* lon, double* val) -{ - /* GRIB-238: Support rotated lat/lon grids */ - double ret_lat, ret_lon, ret_val=0; - grib_iterator_latlon* self = (grib_iterator_latlon*)iter; - - if ((long)iter->e >= (long)(iter->nv - 1)) - return 0; - - iter->e++; - - /* Assumptions: - * All rows scan in the same direction (alternativeRowScanning==0) - */ - if (!self->jPointsAreConsecutive) { - /* Adjacent points in i (x) direction are consecutive */ - ret_lat = self->las[(long)floor(iter->e / self->Ni)]; - ret_lon = self->los[(long)iter->e % self->Ni]; - if (iter->data) - ret_val = iter->data[iter->e]; - } - else { - /* Adjacent points in j (y) direction is consecutive */ - ret_lon = self->los[(long)iter->e / self->Nj]; - ret_lat = self->las[(long)floor(iter->e % self->Nj)]; - if (iter->data) - ret_val = iter->data[iter->e]; - } - - /* See ECC-808: Some users want to disable the unrotate */ - if (self->isRotated && !self->disableUnrotate) { - double new_lat = 0, new_lon = 0; - unrotate(ret_lat, ret_lon, - self->angleOfRotation, self->southPoleLat, self->southPoleLon, - &new_lat, &new_lon); - ret_lat = new_lat; - ret_lon = new_lon; - } - - *lat = ret_lat; - *lon = ret_lon; - if (val && iter->data) { - *val = ret_val; - } - return 1; -} - -static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) -{ - grib_iterator_latlon* self = (grib_iterator_latlon*)iter; - int err = 0; - double jdir; - double lat1=0, lat2=0, north=0, south=0; - long jScansPositively; - long lai; - - const char* s_lat1 = grib_arguments_get_name(h, args, self->carg++); - const char* s_jdir = grib_arguments_get_name(h, args, self->carg++); - const char* s_jScansPos = grib_arguments_get_name(h, args, self->carg++); - const char* s_jPtsConsec = grib_arguments_get_name(h, args, self->carg++); - const char* s_isRotatedGrid = grib_arguments_get_name(h, args, self->carg++); - const char* s_angleOfRotation = grib_arguments_get_name(h, args, self->carg++); - const char* s_latSouthernPole = grib_arguments_get_name(h, args, self->carg++); - const char* s_lonSouthernPole = grib_arguments_get_name(h, args, self->carg++); - - self->angleOfRotation = 0; - self->isRotated = 0; - self->southPoleLat = 0; - self->southPoleLon = 0; - self->disableUnrotate = 0; /* unrotate enabled by default */ - - if ((err = grib_get_long(h, s_isRotatedGrid, &self->isRotated))) - return err; - if (self->isRotated) { - if ((err = grib_get_double_internal(h, s_angleOfRotation, &self->angleOfRotation))) - return err; - if ((err = grib_get_double_internal(h, s_latSouthernPole, &self->southPoleLat))) - return err; - if ((err = grib_get_double_internal(h, s_lonSouthernPole, &self->southPoleLon))) - return err; - } - - if ((err = grib_get_double_internal(h, s_lat1, &lat1))) - return err; - if ((err = grib_get_double_internal(h, "latitudeLastInDegrees", &lat2))) - return err; - if ((err = grib_get_double_internal(h, s_jdir, &jdir))) //can be GRIB_MISSING_DOUBLE - return err; - if ((err = grib_get_long_internal(h, s_jScansPos, &jScansPositively))) - return err; - if ((err = grib_get_long_internal(h, s_jPtsConsec, &self->jPointsAreConsecutive))) - return err; - if ((err = grib_get_long(h, "iteratorDisableUnrotate", &self->disableUnrotate))) - return err; - - /* ECC-984: If jDirectionIncrement is missing, then we cannot use it (See jDirectionIncrementGiven) */ - /* So try to compute the increment */ - if ( (grib_is_missing(h, s_jdir, &err) && err == GRIB_SUCCESS) || (jdir == GRIB_MISSING_DOUBLE) ) { - const long Nj = self->Nj; - Assert(Nj > 1); - if (lat1 > lat2) { - jdir = (lat1 - lat2) / (Nj - 1); - } - else { - jdir = (lat2 - lat1) / (Nj - 1); - } - grib_context_log(h->context, GRIB_LOG_DEBUG, - "Cannot use jDirectionIncrement. Using value of %.6f obtained from La1, La2 and Nj", jdir); - } - - if (jScansPositively) { - north = lat2; - south = lat1; - jdir = -jdir; - } else { - north = lat1; - south = lat2; - } - if (south > north) { - grib_context_log(h->context, GRIB_LOG_ERROR, - "Lat/Lon Geoiterator: First and last latitudes are inconsistent with scanning order: lat1=%g, lat2=%g jScansPositively=%ld", - lat1, lat2, jScansPositively); - return GRIB_WRONG_GRID; - } - - for (lai = 0; lai < self->Nj; lai++) { - self->las[lai] = lat1; - lat1 -= jdir; - } - /* ECC-1406: Due to rounding, errors can accumulate. - * So we ensure the last latitude is latitudeOfLastGridPointInDegrees - */ - self->las[self->Nj-1] = lat2; - - iter->e = -1; - return err; -} diff --git a/src/grib_iterator_class_latlon_reduced.cc b/src/grib_iterator_class_latlon_reduced.cc deleted file mode 100644 index 53252dd88..000000000 --- a/src/grib_iterator_class_latlon_reduced.cc +++ /dev/null @@ -1,205 +0,0 @@ -/* - * (C) Copyright 2005- ECMWF. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - * - * 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. - */ - -#include "grib_api_internal.h" -#include - -/* - This is used by make_class.pl - - START_CLASS_DEF - CLASS = iterator - SUPER = grib_iterator_class_gen - IMPLEMENTS = destroy - IMPLEMENTS = init;next - MEMBERS = double *las - MEMBERS = double *los - END_CLASS_DEF - - */ - -/* START_CLASS_IMP */ - -/* - -Don't edit anything between START_CLASS_IMP and END_CLASS_IMP -Instead edit values between START_CLASS_DEF and END_CLASS_DEF -or edit "iterator.class" and rerun ./make_class.pl - -*/ - - -static void init_class (grib_iterator_class*); - -static int init (grib_iterator* i,grib_handle*,grib_arguments*); -static int next (grib_iterator* i, double *lat, double *lon, double *val); -static int destroy (grib_iterator* i); - - -typedef struct grib_iterator_latlon_reduced{ - grib_iterator it; - /* Members defined in gen */ - int carg; - const char* missingValue; - /* Members defined in latlon_reduced */ - double *las; - double *los; -} grib_iterator_latlon_reduced; - -extern grib_iterator_class* grib_iterator_class_gen; - -static grib_iterator_class _grib_iterator_class_latlon_reduced = { - &grib_iterator_class_gen, /* super */ - "latlon_reduced", /* name */ - sizeof(grib_iterator_latlon_reduced),/* size of instance */ - 0, /* inited */ - &init_class, /* init_class */ - &init, /* constructor */ - &destroy, /* destructor */ - &next, /* Next Value */ - 0, /* Previous Value */ - 0, /* Reset the counter */ - 0, /* has next values */ -}; - -grib_iterator_class* grib_iterator_class_latlon_reduced = &_grib_iterator_class_latlon_reduced; - - -static void init_class(grib_iterator_class* c) -{ - c->previous = (*(c->super))->previous; - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; -} -/* END_CLASS_IMP */ - -static int next(grib_iterator* iter, double* lat, double* lon, double* val) -{ - grib_iterator_latlon_reduced* self = (grib_iterator_latlon_reduced*)iter; - - if ((long)iter->e >= (long)(iter->nv - 1)) - return 0; - iter->e++; - - *lat = self->las[iter->e]; - *lon = self->los[iter->e]; - if (val && iter->data) { - *val = iter->data[iter->e]; - } - return 1; -} - -static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) -{ - grib_iterator_latlon_reduced* self = (grib_iterator_latlon_reduced*)iter; - - int ret = GRIB_SUCCESS; - double laf; - double lal; - long nlats; - double lof, tlof; - double lol, dimin; - long* pl; - size_t plsize = 0; - long k, j, ii; - long nlons, plmax; - double jdirinc = 0; - double idirinc = 0; - double dlon = 0; - int islocal = 0; - long nlons2 = 0; /* adjusted num of longitudes */ - - const char* latofirst = grib_arguments_get_name(h, args, self->carg++); - const char* longoffirst = grib_arguments_get_name(h, args, self->carg++); - const char* latoflast = grib_arguments_get_name(h, args, self->carg++); - const char* longoflast = grib_arguments_get_name(h, args, self->carg++); - const char* nlats_name = grib_arguments_get_name(h, args, self->carg++); - const char* jdirec = grib_arguments_get_name(h, args, self->carg++); - const char* plac = grib_arguments_get_name(h, args, self->carg++); - - if ((ret = grib_get_double_internal(h, latofirst, &laf))) - return ret; - if ((ret = grib_get_double_internal(h, longoffirst, &lof))) - return ret; - - if ((ret = grib_get_double_internal(h, latoflast, &lal))) - return ret; - if ((ret = grib_get_double_internal(h, longoflast, &lol))) - return ret; - - if ((ret = grib_get_long_internal(h, nlats_name, &nlats))) - return ret; - - if ((ret = grib_get_double_internal(h, jdirec, &jdirinc))) - return ret; - - plsize = nlats; - pl = (long*)grib_context_malloc(h->context, plsize * sizeof(long)); - grib_get_long_array_internal(h, plac, pl, &plsize); - - self->las = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); - self->los = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); - - plmax = pl[0]; - for (j = 0; j < nlats; j++) - if (plmax < pl[j]) - plmax = pl[j]; - dimin = 360.0 / plmax; - - if (360 - fabs(lol - lof) < 2 * dimin) { - dlon = 360; - islocal = 0; - } - else if (lol < lof) { - /* handle something like 150 to -120 to treat as 150 to 240 */ - /* so that dlon is 90 (not -270) */ - dlon = lol + 360.0 - lof; - islocal = 1; - } - else { - dlon = lol - lof; - islocal = 1; - } - - if (laf > lal) - jdirinc = -jdirinc; - k = 0; - for (j = 0; j < nlats; j++) { - nlons = pl[j]; - tlof = lof; - nlons2 = nlons - islocal; - /*Sometimes there are no points on a latitude! Protect against div by zero*/ - if (nlons2 < 1) - nlons2 = 1; - idirinc = dlon / nlons2; - for (ii = 0; ii < nlons; ii++) { - self->las[k] = laf; - self->los[k] = tlof; - tlof += idirinc; - k++; - } - laf += jdirinc; - } - - iter->e = -1; - grib_context_free(h->context, pl); - - return ret; -} - -static int destroy(grib_iterator* iter) -{ - grib_iterator_latlon_reduced* self = (grib_iterator_latlon_reduced*)iter; - const grib_context* c = iter->h->context; - - grib_context_free(c, self->las); - grib_context_free(c, self->los); - return GRIB_SUCCESS; -} diff --git a/src/grib_iterator_class_regular.cc b/src/grib_iterator_class_regular.cc deleted file mode 100644 index 64033b8de..000000000 --- a/src/grib_iterator_class_regular.cc +++ /dev/null @@ -1,246 +0,0 @@ -/* - * (C) Copyright 2005- ECMWF. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - * - * 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. - */ - -#include "grib_api_internal.h" -#include - -/* - This is used by make_class.pl - - START_CLASS_DEF - CLASS = iterator - SUPER = grib_iterator_class_gen - IMPLEMENTS = previous;next - IMPLEMENTS = init;destroy - MEMBERS = double *las - MEMBERS = double *los - MEMBERS = long Ni - MEMBERS = long Nj - MEMBERS = long iScansNegatively - MEMBERS = long isRotated - MEMBERS = double angleOfRotation - MEMBERS = double southPoleLat - MEMBERS = double southPoleLon - MEMBERS = long jPointsAreConsecutive - MEMBERS = long disableUnrotate - END_CLASS_DEF - - */ - -/* START_CLASS_IMP */ - -/* - -Don't edit anything between START_CLASS_IMP and END_CLASS_IMP -Instead edit values between START_CLASS_DEF and END_CLASS_DEF -or edit "iterator.class" and rerun ./make_class.pl - -*/ - - -static void init_class (grib_iterator_class*); - -static int init (grib_iterator* i,grib_handle*,grib_arguments*); -static int next (grib_iterator* i, double *lat, double *lon, double *val); -static int previous (grib_iterator* ei, double *lat, double *lon, double *val); -static int destroy (grib_iterator* i); - - -typedef struct grib_iterator_regular{ - grib_iterator it; - /* Members defined in gen */ - int carg; - const char* missingValue; - /* Members defined in regular */ - double *las; - double *los; - long Ni; - long Nj; - long iScansNegatively; - long isRotated; - double angleOfRotation; - double southPoleLat; - double southPoleLon; - long jPointsAreConsecutive; - long disableUnrotate; -} grib_iterator_regular; - -extern grib_iterator_class* grib_iterator_class_gen; - -static grib_iterator_class _grib_iterator_class_regular = { - &grib_iterator_class_gen, /* super */ - "regular", /* name */ - sizeof(grib_iterator_regular),/* size of instance */ - 0, /* inited */ - &init_class, /* init_class */ - &init, /* constructor */ - &destroy, /* destructor */ - &next, /* Next Value */ - &previous, /* Previous Value */ - 0, /* Reset the counter */ - 0, /* has next values */ -}; - -grib_iterator_class* grib_iterator_class_regular = &_grib_iterator_class_regular; - - -static void init_class(grib_iterator_class* c) -{ - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; -} -/* END_CLASS_IMP */ - -#define ITER "Regular grid Geoiterator" - -static int next(grib_iterator* iter, double* lat, double* lon, double* val) -{ - grib_iterator_regular* self = (grib_iterator_regular*)iter; - - if ((long)iter->e >= (long)(iter->nv - 1)) - return 0; - - iter->e++; - - *lat = self->las[(long)floor(iter->e / self->Ni)]; - *lon = self->los[(long)iter->e % self->Ni]; - if (val && iter->data) { - *val = iter->data[iter->e]; - } - return 1; -} - -static int previous(grib_iterator* iter, double* lat, double* lon, double* val) -{ - grib_iterator_regular* self = (grib_iterator_regular*)iter; - - if (iter->e < 0) - return 0; - *lat = self->las[(long)floor(iter->e / self->Ni)]; - *lon = self->los[iter->e % self->Ni]; - if (val && iter->data) { - *val = iter->data[iter->e]; - } - iter->e--; - - return 1; -} - -static int destroy(grib_iterator* iter) -{ - grib_iterator_regular* self = (grib_iterator_regular*)iter; - const grib_context* c = iter->h->context; - grib_context_free(c, self->las); - grib_context_free(c, self->los); - return GRIB_SUCCESS; -} - -static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) -{ - grib_iterator_regular* self = (grib_iterator_regular*)iter; - int ret = GRIB_SUCCESS; - - long Ni; /* Number of points along a parallel = Nx */ - long Nj; /* Number of points along a meridian = Ny */ - double idir, idir_coded, lon1, lon2; - long loi; - - const char* s_lon1 = grib_arguments_get_name(h, args, self->carg++); - const char* s_idir = grib_arguments_get_name(h, args, self->carg++); - const char* s_Ni = grib_arguments_get_name(h, args, self->carg++); - const char* s_Nj = grib_arguments_get_name(h, args, self->carg++); - const char* s_iScansNeg = grib_arguments_get_name(h, args, self->carg++); - - if ((ret = grib_get_double_internal(h, s_lon1, &lon1))) - return ret; - if ((ret = grib_get_double_internal(h, "longitudeOfLastGridPointInDegrees", &lon2))) - return ret; - if ((ret = grib_get_double_internal(h, s_idir, &idir))) // can be GRIB_MISSING_DOUBLE - return ret; - idir_coded = idir; - if ((ret = grib_get_long_internal(h, s_Ni, &Ni))) - return ret; - if (grib_is_missing(h, s_Ni, &ret) && ret == GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Key %s cannot be 'missing' for a regular grid!", ITER, s_Ni); - return GRIB_WRONG_GRID; - } - - if ((ret = grib_get_long_internal(h, s_Nj, &Nj))) - return ret; - if (grib_is_missing(h, s_Nj, &ret) && ret == GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Key %s cannot be 'missing' for a regular grid!", ITER, s_Nj); - return GRIB_WRONG_GRID; - } - - if (Ni*Nj != iter->nv) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Ni*Nj!=numberOfDataPoints (%ld*%ld!=%zu)", ITER, Ni, Nj, iter->nv); - return GRIB_WRONG_GRID; - } - - if ((ret = grib_get_long_internal(h, s_iScansNeg, &self->iScansNegatively))) - return ret; - - /* GRIB-801: Careful of case with a single point! Ni==1 */ - if (Ni > 1) { - /* Note: If first and last longitudes are equal I assume you wanna go round the globe */ - if (self->iScansNegatively) { - if (lon1 > lon2) { - idir = (lon1 - lon2) / (Ni - 1); - } - else { - idir = (lon1 + 360.0 - lon2) / (Ni - 1); - } - } - else { - if (lon2 > lon1) { - idir = (lon2 - lon1) / (Ni - 1); - } - else { - idir = (lon2 + 360.0 - lon1) / (Ni - 1); - } - } - } - if (self->iScansNegatively) { - idir = -idir; - } - else { - if (lon1 + (Ni - 2) * idir > 360) - lon1 -= 360; - /*See ECC-704, GRIB-396*/ - /*else if ( (lon1+(Ni-1)*idir)-360 > epsilon ){ - idir=360.0/(float)Ni; - }*/ - } - - self->Ni = Ni; - self->Nj = Nj; - - self->las = (double*)grib_context_malloc(h->context, Nj * sizeof(double)); - self->los = (double*)grib_context_malloc(h->context, Ni * sizeof(double)); - - if (idir != idir_coded) { - grib_context_log(h->context, GRIB_LOG_DEBUG, "%s: Using idir=%g (coded value=%g)", ITER, idir, idir_coded); - } - - for (loi = 0; loi < Ni; loi++) { - self->los[loi] = lon1; - lon1 += idir; - } - - // ECC-1406: Due to rounding, errors can accumulate. - // So we ensure the last longitude is longitudeOfLastGridPointInDegrees - // Also see ECC-1671, ECC-1708 - if (lon2 > 0) { - lon2 = normalise_longitude_in_degrees(lon2); - } - self->los[Ni-1] = lon2; - - return ret; -} diff --git a/src/grib_iterator_factory.h b/src/grib_iterator_factory.h index 206a6d140..ed247bebd 100644 --- a/src/grib_iterator_factory.h +++ b/src/grib_iterator_factory.h @@ -1,13 +1,13 @@ -/* This file is automatically generated by ./make_class.pl, do not edit */ -{ "gaussian", &grib_iterator_class_gaussian, }, -{ "gaussian_reduced", &grib_iterator_class_gaussian_reduced, }, -{ "gen", &grib_iterator_class_gen, }, -{ "healpix", &grib_iterator_class_healpix, }, -{ "lambert_azimuthal_equal_area", &grib_iterator_class_lambert_azimuthal_equal_area, }, -{ "lambert_conformal", &grib_iterator_class_lambert_conformal, }, -{ "latlon", &grib_iterator_class_latlon, }, -{ "latlon_reduced", &grib_iterator_class_latlon_reduced, }, -{ "mercator", &grib_iterator_class_mercator, }, -{ "polar_stereographic", &grib_iterator_class_polar_stereographic, }, -{ "regular", &grib_iterator_class_regular, }, -{ "space_view", &grib_iterator_class_space_view, }, +/* This file is automatically generated by ./make.pl, do not edit */ +{ "gaussian", &grib_iterator_gaussian, }, +{ "gaussian_reduced", &grib_iterator_gaussian_reduced, }, +//{ "gen", &grib_iterator_gen, }, +{ "healpix", &grib_iterator_healpix, }, +{ "lambert_azimuthal_equal_area", &grib_iterator_lambert_azimuthal_equal_area, }, +{ "lambert_conformal", &grib_iterator_lambert_conformal, }, +{ "latlon", &grib_iterator_latlon, }, +{ "latlon_reduced", &grib_iterator_latlon_reduced, }, +{ "mercator", &grib_iterator_mercator, }, +{ "polar_stereographic", &grib_iterator_polar_stereographic, }, +{ "regular", &grib_iterator_regular, }, +{ "space_view", &grib_iterator_space_view, }, diff --git a/src/grib_keys_iterator.cc b/src/grib_keys_iterator.cc index 06c112c04..103f98591 100644 --- a/src/grib_keys_iterator.cc +++ b/src/grib_keys_iterator.cc @@ -110,31 +110,31 @@ static int skip(grib_keys_iterator* kiter) { /* TODO: set the section to hidden, to speed up that */ /* if(grib_get_sub_section(kiter->current)) */ - if (kiter->current->sub_section) + if (kiter->current->sub_section_) return 1; - if (kiter->current->flags & GRIB_ACCESSOR_FLAG_HIDDEN) + if (kiter->current->flags_ & GRIB_ACCESSOR_FLAG_HIDDEN) return 1; - if (kiter->current->flags & kiter->accessor_flags_skip) + if (kiter->current->flags_ & kiter->accessor_flags_skip) return 1; - if ((kiter->filter_flags & GRIB_KEYS_ITERATOR_SKIP_COMPUTED) && kiter->current->length == 0) + if ((kiter->filter_flags & GRIB_KEYS_ITERATOR_SKIP_COMPUTED) && kiter->current->length_ == 0) return 1; - if ((kiter->filter_flags & GRIB_KEYS_ITERATOR_SKIP_CODED) && kiter->current->length != 0) + if ((kiter->filter_flags & GRIB_KEYS_ITERATOR_SKIP_CODED) && kiter->current->length_ != 0) return 1; if (kiter->name_space) { kiter->match = 0; while (kiter->match < MAX_ACCESSOR_NAMES) { - if (kiter->current->all_name_spaces[kiter->match] != NULL) { - if (grib_inline_strcmp(kiter->current->all_name_spaces[kiter->match], kiter->name_space) == 0) { + if (kiter->current->all_name_spaces_[kiter->match] != NULL) { + if (grib_inline_strcmp(kiter->current->all_name_spaces_[kiter->match], kiter->name_space) == 0) { if (kiter->seen) { - if (was_seen(kiter, kiter->current->all_names[kiter->match])) + if (was_seen(kiter, kiter->current->all_names_[kiter->match])) return 1; - mark_seen(kiter, kiter->current->all_names[kiter->match]); + mark_seen(kiter, kiter->current->all_names_[kiter->match]); } return 0; } @@ -146,13 +146,13 @@ static int skip(grib_keys_iterator* kiter) } if (kiter->seen) { - if (was_seen(kiter, kiter->current->name)) + if (was_seen(kiter, kiter->current->name_)) return 1; - mark_seen(kiter, kiter->current->name); + mark_seen(kiter, kiter->current->name_); } /* ECC-1410 */ - if (kiter->current->all_names[0] == NULL) + if (kiter->current->all_names_[0] == NULL) return 1; return 0; @@ -178,7 +178,7 @@ const char* grib_keys_iterator_get_name(const grib_keys_iterator* kiter) { /* if(kiter->name_space) */ Assert(kiter->current); - return kiter->current->all_names[kiter->match]; + return kiter->current->all_names_[kiter->match]; } grib_accessor* grib_keys_iterator_get_accessor(grib_keys_iterator* kiter) diff --git a/src/grib_loader_from_handle.cc b/src/grib_loader_from_handle.cc index f26c68c21..ea85b0310 100644 --- a/src/grib_loader_from_handle.cc +++ b/src/grib_loader_from_handle.cc @@ -20,9 +20,9 @@ static int copy_values(grib_handle* h, grib_accessor* ga) /* printf("copy_values stack is %ld\n",(long)h->values_stack);*/ for (j = 0; j < h->values_stack; j++) { for (i = 0; i < h->values_count[j]; i++) { - for (k = 0; (k < MAX_ACCESSOR_NAMES) && (ga->all_names[k] != NULL); k++) { + for (k = 0; (k < MAX_ACCESSOR_NAMES) && (ga->all_names_[k] != NULL); k++) { /*printf("copy_values: %s %s\n",h->values[j][i].name,ga->all_names[k]);*/ - if (strcmp(h->values[j][i].name, ga->all_names[k]) == 0) { + if (strcmp(h->values[j][i].name, ga->all_names_[k]) == 0) { size_t len = 1; /*printf("SET VALUES %s\n",h->values[j][i].name);*/ switch (h->values[j][i].type) { @@ -75,21 +75,21 @@ int grib_init_accessor_from_handle(grib_loader* loader, grib_accessor* ga, grib_ grib_handle* g; grib_accessor* ao = NULL; int e, pack_missing = 0; - grib_context_log(h->context, GRIB_LOG_DEBUG, "XXXXX Copying %s", ga->name); + grib_context_log(h->context, GRIB_LOG_DEBUG, "XXXXX Copying %s", ga->name_); if (default_value) { grib_context_log(h->context, GRIB_LOG_DEBUG, "Copying: setting %s to default value", - ga->name); + ga->name_); ga->pack_expression(grib_arguments_get_expression(h, default_value, 0)); } - if ((ga->flags & GRIB_ACCESSOR_FLAG_NO_COPY) || - ((ga->flags & GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC) && + if ((ga->flags_ & GRIB_ACCESSOR_FLAG_NO_COPY) || + ((ga->flags_ & GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC) && loader->changing_edition) || - (ga->flags & GRIB_ACCESSOR_FLAG_FUNCTION) || - ((ga->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) && - !(ga->flags & GRIB_ACCESSOR_FLAG_COPY_OK))) { - grib_context_log(h->context, GRIB_LOG_DEBUG, "Copying %s ignored", ga->name); + (ga->flags_ & GRIB_ACCESSOR_FLAG_FUNCTION) || + ((ga->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) && + !(ga->flags_ & GRIB_ACCESSOR_FLAG_COPY_OK))) { + grib_context_log(h->context, GRIB_LOG_DEBUG, "Copying %s ignored", ga->name_); return GRIB_SUCCESS; } @@ -111,7 +111,7 @@ int grib_init_accessor_from_handle(grib_loader* loader, grib_accessor* ga, grib_ g = h; while (g) { if (copy_values(g, ga) == GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_DEBUG, "Copying: setting %s to multi-set-value", ga->name); + grib_context_log(h->context, GRIB_LOG_DEBUG, "Copying: setting %s to multi-set-value", ga->name_); return GRIB_SUCCESS; } g = g->main; @@ -121,12 +121,12 @@ int grib_init_accessor_from_handle(grib_loader* loader, grib_accessor* ga, grib_ /* Check if the same name exists in the original message ... */ k = 0; while ((k < MAX_ACCESSOR_NAMES) && - ((name = ga->all_names[k]) != NULL) && + ((name = ga->all_names_[k]) != NULL) && ((ret = grib_get_size(h, name, &len)) != GRIB_SUCCESS)) k++; if (ret != GRIB_SUCCESS) { - name = ga->name; + name = ga->name_; #ifdef MY_DEBUG if (first) { missing = codes_getenv("ECCODES_PRINT_MISSING"); @@ -152,16 +152,16 @@ int grib_init_accessor_from_handle(grib_loader* loader, grib_accessor* ga, grib_ return GRIB_SUCCESS; } - if ((ga->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) && grib_is_missing(h, name, &e) && e == GRIB_SUCCESS && len == 1) { + if ((ga->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) && grib_is_missing(h, name, &e) && e == GRIB_SUCCESS && len == 1) { ga->pack_missing(); pack_missing = 1; } const long ga_type = ga->get_native_type(); - if ((ga->flags & GRIB_ACCESSOR_FLAG_COPY_IF_CHANGING_EDITION) && !loader->changing_edition) { + if ((ga->flags_ & GRIB_ACCESSOR_FLAG_COPY_IF_CHANGING_EDITION) && !loader->changing_edition) { // See ECC-1560 and ECC-1644 - grib_context_log(h->context, GRIB_LOG_DEBUG, "Skipping %s (only copied if changing edition)", ga->name); + grib_context_log(h->context, GRIB_LOG_DEBUG, "Skipping %s (only copied if changing edition)", ga->name_); return GRIB_SUCCESS; } @@ -184,8 +184,8 @@ int grib_init_accessor_from_handle(grib_loader* loader, grib_accessor* ga, grib_ ret = grib_get_long_array_internal(h, name, lval, &len); if (ret == GRIB_SUCCESS) { grib_context_log(h->context, GRIB_LOG_DEBUG, "Copying %d long(s) %d to %s", len, lval[0], name); - if (ga->same) { - ret = grib_set_long_array(grib_handle_of_accessor(ga), ga->name, lval, len); + if (ga->same_) { + ret = grib_set_long_array(grib_handle_of_accessor(ga), ga->name_, lval, len); /* Allow for lists to be resized */ if ((ret == GRIB_WRONG_ARRAY_SIZE || ret == GRIB_ARRAY_TOO_SMALL) && loader->list_is_resized) @@ -198,7 +198,7 @@ int grib_init_accessor_from_handle(grib_loader* loader, grib_accessor* ga, grib_ } else { /* If we have just one key of type long which has one octet, then do not exceed maximum value */ - const long num_octets = ga->length; + const long num_octets = ga->length_; if (len == 1 && num_octets == 1 && *lval > 255) { *lval = 0; /* Reset to a reasonable value */ } @@ -216,8 +216,8 @@ int grib_init_accessor_from_handle(grib_loader* loader, grib_accessor* ga, grib_ ret = grib_get_double_array(h, name, dval, &len); /* GRIB-898 */ if (ret == GRIB_SUCCESS) { grib_context_log(h->context, GRIB_LOG_DEBUG, "Copying %d double(s) %g to %s", len, dval[0], name); - if (ga->same) { - ret = grib_set_double_array(grib_handle_of_accessor(ga), ga->name, dval, len); + if (ga->same_) { + ret = grib_set_double_array(grib_handle_of_accessor(ga), ga->name_, dval, len); /* Allow for lists to be resized */ if ((ret == GRIB_WRONG_ARRAY_SIZE || ret == GRIB_ARRAY_TOO_SMALL) && loader->list_is_resized) @@ -251,7 +251,7 @@ int grib_init_accessor_from_handle(grib_loader* loader, grib_accessor* ga, grib_ default: grib_context_log(h->context, GRIB_LOG_ERROR, - "Copying %s, cannot establish type %ld [%s]", name, ga->get_native_type(), ga->creator->cclass->name); + "Copying %s, cannot establish type %ld [%s]", name, ga->get_native_type(), ga->creator_->cclass->name); break; } diff --git a/src/grib_nearest.cc b/src/grib_nearest.cc index d440771f7..d020fb269 100644 --- a/src/grib_nearest.cc +++ b/src/grib_nearest.cc @@ -322,7 +322,7 @@ int grib_nearest_find_generic( if ((ret = grib_nearest_get_radius(h, &radiusInKm)) != GRIB_SUCCESS) return ret; - neighbours = (PointStore*)grib_context_malloc(nearest->context, nvalues * sizeof(PointStore)); + neighbours = (PointStore*)grib_context_malloc(h->context, nvalues * sizeof(PointStore)); for (i = 0; i < nvalues; ++i) { neighbours[i].m_dist = 1e10; /* set all distances to large number to begin with */ neighbours[i].m_lat = 0; @@ -345,14 +345,14 @@ int grib_nearest_find_generic( *out_lats_count = (int)nvalues; if (*out_lats) - grib_context_free(nearest->context, *out_lats); - *out_lats = (double*)grib_context_malloc(nearest->context, nvalues * sizeof(double)); + grib_context_free(h->context, *out_lats); + *out_lats = (double*)grib_context_malloc(h->context, nvalues * sizeof(double)); if (!*out_lats) return GRIB_OUT_OF_MEMORY; if (*out_lons) - grib_context_free(nearest->context, *out_lons); - *out_lons = (double*)grib_context_malloc(nearest->context, nvalues * sizeof(double)); + grib_context_free(h->context, *out_lons); + *out_lons = (double*)grib_context_malloc(h->context, nvalues * sizeof(double)); if (!*out_lons) return GRIB_OUT_OF_MEMORY; @@ -418,7 +418,7 @@ int grib_nearest_find_generic( /* GRIB_NEAREST_SAME_XXX not yet implemented */ if (!*out_distances) { - *out_distances = (double*)grib_context_malloc(nearest->context, 4 * sizeof(double)); + *out_distances = (double*)grib_context_malloc(h->context, 4 * sizeof(double)); } (*out_distances)[0] = neighbours[0].m_dist; (*out_distances)[1] = neighbours[1].m_dist; diff --git a/src/grib_nearest_class_gen.cc b/src/grib_nearest_class_gen.cc index 7564dc790..c97e6b8b9 100644 --- a/src/grib_nearest_class_gen.cc +++ b/src/grib_nearest_class_gen.cc @@ -81,16 +81,15 @@ static int init(grib_nearest* nearest, grib_handle* h, grib_arguments* args) self->radius = grib_arguments_get_name(h, args, self->cargs++); nearest->values = NULL; - nearest->context = h->context; - return ret; } static int destroy(grib_nearest* nearest) { + grib_context* c = grib_context_get_default(); if (nearest->values) - grib_context_free(nearest->context, nearest->values); - grib_context_free(nearest->context, nearest); + grib_context_free(c, nearest->values); + grib_context_free(c, nearest); return GRIB_SUCCESS; } diff --git a/src/grib_nearest_class_healpix.cc b/src/grib_nearest_class_healpix.cc index 915556a76..d8618ba34 100644 --- a/src/grib_nearest_class_healpix.cc +++ b/src/grib_nearest_class_healpix.cc @@ -124,11 +124,13 @@ static int find(grib_nearest* nearest, grib_handle* h, static int destroy(grib_nearest* nearest) { grib_nearest_healpix* self = (grib_nearest_healpix*)nearest; - if (self->lats) grib_context_free(nearest->context, self->lats); - if (self->lons) grib_context_free(nearest->context, self->lons); - if (self->i) grib_context_free(nearest->context, self->i); - if (self->j) grib_context_free(nearest->context, self->j); - if (self->k) grib_context_free(nearest->context, self->k); - if (self->distances) grib_context_free(nearest->context, self->distances); + grib_context* c = grib_context_get_default(); + + if (self->lats) grib_context_free(c, self->lats); + if (self->lons) grib_context_free(c, self->lons); + if (self->i) grib_context_free(c, self->i); + if (self->j) grib_context_free(c, self->j); + if (self->k) grib_context_free(c, self->k); + if (self->distances) grib_context_free(c, self->distances); return GRIB_SUCCESS; } diff --git a/src/grib_nearest_class_lambert_azimuthal_equal_area.cc b/src/grib_nearest_class_lambert_azimuthal_equal_area.cc index 911827ffd..951f3e571 100644 --- a/src/grib_nearest_class_lambert_azimuthal_equal_area.cc +++ b/src/grib_nearest_class_lambert_azimuthal_equal_area.cc @@ -122,11 +122,13 @@ static int find(grib_nearest* nearest, grib_handle* h, static int destroy(grib_nearest* nearest) { grib_nearest_lambert_azimuthal_equal_area* self = (grib_nearest_lambert_azimuthal_equal_area*)nearest; - if (self->lats) grib_context_free(nearest->context, self->lats); - if (self->lons) grib_context_free(nearest->context, self->lons); - if (self->i) grib_context_free(nearest->context, self->i); - if (self->j) grib_context_free(nearest->context, self->j); - if (self->k) grib_context_free(nearest->context, self->k); - if (self->distances) grib_context_free(nearest->context, self->distances); + grib_context* c = grib_context_get_default(); + + if (self->lats) grib_context_free(c, self->lats); + if (self->lons) grib_context_free(c, self->lons); + if (self->i) grib_context_free(c, self->i); + if (self->j) grib_context_free(c, self->j); + if (self->k) grib_context_free(c, self->k); + if (self->distances) grib_context_free(c, self->distances); return GRIB_SUCCESS; } diff --git a/src/grib_nearest_class_lambert_conformal.cc b/src/grib_nearest_class_lambert_conformal.cc index 883f3a868..9f96c6489 100644 --- a/src/grib_nearest_class_lambert_conformal.cc +++ b/src/grib_nearest_class_lambert_conformal.cc @@ -122,11 +122,13 @@ static int find(grib_nearest* nearest, grib_handle* h, static int destroy(grib_nearest* nearest) { grib_nearest_lambert_conformal* self = (grib_nearest_lambert_conformal*)nearest; - if (self->lats) grib_context_free(nearest->context, self->lats); - if (self->lons) grib_context_free(nearest->context, self->lons); - if (self->i) grib_context_free(nearest->context, self->i); - if (self->j) grib_context_free(nearest->context, self->j); - if (self->k) grib_context_free(nearest->context, self->k); - if (self->distances) grib_context_free(nearest->context, self->distances); + grib_context* c = grib_context_get_default(); + + if (self->lats) grib_context_free(c, self->lats); + if (self->lons) grib_context_free(c, self->lons); + if (self->i) grib_context_free(c, self->i); + if (self->j) grib_context_free(c, self->j); + if (self->k) grib_context_free(c, self->k); + if (self->distances) grib_context_free(c, self->distances); return GRIB_SUCCESS; } diff --git a/src/grib_nearest_class_latlon_reduced.cc b/src/grib_nearest_class_latlon_reduced.cc index e5c503e99..ad07f3816 100644 --- a/src/grib_nearest_class_latlon_reduced.cc +++ b/src/grib_nearest_class_latlon_reduced.cc @@ -98,7 +98,7 @@ static int init(grib_nearest* nearest, grib_handle* h, grib_arguments* args) self->j = (size_t*)grib_context_malloc(h->context, 2 * sizeof(size_t)); if (!self->j) return GRIB_OUT_OF_MEMORY; - self->k = (size_t*)grib_context_malloc(nearest->context, 4 * sizeof(size_t)); + self->k = (size_t*)grib_context_malloc(h->context, 4 * sizeof(size_t)); if (!self->k) return GRIB_OUT_OF_MEMORY; @@ -195,15 +195,15 @@ static int find_global(grib_nearest* nearest, grib_handle* h, self->lats_count = n; if (self->lats) - grib_context_free(nearest->context, self->lats); - self->lats = (double*)grib_context_malloc(nearest->context, + grib_context_free(h->context, self->lats); + self->lats = (double*)grib_context_malloc(h->context, self->lats_count * sizeof(double)); if (!self->lats) return GRIB_OUT_OF_MEMORY; if (self->lons) - grib_context_free(nearest->context, self->lons); - self->lons = (double*)grib_context_malloc(nearest->context, + grib_context_free(h->context, self->lons); + self->lons = (double*)grib_context_malloc(h->context, nearest->values_count * sizeof(double)); if (!self->lons) return GRIB_OUT_OF_MEMORY; @@ -300,7 +300,7 @@ static int find_global(grib_nearest* nearest, grib_handle* h, } if (!self->distances) - self->distances = (double*)grib_context_malloc(nearest->context, 4 * sizeof(double)); + self->distances = (double*)grib_context_malloc(h->context, 4 * sizeof(double)); if (!self->distances) return GRIB_OUT_OF_MEMORY; @@ -420,16 +420,17 @@ static int find_global(grib_nearest* nearest, grib_handle* h, static int destroy(grib_nearest* nearest) { grib_nearest_latlon_reduced* self = (grib_nearest_latlon_reduced*)nearest; + grib_context* c = grib_context_get_default(); if (self->lats) - grib_context_free(nearest->context, self->lats); + grib_context_free(c, self->lats); if (self->lons) - grib_context_free(nearest->context, self->lons); + grib_context_free(c, self->lons); if (self->j) - grib_context_free(nearest->context, self->j); + grib_context_free(c, self->j); if (self->k) - grib_context_free(nearest->context, self->k); + grib_context_free(c, self->k); if (self->distances) - grib_context_free(nearest->context, self->distances); + grib_context_free(c, self->distances); return GRIB_SUCCESS; } diff --git a/src/grib_nearest_class_mercator.cc b/src/grib_nearest_class_mercator.cc index c966012d4..a160d9dfb 100644 --- a/src/grib_nearest_class_mercator.cc +++ b/src/grib_nearest_class_mercator.cc @@ -124,11 +124,13 @@ static int find(grib_nearest* nearest, grib_handle* h, static int destroy(grib_nearest* nearest) { grib_nearest_mercator* self = (grib_nearest_mercator*)nearest; - if (self->lats) grib_context_free(nearest->context, self->lats); - if (self->lons) grib_context_free(nearest->context, self->lons); - if (self->i) grib_context_free(nearest->context, self->i); - if (self->j) grib_context_free(nearest->context, self->j); - if (self->k) grib_context_free(nearest->context, self->k); - if (self->distances) grib_context_free(nearest->context, self->distances); + grib_context* c = grib_context_get_default(); + + if (self->lats) grib_context_free(c, self->lats); + if (self->lons) grib_context_free(c, self->lons); + if (self->i) grib_context_free(c, self->i); + if (self->j) grib_context_free(c, self->j); + if (self->k) grib_context_free(c, self->k); + if (self->distances) grib_context_free(c, self->distances); return GRIB_SUCCESS; } diff --git a/src/grib_nearest_class_polar_stereographic.cc b/src/grib_nearest_class_polar_stereographic.cc index a160db445..7f04e4ef8 100644 --- a/src/grib_nearest_class_polar_stereographic.cc +++ b/src/grib_nearest_class_polar_stereographic.cc @@ -122,11 +122,13 @@ static int find(grib_nearest* nearest, grib_handle* h, static int destroy(grib_nearest* nearest) { grib_nearest_polar_stereographic* self = (grib_nearest_polar_stereographic*)nearest; - if (self->lats) grib_context_free(nearest->context, self->lats); - if (self->lons) grib_context_free(nearest->context, self->lons); - if (self->i) grib_context_free(nearest->context, self->i); - if (self->j) grib_context_free(nearest->context, self->j); - if (self->k) grib_context_free(nearest->context, self->k); - if (self->distances) grib_context_free(nearest->context, self->distances); + grib_context* c = grib_context_get_default(); + + if (self->lats) grib_context_free(c, self->lats); + if (self->lons) grib_context_free(c, self->lons); + if (self->i) grib_context_free(c, self->i); + if (self->j) grib_context_free(c, self->j); + if (self->k) grib_context_free(c, self->k); + if (self->distances) grib_context_free(c, self->distances); return GRIB_SUCCESS; } diff --git a/src/grib_nearest_class_reduced.cc b/src/grib_nearest_class_reduced.cc index 713570264..ffc8eaad8 100644 --- a/src/grib_nearest_class_reduced.cc +++ b/src/grib_nearest_class_reduced.cc @@ -106,7 +106,7 @@ static int init(grib_nearest* nearest, grib_handle* h, grib_arguments* args) self->rotated = -1; if (!self->j) return GRIB_OUT_OF_MEMORY; - self->k = (size_t*)grib_context_malloc(nearest->context, NUM_NEIGHBOURS * sizeof(size_t)); + self->k = (size_t*)grib_context_malloc(h->context, NUM_NEIGHBOURS * sizeof(size_t)); if (!self->k) return GRIB_OUT_OF_MEMORY; grib_get_long(h, "global", &self->global); @@ -251,16 +251,14 @@ static int find_global(grib_nearest* nearest, grib_handle* h, self->lats_count = n; if (self->lats) - grib_context_free(nearest->context, self->lats); - self->lats = (double*)grib_context_malloc(nearest->context, - self->lats_count * sizeof(double)); + grib_context_free(h->context, self->lats); + self->lats = (double*)grib_context_malloc(h->context, self->lats_count * sizeof(double)); if (!self->lats) return GRIB_OUT_OF_MEMORY; if (self->lons) - grib_context_free(nearest->context, self->lons); - self->lons = (double*)grib_context_malloc(nearest->context, - nearest->values_count * sizeof(double)); + grib_context_free(h->context, self->lons); + self->lons = (double*)grib_context_malloc(h->context, nearest->values_count * sizeof(double)); if (!self->lons) return GRIB_OUT_OF_MEMORY; @@ -321,12 +319,11 @@ static int find_global(grib_nearest* nearest, grib_handle* h, } if (!self->distances) - self->distances = (double*)grib_context_malloc(nearest->context, NUM_NEIGHBOURS * sizeof(double)); + self->distances = (double*)grib_context_malloc(h->context, NUM_NEIGHBOURS * sizeof(double)); if (!self->distances) return GRIB_OUT_OF_MEMORY; - grib_binary_search(self->lats, ilat - 1, inlat, - &(self->j[0]), &(self->j[1])); + grib_binary_search(self->lats, ilat - 1, inlat, &(self->j[0]), &(self->j[1])); plsize = self->lats_count; if ((err = grib_get_size(h, self->pl, &plsize)) != GRIB_SUCCESS) @@ -522,16 +519,13 @@ static int find_global(grib_nearest* nearest, grib_handle* h, static int destroy(grib_nearest* nearest) { grib_nearest_reduced* self = (grib_nearest_reduced*)nearest; - if (self->lats) - grib_context_free(nearest->context, self->lats); - if (self->lons) - grib_context_free(nearest->context, self->lons); - if (self->j) - grib_context_free(nearest->context, self->j); - if (self->k) - grib_context_free(nearest->context, self->k); - if (self->distances) - grib_context_free(nearest->context, self->distances); + grib_context* c = grib_context_get_default(); + + if (self->lats) grib_context_free(c, self->lats); + if (self->lons) grib_context_free(c, self->lons); + if (self->j) grib_context_free(c, self->j); + if (self->k) grib_context_free(c, self->k); + if (self->distances) grib_context_free(c, self->distances); return GRIB_SUCCESS; } diff --git a/src/grib_nearest_class_regular.cc b/src/grib_nearest_class_regular.cc index adb5320a1..5d591a6e3 100644 --- a/src/grib_nearest_class_regular.cc +++ b/src/grib_nearest_class_regular.cc @@ -128,6 +128,7 @@ static int find(grib_nearest* nearest, grib_handle* h, double lat = 0, lon = 0; const bool is_rotated = is_rotated_grid(h); double angleOfRotation = 0, southPoleLat = 0, southPoleLon = 0; + grib_context* c = h->context; while (inlon < 0) inlon += 360; @@ -194,16 +195,14 @@ static int find(grib_nearest* nearest, grib_handle* h, self->lats_count = n; if (self->lats) - grib_context_free(nearest->context, self->lats); - self->lats = (double*)grib_context_malloc(nearest->context, - self->lats_count * sizeof(double)); + grib_context_free(c, self->lats); + self->lats = (double*)grib_context_malloc(c, self->lats_count * sizeof(double)); if (!self->lats) return GRIB_OUT_OF_MEMORY; if (self->lons) - grib_context_free(nearest->context, self->lons); - self->lons = (double*)grib_context_malloc(nearest->context, - self->lons_count * sizeof(double)); + grib_context_free(c, self->lons); + self->lons = (double*)grib_context_malloc(c, self->lons_count * sizeof(double)); if (!self->lons) return GRIB_OUT_OF_MEMORY; @@ -289,9 +288,9 @@ static int find(grib_nearest* nearest, grib_handle* h, &(self->i[0]), &(self->i[1])); if (!self->distances) - self->distances = (double*)grib_context_malloc(nearest->context, NUM_NEIGHBOURS * sizeof(double)); + self->distances = (double*)grib_context_malloc(c, NUM_NEIGHBOURS * sizeof(double)); if (!self->k) - self->k = (size_t*)grib_context_malloc(nearest->context, NUM_NEIGHBOURS * sizeof(size_t)); + self->k = (size_t*)grib_context_malloc(c, NUM_NEIGHBOURS * sizeof(size_t)); kk = 0; for (jj = 0; jj < 2; jj++) { for (ii = 0; ii < 2; ii++) { @@ -310,7 +309,7 @@ static int find(grib_nearest* nearest, grib_handle* h, * First unpack all the values into an array. Then when we need the 4 points * we just index into this array so no need to call grib_get_double_element_internal * - * if (nearest->values) grib_context_free(nearest->context,nearest->values); + * if (nearest->values) grib_context_free(c,nearest->values); * nearest->values = grib_context_malloc(h->context,nvalues*sizeof(double)); * if (!nearest->values) return GRIB_OUT_OF_MEMORY; * ret = grib_get_double_array(h, self->values_key, nearest->values ,&nvalues); @@ -362,17 +361,13 @@ static int find(grib_nearest* nearest, grib_handle* h, static int destroy(grib_nearest* nearest) { grib_nearest_regular* self = (grib_nearest_regular*)nearest; - if (self->lats) - grib_context_free(nearest->context, self->lats); - if (self->lons) - grib_context_free(nearest->context, self->lons); - if (self->i) - grib_context_free(nearest->context, self->i); - if (self->j) - grib_context_free(nearest->context, self->j); - if (self->k) - grib_context_free(nearest->context, self->k); - if (self->distances) - grib_context_free(nearest->context, self->distances); + grib_context* c = grib_context_get_default(); + + if (self->lats) grib_context_free(c, self->lats); + if (self->lons) grib_context_free(c, self->lons); + if (self->i) grib_context_free(c, self->i); + if (self->j) grib_context_free(c, self->j); + if (self->k) grib_context_free(c, self->k); + if (self->distances) grib_context_free(c, self->distances); return GRIB_SUCCESS; } diff --git a/src/grib_nearest_class_space_view.cc b/src/grib_nearest_class_space_view.cc index 8d471b8fa..ccba897b9 100644 --- a/src/grib_nearest_class_space_view.cc +++ b/src/grib_nearest_class_space_view.cc @@ -122,11 +122,13 @@ static int find(grib_nearest* nearest, grib_handle* h, static int destroy(grib_nearest* nearest) { grib_nearest_space_view* self = (grib_nearest_space_view*)nearest; - if (self->lats) grib_context_free(nearest->context, self->lats); - if (self->lons) grib_context_free(nearest->context, self->lons); - if (self->i) grib_context_free(nearest->context, self->i); - if (self->j) grib_context_free(nearest->context, self->j); - if (self->k) grib_context_free(nearest->context, self->k); - if (self->distances) grib_context_free(nearest->context, self->distances); + grib_context* c = grib_context_get_default(); + + if (self->lats) grib_context_free(c, self->lats); + if (self->lons) grib_context_free(c, self->lons); + if (self->i) grib_context_free(c, self->i); + if (self->j) grib_context_free(c, self->j); + if (self->k) grib_context_free(c, self->k); + if (self->distances) grib_context_free(c, self->distances); return GRIB_SUCCESS; } diff --git a/src/grib_oarray.cc b/src/grib_oarray.cc index 6c5e06d45..8b5f36cfd 100644 --- a/src/grib_oarray.cc +++ b/src/grib_oarray.cc @@ -10,11 +10,10 @@ #include "grib_api_internal.h" -grib_oarray* grib_oarray_new(grib_context* c, size_t size, size_t incsize) +grib_oarray* grib_oarray_new(size_t size, size_t incsize) { grib_oarray* v = NULL; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v = (grib_oarray*)grib_context_malloc_clear(c, sizeof(grib_oarray)); if (!v) { return NULL; @@ -23,7 +22,6 @@ grib_oarray* grib_oarray_new(grib_context* c, size_t size, size_t incsize) v->n = 0; v->incsize = incsize; v->v = (void**)grib_context_malloc_clear(c, sizeof(char*) * size); - v->context = c; if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(char*) * size); return NULL; @@ -34,9 +32,7 @@ grib_oarray* grib_oarray_new(grib_context* c, size_t size, size_t incsize) static grib_oarray* grib_oarray_resize(grib_oarray* v) { const size_t newsize = v->incsize + v->size; - grib_context* c = v->context; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v->v = (void**)grib_context_realloc(c, v->v, newsize * sizeof(char*)); v->size = newsize; @@ -47,12 +43,12 @@ static grib_oarray* grib_oarray_resize(grib_oarray* v) return v; } -grib_oarray* grib_oarray_push(grib_context* c, grib_oarray* v, void* val) +grib_oarray* grib_oarray_push(grib_oarray* v, void* val) { size_t start_size = 100; size_t start_incsize = 100; if (!v) - v = grib_oarray_new(c, start_size, start_incsize); + v = grib_oarray_new(start_size, start_incsize); if (v->n >= v->size) v = grib_oarray_resize(v); @@ -61,12 +57,11 @@ grib_oarray* grib_oarray_push(grib_context* c, grib_oarray* v, void* val) return v; } -void grib_oarray_delete(grib_context* c, grib_oarray* v) +void grib_oarray_delete(grib_oarray* v) { if (!v) return; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); if (v->v) grib_context_free(c, v->v); grib_context_free(c, v); diff --git a/src/grib_parse_utils.cc b/src/grib_parse_utils.cc index 555c869b9..f348516da 100644 --- a/src/grib_parse_utils.cc +++ b/src/grib_parse_utils.cc @@ -410,7 +410,7 @@ int grib_accessors_list_print(grib_handle* h, grib_accessors_list* al, const cha grib_context_free(h->context, lval); break; case GRIB_TYPE_BYTES: - replen = a->length; + replen = a->length_; bval = (unsigned char*)grib_context_malloc(h->context, replen * sizeof(unsigned char)); ret = al->accessor->unpack_bytes(bval, &replen); for (j = 0; j < replen; j++) { @@ -421,7 +421,7 @@ int grib_accessors_list_print(grib_handle* h, grib_accessors_list* al, const cha break; default: grib_context_log(h->context, GRIB_LOG_WARNING, - "Accessor print: Problem printing \"%s\", invalid type %d", a->name, grib_get_type_name(type)); + "Accessor print: Problem printing \"%s\", invalid type %d", a->name_, grib_get_type_name(type)); } return ret; } diff --git a/src/grib_query.cc b/src/grib_query.cc index 5c0961700..fa7f1417c 100644 --- a/src/grib_query.cc +++ b/src/grib_query.cc @@ -31,12 +31,12 @@ static int matching(grib_accessor* a, const char* name, const char* name_space) { int i = 0; while (i < MAX_ACCESSOR_NAMES) { - if (a->all_names[i] == 0) + if (a->all_names_[i] == 0) return 0; - if ((grib_inline_strcmp(name, a->all_names[i]) == 0) && - ((name_space == NULL) || (a->all_name_spaces[i] != NULL && - grib_inline_strcmp(a->all_name_spaces[i], name_space) == 0))) + if ((grib_inline_strcmp(name, a->all_names_[i]) == 0) && + ((name_space == NULL) || (a->all_name_spaces_[i] != NULL && + grib_inline_strcmp(a->all_name_spaces_[i], name_space) == 0))) return 1; i++; } @@ -54,7 +54,7 @@ static grib_accessor* search(grib_section* s, const char* name, const char* name return NULL; while (a) { - grib_section* sub = a->sub_section; + grib_section* sub = a->sub_section_; if (matching(a, name, name_space)) match = a; @@ -73,21 +73,21 @@ static void rebuild_hash_keys(grib_handle* h, grib_section* s) grib_accessor* a = s ? s->block->first : NULL; while (a) { - grib_section* sub = a->sub_section; + grib_section* sub = a->sub_section_; int i = 0; int id = -1; const char* p; DEBUG_ASSERT(h == grib_handle_of_accessor(a)); - while (i < MAX_ACCESSOR_NAMES && ((p = a->all_names[i]) != NULL)) { + while (i < MAX_ACCESSOR_NAMES && ((p = a->all_names_[i]) != NULL)) { if (*p != '_') { - id = grib_hash_keys_get_id(a->context->keys, p); + id = grib_hash_keys_get_id(a->context_->keys, p); - if (a->same != a && i == 0) { + if (a->same_ != a && i == 0) { grib_handle* hand = grib_handle_of_accessor(a); - a->same = hand->accessors[id]; + a->same_ = hand->accessors[id]; hand->accessors[id] = a; - DEBUG_ASSERT(a->same != a); + DEBUG_ASSERT(a->same_ != a); } } i++; @@ -212,8 +212,9 @@ static char* get_condition(const char* name, codes_condition* condition) static grib_accessor* _search_by_rank(grib_accessor* a, const char* name, int rank) { - grib_trie_with_rank* t = accessor_bufr_data_array_get_dataAccessorsTrie(a); - grib_accessor* ret = (grib_accessor*)grib_trie_with_rank_get(t, name, rank); + grib_accessor_bufr_data_array_t* data_accessor = dynamic_cast(a); + grib_trie_with_rank* t = data_accessor->accessor_bufr_data_array_get_dataAccessorsTrie(); + grib_accessor* ret = (grib_accessor*)grib_trie_with_rank_get(t, name, rank); return ret; } @@ -223,7 +224,7 @@ static grib_accessor* _search_by_rank(grib_accessor* a,const char* name,long ran grib_accessors_list* al=accessor_bufr_data_array_get_dataAccessors(a); while (al) { - if (!grib_inline_strcmp(al->accessor->name,name)) { + if (!grib_inline_strcmp(al->accessor->name_,name)) { if (r==rank) return al->accessor; r++; } @@ -251,7 +252,7 @@ static grib_accessor* search_by_rank(grib_handle* h, const char* name, int rank, static int get_single_long_val(grib_accessor* a, long* result) { - grib_context* c = a->context; + grib_context* c = a->context_; int err = 0; size_t size = 1; if (c->bufr_multi_element_constant_arrays) { @@ -290,7 +291,7 @@ static int get_single_long_val(grib_accessor* a, long* result) } static int get_single_double_val(grib_accessor* a, double* result) { - grib_context* c = a->context; + grib_context* c = a->context_; int err = 0; size_t size = 1; if (c->bufr_multi_element_constant_arrays) { @@ -367,14 +368,14 @@ static void search_from_accessors_list(grib_accessors_list* al, const grib_acces { char attribute_name[200] = {0,}; grib_accessor* accessor_result = 0; - grib_context* c = al->accessor->context; + grib_context* c = al->accessor->context_; int doFree = 1; char* accessor_name = grib_split_name_attribute(c, name, attribute_name); if (*attribute_name == 0) doFree = 0; while (al && al != end && al->accessor) { - if (grib_inline_strcmp(al->accessor->name, accessor_name) == 0) { + if (grib_inline_strcmp(al->accessor->name_, accessor_name) == 0) { if (attribute_name[0]) { accessor_result = al->accessor->get_attribute(attribute_name); } @@ -388,7 +389,7 @@ static void search_from_accessors_list(grib_accessors_list* al, const grib_acces al = al->next_; } if (al == end && al->accessor) { - if (grib_inline_strcmp(al->accessor->name, accessor_name) == 0) { + if (grib_inline_strcmp(al->accessor->name_, accessor_name) == 0) { if (attribute_name[0]) { accessor_result = al->accessor->get_attribute(attribute_name); } @@ -409,7 +410,7 @@ static void search_accessors_list_by_condition(grib_accessors_list* al, const ch grib_accessors_list* end = NULL; while (al) { - if (!grib_inline_strcmp(al->accessor->name, condition->left)) { + if (!grib_inline_strcmp(al->accessor->name_, condition->left)) { if (start == NULL && condition_true(al->accessor, condition)) start = al; if (start && !condition_true(al->accessor, condition)) @@ -431,12 +432,13 @@ static grib_accessors_list* search_by_condition(grib_handle* h, const char* name { grib_accessors_list* al; grib_accessors_list* result = NULL; - grib_accessor* data = search_and_cache(h, "dataAccessors", 0); - if (data && condition->left) { - al = accessor_bufr_data_array_get_dataAccessors(data); + grib_accessor* a = search_and_cache(h, "dataAccessors", 0); + grib_accessor_bufr_data_array_t* data_accessor = dynamic_cast(a); + if (data_accessor && condition->left) { + al = data_accessor->accessor_bufr_data_array_get_dataAccessors(); if (!al) return NULL; - result = (grib_accessors_list*)grib_context_malloc_clear(al->accessor->context, sizeof(grib_accessors_list)); + result = (grib_accessors_list*)grib_context_malloc_clear(al->accessor->context_, sizeof(grib_accessors_list)); search_accessors_list_by_condition(al, name, condition, result); if (!result->accessor) { grib_accessors_list_delete(h->context, result); @@ -450,7 +452,7 @@ static grib_accessors_list* search_by_condition(grib_handle* h, const char* name static void grib_find_same_and_push(grib_accessors_list* al, grib_accessor* a) { if (a) { - grib_find_same_and_push(al, a->same); + grib_find_same_and_push(al, a->same_); al->push(a, al->rank()); } } diff --git a/src/grib_sarray.cc b/src/grib_sarray.cc index 2159af7b3..f285beeb7 100644 --- a/src/grib_sarray.cc +++ b/src/grib_sarray.cc @@ -22,11 +22,10 @@ void grib_sarray_print(const char* title, const grib_sarray* sarray) printf("\n"); } -grib_sarray* grib_sarray_new(grib_context* c, size_t size, size_t incsize) +grib_sarray* grib_sarray_new(size_t size, size_t incsize) { grib_sarray* v = NULL; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v = (grib_sarray*)grib_context_malloc_clear(c, sizeof(grib_sarray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, @@ -36,7 +35,6 @@ grib_sarray* grib_sarray_new(grib_context* c, size_t size, size_t incsize) v->size = size; v->n = 0; v->incsize = incsize; - v->context = c; v->v = (char**)grib_context_malloc_clear(c, sizeof(char*) * size); if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, @@ -49,9 +47,7 @@ grib_sarray* grib_sarray_new(grib_context* c, size_t size, size_t incsize) static grib_sarray* grib_sarray_resize(grib_sarray* v) { const size_t newsize = v->incsize + v->size; - grib_context* c = v->context; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v->v = (char**)grib_context_realloc(c, v->v, newsize * sizeof(char*)); v->size = newsize; @@ -63,12 +59,12 @@ static grib_sarray* grib_sarray_resize(grib_sarray* v) return v; } -grib_sarray* grib_sarray_push(grib_context* c, grib_sarray* v, char* val) +grib_sarray* grib_sarray_push(grib_sarray* v, char* val) { size_t start_size = 100; size_t start_incsize = 100; if (!v) - v = grib_sarray_new(c, start_size, start_incsize); + v = grib_sarray_new(start_size, start_incsize); if (v->n >= v->size) v = grib_sarray_resize(v); @@ -77,24 +73,22 @@ grib_sarray* grib_sarray_push(grib_context* c, grib_sarray* v, char* val) return v; } -void grib_sarray_delete(grib_context* c, grib_sarray* v) +void grib_sarray_delete(grib_sarray* v) { if (!v) return; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); if (v->v) grib_context_free(c, v->v); grib_context_free(c, v); } -void grib_sarray_delete_content(grib_context* c, grib_sarray* v) +void grib_sarray_delete_content(grib_sarray* v) { size_t i = 0; if (!v || !v->v) return; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); for (i = 0; i < v->n; i++) { if (v->v[i]) { /*printf("grib_sarray_delete_content: %s %p\n", v->v[i], (void*)v->v[i]);*/ @@ -105,12 +99,13 @@ void grib_sarray_delete_content(grib_context* c, grib_sarray* v) v->n = 0; } -char** grib_sarray_get_array(grib_context* c, grib_sarray* v) +char** grib_sarray_get_array(grib_sarray* v) { char** ret = NULL; size_t i = 0; if (!v) return NULL; + grib_context* c = grib_context_get_default(); ret = (char**)grib_context_malloc_clear(c, sizeof(char*) * v->n); for (i = 0; i < v->n; i++) ret[i] = v->v[i]; diff --git a/src/grib_scaling.cc b/src/grib_scaling.cc index e49a1e6dc..960e40ee3 100644 --- a/src/grib_scaling.cc +++ b/src/grib_scaling.cc @@ -10,6 +10,7 @@ #include "grib_scaling.h" #include "grib_api_internal.h" +#include // Unfortunately, metkit uses grib_power() (illegal usage of private API) // As soon as it is fixed, the wrapper below can be deleted @@ -26,6 +27,12 @@ long grib_get_binary_scale_fact(double max, double min, long bpval, int* error) unsigned long maxint = 0; const size_t ulong_size = sizeof(maxint) * 8; + // See ECC-1927 + if ((isnan(range) || isinf(range))) { + *error = GRIB_OUT_OF_RANGE; /*overflow*/ + return 0; + } + /* See ECC-246 unsigned long maxint = codes_power(bpval,2) - 1; double dmaxint=(double)maxint; diff --git a/src/grib_trie_with_rank.cc b/src/grib_trie_with_rank.cc index 0e3f76971..4bfc86f35 100644 --- a/src/grib_trie_with_rank.cc +++ b/src/grib_trie_with_rank.cc @@ -366,7 +366,7 @@ static void _grib_trie_with_rank_delete_container(grib_trie_with_rank* t) if (t->next[i]) { grib_trie_with_rank_delete_container(t->next[i]); } - grib_oarray_delete(t->context, t->objs); + grib_oarray_delete(t->objs); /* grib_trie_with_rank_delete_container_list(t->context,t->list); */ #ifdef RECYCLE_TRIE grib_context_free_persistent(t->context, t); @@ -481,8 +481,8 @@ int grib_trie_with_rank_insert(grib_trie_with_rank* t, const char* key, void* da } } if (t->objs == NULL) - t->objs = grib_oarray_new(t->context, 100, 1000); - grib_oarray_push(t->context, t->objs, data); + t->objs = grib_oarray_new(100, 1000); + grib_oarray_push(t->objs, data); /* grib_trie_with_rank_insert_in_list(t,data); */ GRIB_MUTEX_UNLOCK(&mutex); return (int)t->objs->n; diff --git a/src/grib_util.cc b/src/grib_util.cc index 8e08b3a2d..a3998926b 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -875,6 +875,20 @@ static int write_out_error_data_file(const double* data_values, size_t data_valu return GRIB_SUCCESS; } +static long get_bitsPerValue_for_packingType(const int specPackingType, const long specBitsPerValue) +{ + if (specPackingType == GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE) { + if (specBitsPerValue > 60) return 60; + } + else if (specPackingType == GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER) { + if (specBitsPerValue > 60) return 32; + } + else if (specPackingType == GRIB_UTIL_PACKING_TYPE_CCSDS) { + if (specBitsPerValue > 32) return 32; + } + return specBitsPerValue; //original +} + static int get_grib_sample_name(grib_handle* h, long editionNumber, const grib_util_grid_spec* spec, const char* grid_type, char* sample_name) { @@ -1341,17 +1355,26 @@ grib_handle* grib_util_set_spec(grib_handle* h, Assert(grib_get_long(h, "bitsPerValue", &bitsPerValue) == 0); SET_LONG_VALUE("bitsPerValue", bitsPerValue); } - } break; + } + break; - case GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES: - SET_LONG_VALUE("bitsPerValue", packing_spec->bitsPerValue); - break; + case GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES: { + // See ECC-1921 + const long bitsPerValue = get_bitsPerValue_for_packingType(packing_spec->packing_type, packing_spec->bitsPerValue); + if (bitsPerValue != packing_spec->bitsPerValue) { + fprintf(stderr, "ECCODES WARNING : Cannot pack with requested bitsPerValue (%ld). Using %ld\n", + packing_spec->bitsPerValue, bitsPerValue); + } + SET_LONG_VALUE("bitsPerValue", bitsPerValue); + } + break; case GRIB_UTIL_ACCURACY_SAME_DECIMAL_SCALE_FACTOR_AS_INPUT: { long decimalScaleFactor = 0; Assert(grib_get_long(h, "decimalScaleFactor", &decimalScaleFactor) == 0); SET_LONG_VALUE("decimalScaleFactor", decimalScaleFactor); - } break; + } + break; case GRIB_UTIL_ACCURACY_USE_PROVIDED_DECIMAL_SCALE_FACTOR: SET_LONG_VALUE("decimalScaleFactor", packing_spec->decimalScaleFactor); diff --git a/src/grib_value.cc b/src/grib_value.cc index e68ea72e0..c3cf55e55 100644 --- a/src/grib_value.cc +++ b/src/grib_value.cc @@ -31,7 +31,7 @@ GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b) return (*a == 0 && *b == 0) ? 0 : 1; } -/* Debug utility function to track GRIB packing/repacking issues */ +// Debug utility function to track GRIB packing/repacking issues template static void print_debug_info__set_array(grib_handle* h, const char* func, const char* name, const T* val, size_t length) { @@ -80,7 +80,7 @@ int grib_set_expression(grib_handle* h, const char* name, grib_expression* e) int ret = GRIB_SUCCESS; if (a) { - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) return GRIB_READ_ONLY; ret = a->pack_expression(e); @@ -130,13 +130,13 @@ int grib_set_long(grib_handle* h, const char* name, long val) if (a) { if (h->context->debug) { - if (strcmp(name, a->name)!=0) - fprintf(stderr, "ECCODES DEBUG grib_set_long h=%p %s=%ld (a->name=%s)\n", (void*)h, name, val, a->name); + if (strcmp(name, a->name_)!=0) + fprintf(stderr, "ECCODES DEBUG grib_set_long h=%p %s=%ld (a->name_=%s)\n", (void*)h, name, val, a->name_); else fprintf(stderr, "ECCODES DEBUG grib_set_long h=%p %s=%ld\n", (void*)h, name, val); } - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) return GRIB_READ_ONLY; ret = a->pack_long(&val, &l); @@ -247,7 +247,7 @@ int grib_copy_namespace(grib_handle* dest, const char* name, grib_handle* src) continue; } - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) { key_err->err = GRIB_SUCCESS; key_err = key_err->next; continue; @@ -339,7 +339,7 @@ int grib_copy_namespace(grib_handle* dest, const char* name, grib_handle* src) } } if (err) - error_code = *err; /* copy the error code before cleanup */ + error_code = *err; // copy the error code before cleanup grib_keys_iterator_delete(iter); key_err = first; while (key_err) { @@ -362,13 +362,13 @@ int grib_set_double(grib_handle* h, const char* name, double val) if (a) { if (h->context->debug) { - if (strcmp(name, a->name)!=0) - fprintf(stderr, "ECCODES DEBUG grib_set_double h=%p %s=%.10g (a->name=%s)\n", (void*)h, name, val, a->name); + if (strcmp(name, a->name_)!=0) + fprintf(stderr, "ECCODES DEBUG grib_set_double h=%p %s=%.10g (a->name_=%s)\n", (void*)h, name, val, a->name_); else fprintf(stderr, "ECCODES DEBUG grib_set_double h=%p %s=%.10g\n", (void*)h, name, val); } - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) return GRIB_READ_ONLY; ret = a->pack_double(&val, &l); @@ -407,9 +407,8 @@ int grib_set_string_internal(grib_handle* h, const char* name, return GRIB_NOT_FOUND; } -/* Return 1 if we dealt with specific packing type changes and nothing more needs doing. - * Return 0 if further action is needed - */ +// Return 1 if we dealt with specific packing type changes and nothing more needs doing. +// Return 0 if further action is needed static int preprocess_packingType_change(grib_handle* h, const char* keyname, const char* keyval) { int err = 0; @@ -488,19 +487,19 @@ int grib_set_string(grib_handle* h, const char* name, const char* val, size_t* l int processed = preprocess_packingType_change(h, name, val); if (processed) - return GRIB_SUCCESS; /* Dealt with - no further action needed */ + return GRIB_SUCCESS; // Dealt with - no further action needed a = grib_find_accessor(h, name); if (a) { if (h->context->debug) { - if (strcmp(name, a->name)!=0) - fprintf(stderr, "ECCODES DEBUG grib_set_string h=%p %s=|%s| (a->name=%s)\n", (void*)h, name, val, a->name); + if (strcmp(name, a->name_)!=0) + fprintf(stderr, "ECCODES DEBUG grib_set_string h=%p %s=|%s| (a->name_=%s)\n", (void*)h, name, val, a->name_); else fprintf(stderr, "ECCODES DEBUG grib_set_string h=%p %s=|%s|\n", (void*)h, name, val); } - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) return GRIB_READ_ONLY; ret = a->pack_string(val, length); @@ -530,7 +529,7 @@ int grib_set_string_array(grib_handle* h, const char* name, const char** val, si } if (a) { - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) return GRIB_READ_ONLY; ret = a->pack_string_array(val, &length); @@ -566,8 +565,8 @@ int grib_set_bytes(grib_handle* h, const char* name, const unsigned char* val, s grib_accessor* a = grib_find_accessor(h, name); if (a) { - /* if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) */ - /* return GRIB_READ_ONLY; */ + // if(a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) + // return GRIB_READ_ONLY; ret = a->pack_bytes(val, length); if (ret == GRIB_SUCCESS) { @@ -584,7 +583,7 @@ int grib_set_bytes(grib_handle* h, const char* name, const unsigned char* val, s // grib_accessor* a = NULL; // a = grib_find_accessor(h, name); // if (a) { -// if (a->length == 0) +// if (a->length_ == 0) // return 0; // if ((ret = a->grib_pack_zero()) != GRIB_SUCCESS) // grib_context_log(h->context, GRIB_LOG_ERROR, "Unable to clear %s (%s)", @@ -603,7 +602,7 @@ int grib_set_missing(grib_handle* h, const char* name) a = grib_find_accessor(h, name); if (a) { - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + if (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) return GRIB_READ_ONLY; if (grib_accessor_can_be_missing(a, &ret)) { @@ -628,25 +627,25 @@ int grib_set_missing(grib_handle* h, const char* name) int grib_is_missing_long(grib_accessor* a, long x) { - int ret = (a == NULL || (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING)) && (x == GRIB_MISSING_LONG) ? 1 : 0; + int ret = (a == NULL || (a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING)) && (x == GRIB_MISSING_LONG) ? 1 : 0; return ret; } int grib_is_missing_double(grib_accessor* a, double x) { - int ret = (a == NULL || (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING)) && (x == GRIB_MISSING_DOUBLE) ? 1 : 0; + int ret = (a == NULL || (a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING)) && (x == GRIB_MISSING_DOUBLE) ? 1 : 0; return ret; } int grib_is_missing_string(grib_accessor* a, const unsigned char* x, size_t len) { - /* For a string value to be missing, every character has to be */ - /* all 1's (i.e. 0xFF) */ - /* Note: An empty string is also classified as missing */ + // For a string value to be missing, every character has to be */ + // all 1's (i.e. 0xFF) */ + // Note: An empty string is also classified as missing */ int ret; size_t i = 0; if (len == 0) - return 1; /* empty string */ + return 1; // empty string ret = 1; for (i = 0; i < len; i++) { if (x[i] != 0xFF) { @@ -657,7 +656,7 @@ int grib_is_missing_string(grib_accessor* a, const unsigned char* x, size_t len) if (!a) return ret; - ret = ( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) && ret == 1) ) ? 1 : 0; + ret = ( ((a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) && ret == 1) ) ? 1 : 0; return ret; } @@ -665,7 +664,7 @@ int grib_accessor_is_missing(grib_accessor* a, int* err) { *err = GRIB_SUCCESS; if (a) { - if (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + if (a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) return a->is_missing_internal(); else return 0; @@ -678,10 +677,10 @@ int grib_accessor_is_missing(grib_accessor* a, int* err) int grib_accessor_can_be_missing(grib_accessor* a, int* err) { - if (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { + if (a->flags_ & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { return 1; } - if (STR_EQUAL(a->cclass->name, "codetable")) { + if (STR_EQUAL(a->class_name_, "codetable")) { // Special case of Code Table keys // The vast majority have a 'Missing' entry return 1; @@ -695,7 +694,7 @@ int grib_is_missing(const grib_handle* h, const char* name, int* err) return grib_accessor_is_missing(a, err); } -/* Return true if the given key exists (is defined) in our grib message */ +// Return true if the given key exists (is defined) in our grib message int grib_is_defined(const grib_handle* h, const char* name) { const grib_accessor* a = grib_find_accessor(h, name); @@ -709,7 +708,7 @@ int grib_set_flag(grib_handle* h, const char* name, unsigned long flag) if (!a) return GRIB_NOT_FOUND; - a->flags |= flag; + a->flags_ |= flag; return GRIB_SUCCESS; } @@ -718,9 +717,9 @@ static int _grib_set_double_array_internal(grib_handle* h, grib_accessor* a, const double* val, size_t buffer_len, size_t* encoded_length, int check) { if (a) { - int err = _grib_set_double_array_internal(h, a->same, val, buffer_len, encoded_length, check); + int err = _grib_set_double_array_internal(h, a->same_, val, buffer_len, encoded_length, check); - if (check && (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) + if (check && (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY)) return GRIB_READ_ONLY; if (err == GRIB_SUCCESS) { @@ -729,12 +728,12 @@ static int _grib_set_double_array_internal(grib_handle* h, grib_accessor* a, err = a->pack_double(val + *encoded_length, &len); *encoded_length += len; if (err == GRIB_SUCCESS) { - /* See ECC-778 */ + // See ECC-778 return grib_dependency_notify_change_h(h, a); } } else { - grib_get_size(h, a->name, encoded_length); + grib_get_size(h, a->name_, encoded_length); err = GRIB_WRONG_ARRAY_SIZE; } } @@ -756,7 +755,7 @@ static int _grib_set_double_array(grib_handle* h, const char* name, if (!a) return GRIB_NOT_FOUND; if (name[0] == '/' || name[0] == '#') { - if (check && (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) + if (check && (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY)) return GRIB_READ_ONLY; err = a->pack_double(val, &length); encoded = length; @@ -768,7 +767,7 @@ static int _grib_set_double_array(grib_handle* h, const char* name, err = GRIB_ARRAY_TOO_SMALL; if (err == GRIB_SUCCESS) - return grib_dependency_notify_change_h(h, a); /* See ECC-778 */ + return grib_dependency_notify_change_h(h, a); // See ECC-778 return err; } @@ -792,7 +791,7 @@ int grib_set_double_array_internal(grib_handle* h, const char* name, const doubl if (ret != GRIB_SUCCESS) grib_context_log(h->context, GRIB_LOG_ERROR, "Unable to set double array '%s' (%s)", name, grib_get_error_message(ret)); - /*if (h->context->debug) fprintf(stderr,"ECCODES DEBUG grib_set_double_array_internal key=%s --DONE\n",name);*/ + //if (h->context->debug) fprintf(stderr,"ECCODES DEBUG grib_set_double_array_internal key=%s --DONE\n",name); return ret; } @@ -894,9 +893,9 @@ int grib_set_float_array(grib_handle* h, const char* name, const float* val, siz static int _grib_set_long_array_internal(grib_handle* h, grib_accessor* a, const long* val, size_t buffer_len, size_t* encoded_length, int check) { if (a) { - int err = _grib_set_long_array_internal(h, a->same, val, buffer_len, encoded_length, check); + int err = _grib_set_long_array_internal(h, a->same_, val, buffer_len, encoded_length, check); - if (check && (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) + if (check && (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY)) return GRIB_READ_ONLY; if (err == GRIB_SUCCESS) { @@ -906,7 +905,7 @@ static int _grib_set_long_array_internal(grib_handle* h, grib_accessor* a, const *encoded_length += len; } else { - grib_get_size(h, a->name, encoded_length); + grib_get_size(h, a->name_, encoded_length); err = GRIB_WRONG_ARRAY_SIZE; } } @@ -942,7 +941,7 @@ static int _grib_set_long_array(grib_handle* h, const char* name, const long* va } if (name[0] == '/' || name[0] == '#') { - if (check && (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) + if (check && (a->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY)) return GRIB_READ_ONLY; err = a->pack_long(val, &length); encoded = length; @@ -989,7 +988,7 @@ int grib_get_long_internal(grib_handle* h, const char* name, long* val) // int grib_is_in_dump(const grib_handle* h, const char* name) // { // const grib_accessor* a = grib_find_accessor(h, name); -// if (a != NULL && (a->flags & GRIB_ACCESSOR_FLAG_DUMP)) +// if (a != NULL && (a->flags_ & GRIB_ACCESSOR_FLAG_DUMP)) // return 1; // else // return 0; @@ -999,7 +998,7 @@ int grib_get_long_internal(grib_handle* h, const char* name, long* val) // { // if (a) { // *size = 0; -// while (a->attributes[*size] != NULL) { +// while (a->attributes_[*size] != NULL) { // (*size)++; // } // return GRIB_SUCCESS; @@ -1304,7 +1303,7 @@ static int _grib_get_array_internal(const grib_handle* h, grib_accessor* a, T* v { static_assert(std::is_floating_point::value, "Requires floating point numbers"); if (a) { - int err = _grib_get_array_internal(h, a->same, val, buffer_len, decoded_length); + int err = _grib_get_array_internal(h, a->same_, val, buffer_len, decoded_length); if (err == GRIB_SUCCESS) { size_t len = buffer_len - *decoded_length; @@ -1401,7 +1400,7 @@ int grib_get_string_length_acc(grib_accessor* a, size_t* size) s = a->string_length(); if (s > *size) *size = s; - a = a->same; + a = a->same_; } (*size) += 1; @@ -1446,7 +1445,7 @@ int grib_get_size_acc(const grib_handle* h, grib_accessor* a, size_t* size) return err; *size += count; } - a = a->same; + a = a->same_; } return GRIB_SUCCESS; } @@ -1495,7 +1494,7 @@ int grib_get_length(const grib_handle* h, const char* name, size_t* length) // *size = 0; // while (a) { // (*size)++; -// a = a->same; +// a = a->same_; // } // return GRIB_SUCCESS; // } @@ -1514,7 +1513,7 @@ int grib_get_offset(const grib_handle* ch, const char* key, size_t* val) static int grib_get_string_array_internal_(const grib_handle* h, grib_accessor* a, char** val, size_t buffer_len, size_t* decoded_length) { if (a) { - int err = grib_get_string_array_internal_(h, a->same, val, buffer_len, decoded_length); + int err = grib_get_string_array_internal_(h, a->same_, val, buffer_len, decoded_length); if (err == GRIB_SUCCESS) { size_t len = buffer_len - *decoded_length; @@ -1561,7 +1560,7 @@ int grib_get_string_array(const grib_handle* h, const char* name, char** val, si static int _grib_get_long_array_internal(const grib_handle* h, grib_accessor* a, long* val, size_t buffer_len, size_t* decoded_length) { if (a) { - int err = _grib_get_long_array_internal(h, a->same, val, buffer_len, decoded_length); + int err = _grib_get_long_array_internal(h, a->same_, val, buffer_len, decoded_length); if (err == GRIB_SUCCESS) { size_t len = buffer_len - *decoded_length; @@ -1784,6 +1783,12 @@ int grib_get_long_array(const grib_handle* h, const char* name, long* val, size_ // } int grib_set_values(grib_handle* h, grib_values* args, size_t count) +{ + // The default behaviour is to print any error messages (not silent) + return grib_set_values_silent(h, args, count, /*silent=*/0); +} + +int grib_set_values_silent(grib_handle* h, grib_values* args, size_t count, int silent) { int i, error = 0; int err = 0; @@ -1796,15 +1801,15 @@ int grib_set_values(grib_handle* h, grib_values* args, size_t count) h->values[stack] = args; h->values_count[stack] = count; - for (i = 0; i < count; i++) - args[i].error = GRIB_NOT_FOUND; - if (h->context->debug) { for (i = 0; i < count; i++) { - grib_print_values("ECCODES DEBUG about to set key/value pair", &args[i], stderr); + grib_print_values("ECCODES DEBUG about to set key/value pair", &args[i], stderr, 1); } } + for (i = 0; i < count; i++) + args[i].error = GRIB_NOT_FOUND; + while (more) { more = 0; for (i = 0; i < count; i++) { @@ -1839,13 +1844,13 @@ int grib_set_values(grib_handle* h, grib_values* args, size_t count) break; default: - grib_context_log(h->context, GRIB_LOG_ERROR, "grib_set_values[%d] %s invalid type %d", i, args[i].name, args[i].type); + if (!silent) + grib_context_log(h->context, GRIB_LOG_ERROR, "grib_set_values[%d] %s invalid type %d", i, args[i].name, args[i].type); args[i].error = GRIB_INVALID_ARGUMENT; break; } - /*if (args[i].error != GRIB_SUCCESS) - grib_context_log(h->context,GRIB_LOG_ERROR,"Unable to set %s (%s)", - args[i].name,grib_get_error_message(args[i].error)); */ + // if (args[i].error != GRIB_SUCCESS) + // grib_context_log(h->context,GRIB_LOG_ERROR,"Unable to set %s (%s)",args[i].name,grib_get_error_message(args[i].error)); } } @@ -1856,10 +1861,12 @@ int grib_set_values(grib_handle* h, grib_values* args, size_t count) for (i = 0; i < count; i++) { if (args[i].error != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, - "grib_set_values[%d] %s (type=%s) failed: %s (message %d)", - i, args[i].name, grib_get_type_name(args[i].type), - grib_get_error_message(args[i].error), h->context->handle_file_count); + if (!silent) { + grib_context_log(h->context, GRIB_LOG_ERROR, + "grib_set_values[%d] %s (type=%s) failed: %s (message %d)", + i, args[i].name, grib_get_type_name(args[i].type), + grib_get_error_message(args[i].error), h->context->handle_file_count); + } err = err == GRIB_SUCCESS ? args[i].error : err; } } @@ -1875,22 +1882,26 @@ int grib_get_nearest_smaller_value(grib_handle* h, const char* name, return act->nearest_smaller_value(val, nearest); } -void grib_print_values(const char* title, grib_values* values, FILE* out) +void grib_print_values(const char* title, const grib_values* values, FILE* out, int count) { - if (values) { - fprintf(out, "%s: %s=", title, values->name); - switch (values->type) { + Assert(values); + for (int i = 0; i < count; ++i) { + const grib_values aVal = values[i]; + fprintf(out, "%s: %s=", title, aVal.name); + switch (aVal.type) { case GRIB_TYPE_LONG: - fprintf(out, "%ld", values->long_value); + fprintf(out, "%ld", aVal.long_value); break; case GRIB_TYPE_DOUBLE: - fprintf(out, "%g", values->double_value); + fprintf(out, "%g", aVal.double_value); break; case GRIB_TYPE_STRING: - fprintf(out, "%s", values->string_value); + fprintf(out, "%s", aVal.string_value); break; } - fprintf(out, " (type=%s)\n", grib_get_type_name(values->type)); + fprintf(out, " (type=%s)", grib_get_type_name(aVal.type)); + if (aVal.error) fprintf(out, "\t(%s)\n", grib_get_error_message(aVal.error)); + else fprintf(out, "\n"); } } diff --git a/src/grib_vdarray.cc b/src/grib_vdarray.cc index 5ec7fc80b..c2fba2c03 100644 --- a/src/grib_vdarray.cc +++ b/src/grib_vdarray.cc @@ -24,11 +24,10 @@ void grib_vdarray_print(const char* title, const grib_vdarray* vdarray) printf("\n"); } -grib_vdarray* grib_vdarray_new(grib_context* c, size_t size, size_t incsize) +grib_vdarray* grib_vdarray_new(size_t size, size_t incsize) { grib_vdarray* v = NULL; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v = (grib_vdarray*)grib_context_malloc_clear(c, sizeof(grib_vdarray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, @@ -38,7 +37,6 @@ grib_vdarray* grib_vdarray_new(grib_context* c, size_t size, size_t incsize) v->size = size; v->n = 0; v->incsize = incsize; - v->context = c; v->v = (grib_darray**)grib_context_malloc_clear(c, sizeof(grib_darray*) * size); if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, @@ -51,9 +49,7 @@ grib_vdarray* grib_vdarray_new(grib_context* c, size_t size, size_t incsize) static grib_vdarray* grib_vdarray_resize(grib_vdarray* v) { const size_t newsize = v->incsize + v->size; - grib_context* c = v->context; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v->v = (grib_darray**)grib_context_realloc(c, v->v, newsize * sizeof(grib_darray*)); v->size = newsize; @@ -65,12 +61,12 @@ static grib_vdarray* grib_vdarray_resize(grib_vdarray* v) return v; } -grib_vdarray* grib_vdarray_push(grib_context* c, grib_vdarray* v, grib_darray* val) +grib_vdarray* grib_vdarray_push(grib_vdarray* v, grib_darray* val) { size_t start_size = 100; size_t start_incsize = 100; if (!v) - v = grib_vdarray_new(c, start_size, start_incsize); + v = grib_vdarray_new(start_size, start_incsize); if (v->n >= v->size) v = grib_vdarray_resize(v); @@ -79,27 +75,24 @@ grib_vdarray* grib_vdarray_push(grib_context* c, grib_vdarray* v, grib_darray* v return v; } -void grib_vdarray_delete(grib_context* c, grib_vdarray* v) +void grib_vdarray_delete(grib_vdarray* v) { if (!v) return; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); if (v->v) { grib_context_free(c, v->v); } grib_context_free(c, v); } -void grib_vdarray_delete_content(grib_context* c, grib_vdarray* v) +void grib_vdarray_delete_content(grib_vdarray* v) { size_t i = 0; if (!v || !v->v) return; - if (!c) - c = grib_context_get_default(); for (i = 0; i < v->n; i++) { - grib_darray_delete(c, v->v[i]); + grib_darray_delete(v->v[i]); v->v[i] = 0; } v->n = 0; diff --git a/src/grib_viarray.cc b/src/grib_viarray.cc index bc6e1bc18..54963366e 100644 --- a/src/grib_viarray.cc +++ b/src/grib_viarray.cc @@ -25,11 +25,10 @@ void grib_viarray_print(const char* title, const grib_viarray* viarray) printf("\n"); } -grib_viarray* grib_viarray_new(grib_context* c, size_t size, size_t incsize) +grib_viarray* grib_viarray_new(size_t size, size_t incsize) { grib_viarray* v = NULL; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v = (grib_viarray*)grib_context_malloc_clear(c, sizeof(grib_viarray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, @@ -39,7 +38,7 @@ grib_viarray* grib_viarray_new(grib_context* c, size_t size, size_t incsize) v->size = size; v->n = 0; v->incsize = incsize; - v->context = c; + v->v = (grib_iarray**)grib_context_malloc_clear(c, sizeof(grib_iarray*) * size); if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, @@ -52,9 +51,7 @@ grib_viarray* grib_viarray_new(grib_context* c, size_t size, size_t incsize) static grib_viarray* grib_viarray_resize(grib_viarray* v) { const size_t newsize = v->incsize + v->size; - grib_context* c = v->context; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v->v = (grib_iarray**)grib_context_realloc(c, v->v, newsize * sizeof(grib_iarray*)); v->size = newsize; @@ -66,12 +63,12 @@ static grib_viarray* grib_viarray_resize(grib_viarray* v) return v; } -grib_viarray* grib_viarray_push(grib_context* c, grib_viarray* v, grib_iarray* val) +grib_viarray* grib_viarray_push(grib_viarray* v, grib_iarray* val) { size_t start_size = 100; size_t start_incsize = 100; if (!v) - v = grib_viarray_new(c, start_size, start_incsize); + v = grib_viarray_new(start_size, start_incsize); if (v->n >= v->size) v = grib_viarray_resize(v); @@ -80,18 +77,17 @@ grib_viarray* grib_viarray_push(grib_context* c, grib_viarray* v, grib_iarray* v return v; } -void grib_viarray_delete(grib_context* c, grib_viarray* v) +void grib_viarray_delete(grib_viarray* v) { if (!v) return; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); if (v->v) grib_context_free(c, v->v); grib_context_free(c, v); } -void grib_viarray_delete_content(grib_context* c, grib_viarray* v) +void grib_viarray_delete_content(grib_viarray* v) { size_t i=0; if (!v || !v->v) diff --git a/src/grib_vsarray.cc b/src/grib_vsarray.cc index 9de0650f7..cb2db0552 100644 --- a/src/grib_vsarray.cc +++ b/src/grib_vsarray.cc @@ -27,11 +27,11 @@ void grib_vsarray_print(const char* title, const grib_vsarray* vsarray) printf("\n"); } -grib_vsarray* grib_vsarray_new(grib_context* c, size_t size, size_t incsize) +grib_vsarray* grib_vsarray_new(size_t size, size_t incsize) { grib_vsarray* v = NULL; - if (!c) - c = grib_context_get_default(); + + grib_context* c = grib_context_get_default(); v = (grib_vsarray*)grib_context_malloc_clear(c, sizeof(grib_vsarray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, @@ -41,7 +41,6 @@ grib_vsarray* grib_vsarray_new(grib_context* c, size_t size, size_t incsize) v->size = size; v->n = 0; v->incsize = incsize; - v->context = c; v->v = (grib_sarray**)grib_context_malloc_clear(c, sizeof(grib_sarray*) * size); if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, @@ -54,9 +53,7 @@ grib_vsarray* grib_vsarray_new(grib_context* c, size_t size, size_t incsize) static grib_vsarray* grib_vsarray_resize(grib_vsarray* v) { const size_t newsize = v->incsize + v->size; - grib_context* c = v->context; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); v->v = (grib_sarray**)grib_context_realloc(c, v->v, newsize * sizeof(grib_sarray*)); v->size = newsize; @@ -68,12 +65,12 @@ static grib_vsarray* grib_vsarray_resize(grib_vsarray* v) return v; } -grib_vsarray* grib_vsarray_push(grib_context* c, grib_vsarray* v, grib_sarray* val) +grib_vsarray* grib_vsarray_push(grib_vsarray* v, grib_sarray* val) { size_t start_size = 100; size_t start_incsize = 100; if (!v) - v = grib_vsarray_new(c, start_size, start_incsize); + v = grib_vsarray_new(start_size, start_incsize); if (v->n >= v->size) v = grib_vsarray_resize(v); @@ -82,27 +79,24 @@ grib_vsarray* grib_vsarray_push(grib_context* c, grib_vsarray* v, grib_sarray* v return v; } -void grib_vsarray_delete(grib_context* c, grib_vsarray* v) +void grib_vsarray_delete(grib_vsarray* v) { if (!v) return; - if (!c) - c = grib_context_get_default(); + grib_context* c = grib_context_get_default(); if (v->v) grib_context_free(c, v->v); grib_context_free(c, v); } -void grib_vsarray_delete_content(grib_context* c, grib_vsarray* v) +void grib_vsarray_delete_content(grib_vsarray* v) { size_t i = 0; if (!v || !v->v) return; - if (!c) - c = grib_context_get_default(); for (i = 0; i < v->n; i++) { - grib_sarray_delete_content(c, v->v[i]); - grib_sarray_delete(c, v->v[i]); + grib_sarray_delete_content(v->v[i]); + grib_sarray_delete(v->v[i]); v->v[i] = 0; } v->n = 0; diff --git a/src/grib_yacc.cc b/src/grib_yacc.cc index e374bc009..c8a774711 100644 --- a/src/grib_yacc.cc +++ b/src/grib_yacc.cc @@ -961,16 +961,16 @@ union grib_yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 214 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1946 +#define YYLAST 1833 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 145 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 50 /* YYNRULES -- Number of rules. */ -#define YYNRULES 268 +#define YYNRULES 270 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 905 +#define YYNSTATES 919 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 382 @@ -1050,15 +1050,16 @@ static const grib_yytype_int16 grib_yyrline[] = 662, 663, 667, 668, 671, 672, 675, 676, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 695, 698, 701, 704, 705, 706, 707, 708, - 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, - 719, 720, 724, 725, 728, 729, 732, 733, 736, 737, - 740, 744, 745, 746, 749, 751, 753, 755, 759, 760, - 763, 764, 768, 770, 774, 775, 776, 777, 780, 781, - 782, 784, 785, 786, 787, 788, 789, 793, 794, 797, - 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, - 808, 811, 812, 813, 816, 818, 819, 820, 821, 822, - 823, 824, 829, 830, 833, 834, 837, 838, 841, 847, - 848, 851, 852, 855, 856, 859, 863, 866, 867 + 709, 711, 712, 713, 714, 715, 717, 718, 719, 720, + 721, 722, 723, 724, 728, 729, 732, 733, 736, 737, + 740, 741, 744, 748, 749, 750, 753, 755, 757, 759, + 763, 764, 767, 768, 772, 774, 778, 779, 780, 781, + 784, 785, 786, 788, 789, 790, 791, 792, 793, 797, + 798, 801, 802, 803, 804, 805, 806, 807, 808, 809, + 810, 811, 812, 815, 816, 817, 820, 822, 823, 824, + 825, 826, 827, 828, 833, 834, 837, 838, 841, 842, + 845, 851, 852, 855, 856, 859, 860, 863, 867, 870, + 871 }; #endif @@ -1116,7 +1117,7 @@ grib_yysymbol_name (grib_yysymbol_kind_t grib_yysymbol) } #endif -#define YYPACT_NINF (-658) +#define YYPACT_NINF (-656) #define grib_yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -1130,97 +1131,98 @@ grib_yysymbol_name (grib_yysymbol_kind_t grib_yysymbol) STATE-NUM. */ static const grib_yytype_int16 grib_yypact[] = { - 1507, -658, -37, -14, 51, 142, -53, -40, 58, 32, - 72, 98, 85, 25, 99, 139, 177, 162, 168, 176, - 197, 205, 208, 212, 228, 270, 272, 277, 310, 313, - 314, 315, 126, 311, 316, 317, 318, 319, 320, 321, - 322, 325, 328, 329, 330, 331, 333, 334, 291, 356, - 357, -12, 14, 15, 364, 755, 360, 366, 365, 374, - 369, 376, 378, 379, 385, 386, 381, 383, 384, 387, - 394, 397, 398, 400, 393, 401, -11, 407, 409, -81, - 535, -658, -658, 1610, 415, -658, -658, -658, -658, -658, - -658, 201, 82, -658, -658, -658, -658, 18, -658, -658, - -658, -658, 755, 755, 421, 422, 423, 425, 426, 755, - 427, 183, 418, 430, -658, -658, 755, -38, 431, 432, - 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, - 418, 418, 418, 418, 429, 434, 235, 433, 435, 437, - 233, 436, -78, -658, 438, 439, 443, 89, -94, 132, - 428, 755, 444, 450, -658, 451, -658, 459, -658, 256, - 456, 457, 458, 460, -658, -658, 461, 463, 755, 465, - -658, -658, -658, 755, -45, -658, -658, -658, 441, 264, - 424, -658, -52, -71, 259, 472, 478, -658, 446, -658, - 467, 428, 474, 428, 469, 470, 471, -658, 479, 480, - 481, 482, 477, 483, 485, 755, 755, 755, 487, 230, - -80, 468, 22, 475, -658, 488, 7, 486, 1819, -658, - -658, 490, 493, 495, -658, 496, 497, -658, 489, 498, - -658, 500, 501, 502, 491, 503, -658, -658, 504, 508, - 755, 755, -658, 428, 428, 510, 509, 755, 524, 428, - 525, 522, 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 755, 526, 528, 529, - 755, 530, 531, 539, 540, 541, 534, 543, 755, 134, - 755, 544, 545, 201, 546, 82, 547, 548, 201, 419, - -658, -658, 542, 84, 755, 549, 550, 551, 552, 755, - 553, 554, 555, 556, 268, 259, 303, 558, -658, -658, - 755, -76, -76, -45, -45, -45, -45, -45, -45, 258, - 258, 258, 258, 258, 258, 258, 258, 755, 755, 484, - 755, -658, 561, -658, 755, 755, 755, 564, 565, 566, - 569, 755, 755, 755, -658, 570, 571, 755, 573, 575, - 576, 591, 592, 560, 557, 596, 560, 557, 557, 755, - 578, 428, 557, 755, 17, -658, 537, 538, 597, 598, - 755, 755, 590, 593, -658, 606, 607, 599, 293, 600, - -658, -658, -658, 608, 602, 603, 418, -658, 612, 615, - -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, - -658, -658, -658, -658, 609, 617, 618, 619, 611, 621, - 622, 428, 613, -658, 755, 624, 428, 262, 428, 616, - -9, 57, -90, 623, -73, 30, 133, -25, -658, -658, - -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, - -658, -658, 625, -658, -48, -658, 251, -658, -658, 627, - 629, 630, 632, 626, 634, 639, 64, 636, 642, 643, - -658, 640, -658, -658, -658, -658, -658, -658, -658, -658, - -658, -658, -658, -52, -52, -71, -71, -71, -71, -71, - -71, 259, 472, 648, 644, 654, 646, 647, 649, 657, - 659, 660, 661, 653, 664, 665, -658, 658, 666, 755, - 755, 755, 755, 755, -658, 33, 668, 476, 557, -658, - 203, 667, 670, 672, 418, -658, 671, 676, 677, 1716, - 1819, 154, 169, 1819, 418, 418, 418, 418, 1819, 418, - 428, 172, 180, 418, 186, 755, 869, 418, 1035, 628, - -658, 687, 679, 681, -658, -658, -658, -67, -658, 418, - 633, 678, 696, 201, 428, 697, 428, 700, 685, 702, - 201, 428, 419, 703, 704, 340, 701, -658, -61, -59, - -658, -658, -658, -658, -658, 707, 712, 713, -658, -658, - 714, 716, -658, 715, -658, 428, -658, -658, -658, 717, - 719, 418, 755, -658, -658, -658, 506, 711, 720, 723, - 724, 727, 728, 737, -658, 745, -658, -658, -658, -658, - -658, 418, 428, -658, 729, 731, 9, 736, -65, 741, - 746, 755, 428, 755, 428, 748, 428, 428, 428, 428, - 749, 428, -658, 755, 428, 755, 428, 428, 755, 428, - 418, 755, 418, 428, 755, 418, 755, 428, 418, 755, - 299, 428, 428, 740, 201, 71, -16, -658, 763, -658, - 764, 201, 86, 61, -658, -658, 730, 761, 701, -62, - -658, 767, -658, 775, -658, 768, 769, 104, 776, 778, - -658, -658, 755, 755, -658, 418, 755, -82, -658, 1819, - 428, 428, 428, 418, 418, -658, 560, 774, 428, -658, - 1819, -65, 455, 868, -658, -658, 901, 777, -658, 779, - -658, -658, -658, -658, -658, -658, -658, -658, 780, -658, - 781, -658, -658, 782, -658, 428, 783, 558, -66, -658, - 784, 428, 785, -658, 428, 786, -658, -658, -658, -658, - 790, 76, 795, 773, 428, 791, 797, 103, 798, 788, - 428, 755, 755, 767, 916, 701, -658, -658, -658, -658, - 799, -658, 802, 805, 800, 801, 428, 804, 806, -658, - -658, 803, -658, -658, -658, 428, 428, 222, -658, -658, - 807, 809, 418, 418, 418, 418, 418, -658, 418, 814, - -658, 418, -658, 428, -658, 418, 105, 428, 808, 201, - -658, 811, 111, 428, 819, 201, -658, -658, -658, 812, - 767, 816, 817, 820, -658, -658, -658, 1819, 1377, -658, - -658, -658, 825, 1819, 1819, 428, 428, 428, 428, 428, - 428, 813, 428, -658, 428, 831, 428, -658, 834, 156, - 835, 836, 428, -658, 837, 171, 340, -658, -658, -658, - -658, -658, 826, -658, 827, 828, -658, -658, -658, -658, - -658, -658, 829, -658, -658, 114, -658, 115, 428, 838, - 839, -658, 129, 428, -60, -658, -658, -658, 428, 843, - 428, 844, 428, -658, 428, 428, 846, 428, -658, -658, - -658, 841, -658, 845, -658, -658, -658, 847, -658, 428, - 428, 428, -658, -658, -658 + 1394, -656, -114, -44, -11, 190, -24, 24, 100, 32, + 160, 182, 134, 84, 189, 239, 236, 271, 274, 286, + 294, 300, 302, 303, 308, 309, 311, 313, 314, 317, + 318, 320, 208, 315, 322, 319, 321, 323, 324, 326, + 335, 340, 341, 356, 357, 358, 359, 360, 353, 362, + 363, -67, -62, -21, 364, 903, 361, 277, 365, 366, + 367, 368, 370, 371, 372, 374, 369, 373, 379, 380, + 376, 388, 389, 390, 383, 384, 6, 387, 391, -73, + 491, -656, -656, 1497, 393, -656, -656, -656, -656, -656, + -656, 205, 148, -656, -656, -656, -656, 15, -656, -656, + -656, -656, 903, 903, 394, 398, 407, 392, 410, 903, + 417, 88, 411, 418, -656, -656, 903, 53, 423, 425, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 422, 427, 270, 424, 429, 431, + 224, 426, -76, -656, 430, 435, 428, 23, -54, 94, + 420, 903, 436, 437, -656, 433, -656, 452, -656, 251, + 449, 450, 451, 453, -656, -656, 455, 457, 903, 458, + -656, -656, -656, 903, -33, -656, -656, -656, 456, 265, + 460, -656, -74, 2, 90, 444, 472, -656, 469, -656, + 463, 420, 475, 420, 466, 471, 473, -656, 478, 480, + 481, 482, 479, 483, 485, 903, 903, 903, 486, 304, + -17, 474, 56, 476, -656, 487, 8, 489, 1706, -656, + -656, 488, 490, 493, -656, 495, 497, -656, 501, 500, + -656, 502, 506, 508, 492, 509, -656, -656, 511, 517, + 903, 903, -656, 420, 420, 521, 522, 903, 496, 420, + 525, 528, 420, 420, 420, 420, 420, 420, 420, 420, + 420, 420, 420, 420, 420, 420, 903, 532, 548, 549, + 903, 550, 551, 559, 560, 561, 554, 563, 903, 441, + 903, 568, 569, 205, 570, 148, 571, 572, 205, 306, + -656, -656, 564, 89, 903, 565, 573, 574, 575, 903, + 577, 578, 579, 580, 276, 90, 794, 576, -656, -656, + 903, -78, -78, -33, -33, -33, -33, -33, -33, 124, + 124, 124, 124, 124, 124, 124, 124, 903, 903, 582, + 903, -656, 581, -656, 903, 903, 903, 583, 584, 585, + 586, 903, 903, 903, -656, 587, 588, 903, 590, 591, + 592, 593, 594, 601, 589, 599, 601, 589, 589, 903, + 595, 420, 589, 903, 18, -656, 596, 597, 484, 600, + 903, 903, 598, 602, -656, 605, 607, 603, 278, 604, + -656, -656, -656, 611, 606, 609, 411, -656, 612, 617, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, 614, 619, 622, 623, 615, 625, + 626, 420, 618, -656, 903, 627, 420, 282, 420, 620, + -10, -12, -71, 628, -88, 28, 75, -40, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, 630, -656, -46, -656, 113, -656, -656, 629, + 634, 636, 637, 631, 635, 639, 64, 632, 641, 643, + -656, 640, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -74, -74, 2, 2, 2, 2, 2, + 2, 90, 444, 648, 644, 650, 645, 646, 647, 652, + 657, 664, 670, 663, 667, 668, -656, 661, 671, 903, + 903, 903, 903, 903, -656, -30, 621, 666, 589, -656, + 67, 669, 673, 674, 411, -656, 675, 678, 683, 1603, + 1706, 140, 173, 1706, 411, 411, 411, 411, 1706, 411, + 420, 252, 255, 411, 263, 903, 1037, 411, 1094, 676, + -656, 693, 685, 687, -656, -656, -656, -57, -656, 411, + 288, 689, 705, 205, 420, 682, 420, 706, 694, 708, + 205, 420, 306, 709, 710, 334, 715, -656, -56, -32, + -656, -656, -656, -656, -656, 712, 714, 720, -656, -656, + 721, 723, -656, 702, -656, 420, -656, -656, -656, 724, + 726, 411, 903, -656, -656, -656, 513, 716, 727, 729, + 731, 738, 739, 733, -656, 848, -656, -656, -656, -656, + -656, 411, 420, -656, 737, 740, 13, 741, -72, 742, + 743, 903, 420, 903, 420, 744, 420, 420, 420, 420, + 745, 420, -656, 903, 420, 903, 420, 420, 903, 420, + 411, 903, 411, 420, 903, 411, 903, 420, 411, 903, + 290, 420, 420, 746, 747, 205, 127, 27, -656, 749, + -656, 755, 205, 129, 110, -656, -656, 751, 752, 715, + -48, -656, 762, -656, 767, -656, 760, 764, 158, 768, + 770, -656, -656, 903, 903, -656, 411, 903, -87, -656, + 1706, 420, 420, 420, 411, 411, -656, 601, 771, 420, + -656, 1706, -72, 763, 699, -656, -656, 893, 772, -656, + 773, -656, -656, -656, -656, -656, -656, -656, -656, 779, + -656, 780, -656, -656, 781, -656, 420, 783, 576, -65, + -656, 784, 420, 792, -656, 420, 795, -656, -656, -656, + -656, 790, 805, 117, 296, 796, 420, 806, 810, 141, + 811, 799, 420, 903, 903, 762, 931, 715, -656, -656, + -656, -656, 812, -656, 813, 815, 809, 814, 420, 807, + 816, -656, -656, 819, -656, -656, -656, 420, 420, 130, + -656, -656, 808, 817, 411, 411, 411, 411, 411, -656, + 411, 818, -656, 411, -656, 420, -656, 411, 823, 165, + 420, 824, 829, 205, -656, 830, 177, 420, 831, 205, + -656, -656, -656, 825, 762, 832, 834, 835, -656, -656, + -656, 1706, 1264, -656, -656, -656, 833, 1706, 1706, 420, + 420, 420, 420, 420, 420, 846, 420, -656, 420, 847, + 852, 420, -656, 853, 855, 155, 857, 859, 420, -656, + 860, 175, 334, -656, -656, -656, -656, -656, 849, -656, + 851, 856, -656, -656, -656, -656, -656, -656, 861, -656, + -656, 862, 180, -656, 868, 216, 420, 864, 865, -656, + 229, 420, -42, -656, -656, -656, 420, 420, 866, 420, + 875, 876, 420, -656, 420, 420, 877, 420, -656, -656, + -656, -656, 869, -656, 871, 872, -656, -656, -656, 873, + -656, 420, 420, 420, 420, -656, -656, -656, -656 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1237,28 +1239,28 @@ static const grib_yytype_int16 grib_yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 17, 0, 22, 28, 23, 24, 25, - 26, 3, 4, 27, 29, 192, 194, 267, 265, 259, - 260, 6, 0, 0, 0, 0, 0, 0, 0, 8, + 26, 3, 4, 27, 29, 194, 196, 269, 267, 261, + 262, 6, 0, 0, 0, 0, 0, 0, 0, 8, 0, 8, 8, 0, 68, 69, 0, 8, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 110, 0, 88, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 128, 0, 132, 0, 137, 0, - 0, 0, 0, 0, 221, 222, 0, 0, 0, 215, - 217, 219, 220, 0, 0, 32, 119, 33, 34, 218, - 228, 234, 243, 253, 255, 257, 258, 36, 0, 262, + 0, 0, 0, 0, 223, 224, 0, 0, 0, 217, + 219, 221, 222, 0, 0, 32, 119, 33, 34, 220, + 230, 236, 245, 255, 257, 259, 260, 36, 0, 264, 0, 8, 0, 8, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 8, 0, 1, 0, 0, 0, 20, 18, - 21, 0, 0, 0, 193, 0, 0, 195, 0, 0, - 268, 0, 0, 0, 0, 0, 107, 108, 0, 0, + 21, 0, 0, 0, 195, 0, 0, 197, 0, 0, + 270, 0, 0, 0, 0, 0, 107, 108, 0, 0, 8, 8, 152, 8, 8, 0, 0, 0, 0, 8, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 122, 0, 0, 0, 0, 0, 0, 0, 8, - 0, 0, 0, 0, 0, 252, 0, 0, 218, 224, + 0, 0, 0, 0, 0, 254, 0, 0, 220, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 106, 0, 105, 8, 8, 8, 0, 0, 0, @@ -1274,69 +1276,70 @@ static const grib_yytype_int16 grib_yydefact[] = 158, 169, 170, 171, 161, 160, 162, 164, 163, 165, 166, 167, 155, 156, 0, 123, 0, 124, 127, 131, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 225, 0, 223, 35, 215, 250, 251, 227, 232, 233, - 229, 230, 231, 242, 241, 245, 249, 247, 248, 246, - 244, 254, 256, 0, 0, 0, 0, 0, 0, 0, + 227, 0, 225, 35, 217, 252, 253, 229, 234, 235, + 231, 232, 233, 244, 243, 247, 251, 249, 250, 248, + 246, 256, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 8, - 8, 8, 8, 8, 15, 0, 0, 0, 208, 261, + 8, 8, 8, 8, 15, 0, 0, 0, 210, 263, 0, 0, 0, 0, 8, 92, 0, 0, 0, 0, 0, 8, 8, 0, 8, 8, 8, 8, 0, 8, 8, 8, 8, 8, 8, 0, 0, 8, 0, 0, 109, 0, 0, 0, 89, 11, 9, 0, 90, 8, 0, 0, 0, 0, 8, 0, 8, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 13, 0, 0, - 130, 134, 139, 138, 118, 0, 0, 0, 240, 235, - 0, 0, 226, 0, 100, 8, 101, 102, 103, 0, + 130, 134, 139, 138, 118, 0, 0, 0, 242, 237, + 0, 0, 228, 0, 100, 8, 101, 102, 103, 0, 0, 8, 0, 115, 116, 117, 0, 0, 0, 0, - 0, 0, 0, 0, 213, 0, 205, 209, 212, 204, - 206, 8, 8, 207, 0, 0, 0, 0, 263, 0, + 0, 0, 0, 0, 215, 0, 207, 211, 214, 206, + 208, 8, 8, 209, 0, 0, 0, 0, 265, 0, 0, 8, 8, 8, 8, 0, 8, 8, 8, 8, 0, 8, 86, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 0, 8, 8, 0, 0, 0, 0, 175, 0, 196, - 0, 0, 0, 0, 184, 157, 0, 0, 0, 0, - 30, 145, 125, 0, 126, 0, 0, 0, 0, 0, - 120, 104, 8, 8, 96, 8, 0, 0, 198, 0, - 8, 8, 8, 8, 8, 16, 0, 0, 8, 93, - 0, 0, 0, 141, 264, 266, 143, 0, 37, 0, - 39, 174, 41, 48, 43, 51, 173, 87, 0, 52, - 0, 54, 85, 0, 49, 8, 0, 36, 8, 60, - 0, 8, 0, 111, 8, 0, 12, 10, 91, 67, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 8, 0, 0, 150, 146, 0, 31, 14, 236, 237, - 0, 238, 0, 0, 0, 0, 8, 0, 0, 203, - 199, 0, 44, 46, 45, 8, 8, 0, 210, 94, - 0, 0, 8, 8, 8, 8, 8, 57, 8, 0, - 56, 8, 63, 8, 113, 8, 0, 8, 0, 0, - 182, 0, 0, 8, 0, 0, 190, 148, 149, 0, - 151, 0, 0, 0, 97, 98, 65, 0, 0, 172, - 61, 62, 0, 0, 0, 8, 8, 8, 8, 8, - 8, 0, 8, 66, 8, 0, 8, 176, 0, 0, - 0, 0, 8, 185, 0, 0, 0, 239, 214, 216, - 200, 202, 0, 211, 0, 0, 38, 40, 53, 55, - 50, 59, 0, 64, 114, 0, 179, 0, 8, 0, - 0, 187, 0, 8, 0, 201, 142, 144, 8, 0, - 8, 0, 8, 183, 8, 8, 0, 8, 191, 147, - 58, 0, 177, 0, 181, 197, 186, 0, 189, 8, - 8, 8, 178, 180, 188 + 0, 8, 8, 0, 0, 0, 0, 0, 175, 0, + 198, 0, 0, 0, 0, 186, 157, 0, 0, 0, + 0, 30, 145, 125, 0, 126, 0, 0, 0, 0, + 0, 120, 104, 8, 8, 96, 8, 0, 0, 200, + 0, 8, 8, 8, 8, 8, 16, 0, 0, 8, + 93, 0, 0, 0, 141, 266, 268, 143, 0, 37, + 0, 39, 174, 41, 48, 43, 51, 173, 87, 0, + 52, 0, 54, 85, 0, 49, 8, 0, 36, 8, + 60, 0, 8, 0, 111, 8, 0, 12, 10, 91, + 67, 0, 0, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 8, 0, 0, 150, 146, 0, 31, 14, + 238, 239, 0, 240, 0, 0, 0, 0, 8, 0, + 0, 205, 201, 0, 44, 46, 45, 8, 8, 0, + 212, 94, 0, 0, 8, 8, 8, 8, 8, 57, + 8, 0, 56, 8, 63, 8, 113, 8, 0, 0, + 8, 0, 0, 0, 184, 0, 0, 8, 0, 0, + 192, 148, 149, 0, 151, 0, 0, 0, 97, 98, + 65, 0, 0, 172, 61, 62, 0, 0, 0, 8, + 8, 8, 8, 8, 8, 0, 8, 66, 8, 0, + 0, 8, 176, 0, 0, 0, 0, 0, 8, 187, + 0, 0, 0, 241, 216, 218, 202, 204, 0, 213, + 0, 0, 38, 40, 53, 55, 50, 59, 0, 64, + 114, 0, 0, 180, 0, 0, 8, 0, 0, 189, + 0, 8, 0, 203, 142, 144, 8, 8, 0, 8, + 0, 0, 8, 185, 8, 8, 0, 8, 193, 147, + 58, 178, 0, 177, 0, 0, 183, 199, 188, 0, + 191, 8, 8, 8, 8, 179, 182, 181, 190 }; /* YYPGOTO[NTERM-NUM]. */ static const grib_yytype_int16 grib_yypgoto[] = { - -658, -658, 5, 533, -658, -352, 0, -658, -657, 686, - -307, -193, -658, -658, -658, -443, -170, 589, 207, -658, - 440, -658, -658, -658, -658, -259, 692, -658, -658, 294, - -658, -89, -349, -658, -75, -144, 810, 91, 113, 90, - -162, 663, -658, -58, -658, 10, 368, -658, -658, 890 + -656, -656, 5, 272, -656, -352, 0, -656, -655, -47, + -308, -202, -656, -656, -656, -443, -141, 545, 214, -656, + 445, -656, -656, -656, -656, -263, 700, -656, -656, 301, + -656, -85, -345, -656, -81, -144, 837, 1, 103, 30, + -161, 680, -656, -94, -656, 10, 395, -656, -656, 915 }; /* YYDEFGOTO[NTERM-NUM]. */ static const grib_yytype_int16 grib_yydefgoto[] = { - 0, 80, 290, 547, 569, 505, 617, 83, 671, 176, - 177, 178, 84, 85, 86, 668, 669, 243, 291, 442, - 443, 87, 88, 89, 90, 91, 92, 93, 687, 688, + 0, 80, 290, 547, 569, 505, 617, 83, 672, 176, + 177, 178, 84, 85, 86, 669, 670, 243, 291, 442, + 443, 87, 88, 89, 90, 91, 92, 93, 688, 689, 94, 95, 507, 508, 96, 179, 180, 181, 182, 183, 184, 185, 186, 187, 97, 618, 619, 99, 100, 101 }; @@ -1346,147 +1349,159 @@ static const grib_yytype_int16 grib_yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const grib_yytype_int16 grib_yytable[] = { - 82, 566, 224, 463, 510, 81, 305, 208, 511, 512, - 98, 753, 344, 516, 789, 164, 165, 227, 563, 564, - 563, 564, 228, 57, 422, 208, 686, 208, 768, 427, - 308, 167, 563, 564, 221, 222, 78, 223, 284, 348, - 349, 350, 285, 212, 231, 232, 276, 554, 464, 170, - 356, 225, 226, 213, 385, 769, 357, 277, 246, 229, - 175, 650, 167, 351, 556, 314, 315, 650, 319, 673, - 651, 107, 289, 320, 352, 754, 672, 889, 674, 169, - 170, 171, 172, 219, 108, 416, 418, 173, 565, 316, - 317, 318, 247, 292, 174, 102, 241, 248, 810, 221, - 222, 78, 223, 161, 162, 163, 57, 98, 221, 222, - 78, 223, 561, 154, 175, 307, 242, 242, 103, 550, - 155, 744, 242, 209, 551, 242, 242, 242, 242, 242, - 242, 242, 242, 242, 242, 242, 242, 242, 242, 156, - 158, 364, 229, 702, 164, 165, 157, 159, 345, 114, - 115, 355, 359, 161, 162, 163, 241, 360, 557, 607, - 445, 603, 110, 558, 604, 481, 513, 465, 466, 308, + 82, 566, 463, 344, 510, 81, 224, 305, 231, 232, + 98, 227, 511, 512, 755, 791, 57, 516, 102, 228, + 422, 687, 246, 770, 208, 427, 208, 164, 165, 167, + 308, 208, 563, 564, 563, 564, 225, 226, 563, 564, + 348, 349, 350, 314, 315, 385, 464, 170, 276, 556, + 771, 212, 229, 221, 222, 78, 223, 292, 154, 277, + 175, 213, 238, 156, 351, 155, 554, 316, 317, 318, + 157, 650, 650, 289, 167, 352, 416, 418, 284, 307, + 651, 673, 285, 219, 221, 222, 78, 223, 103, 756, + 565, 169, 170, 171, 172, 899, 674, 561, 603, 173, + 107, 604, 814, 57, 158, 675, 174, 98, 161, 162, + 163, 159, 345, 356, 175, 355, 242, 242, 550, 357, + 552, 104, 242, 551, 553, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 229, + 209, 319, 364, 161, 162, 163, 320, 703, 108, 164, + 165, 221, 222, 78, 223, 281, 557, 513, 282, 283, + 346, 558, 110, 607, 746, 445, 481, 465, 466, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 104, 166, 221, 222, 78, 223, 552, - 109, 167, 577, 553, 164, 165, 111, 578, 750, 742, - 221, 222, 78, 223, 743, 168, 225, 226, 169, 170, - 171, 172, 175, 797, 748, 113, 173, 242, 365, 749, - 446, 281, 112, 174, 282, 283, 755, 221, 222, 78, - 223, 116, 760, 835, 166, 447, 448, 761, 836, 841, - 803, 167, 879, 881, 842, 175, 175, 880, 882, 161, - 162, 163, 348, 349, 350, 168, 135, 886, 169, 170, - 171, 172, 887, 117, 286, 559, 173, 287, 288, 560, - 417, 175, 105, 174, 106, 175, 351, 161, 162, 163, - 221, 222, 78, 223, 621, 175, 120, 352, 241, 498, - 164, 165, 121, 868, 656, 221, 222, 78, 223, 623, - 122, 663, 633, 241, 175, 517, 241, 118, 873, 119, - 635, 175, 518, 355, 241, 240, 638, 241, 164, 165, - 241, 123, 161, 162, 163, 221, 222, 78, 223, 124, - 166, 603, 125, 224, 608, 175, 126, 167, 224, 175, - 175, 175, 640, 642, 777, 645, 175, 175, 175, 227, - 603, 168, 127, 822, 169, 170, 171, 172, 166, 268, - 353, 269, 173, 164, 165, 167, 354, 273, 274, 174, - 321, 322, 323, 324, 325, 326, 567, 545, 546, 767, - 297, 298, 169, 170, 171, 172, 311, 312, 545, 546, - 173, 242, 458, 459, 128, 741, 129, 174, 331, 685, - 333, 130, 747, 166, 467, 468, 469, 470, 471, 472, - 167, 475, 476, 477, 478, 479, 480, 524, 525, 175, - 563, 564, 428, 151, 168, 736, 737, 169, 170, 171, - 172, 755, 473, 474, 131, 173, 460, 132, 133, 134, - 137, 136, 174, 140, 141, 142, 143, 138, 139, 144, - 381, 382, 145, 146, 147, 148, 387, 149, 150, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 429, 161, 162, 163, 348, 349, 350, - 152, 153, 430, 431, 432, 433, 434, 435, 160, 190, - 436, 437, 188, 438, 439, 189, 440, 441, 191, 192, - 193, 351, 194, 195, 175, 175, 175, 175, 175, 196, - 197, 198, 352, 199, 200, 164, 165, 201, 202, 242, - 620, 203, 204, 625, 205, 206, 242, 242, 630, 242, - 242, 242, 242, 207, 242, 214, 242, 242, 242, 242, - 839, 210, 242, 211, 220, 233, 845, 697, 234, 235, - 236, 237, 241, 239, 242, 166, 245, 250, 251, 266, - 267, 271, 167, 272, 313, 270, 289, 224, 515, 310, - 329, 275, 278, 279, 224, 280, 168, 295, 293, 169, - 170, 171, 172, 727, 294, 296, 727, 173, 299, 300, - 301, 327, 302, 303, 174, 304, 242, 306, 328, 330, - 332, 334, 335, 336, 358, 337, 338, 339, 340, 341, - 212, 362, 483, 606, 686, 342, 242, 343, 540, 347, - 363, 370, 375, 544, 366, 548, 175, 367, 175, 213, - 368, 369, 371, 372, 373, 374, 376, 377, 175, 378, - 175, 383, 384, 175, 355, 242, 175, 242, 386, 175, - 242, 175, 224, 242, 175, 389, 388, 405, 224, 406, - 407, 409, 410, 411, 412, 413, 414, 415, 420, 421, - 423, 425, 426, 354, 357, 444, 874, 454, 455, 456, - 457, 506, 449, 450, 451, 452, 504, 175, 175, 771, - 242, 462, 485, 807, 808, 489, 490, 491, 242, 242, - 492, 244, 514, 496, 497, 499, 249, 500, 501, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 502, 503, 509, 519, 353, 356, 520, - 521, 522, 527, 526, 529, 523, 531, 632, 528, 532, - 533, 534, 535, 536, 537, 538, 539, 541, 543, 549, - 224, 555, 570, 562, 571, 572, 224, 573, 653, 574, - 646, 657, 575, 659, 161, 162, 163, 576, 664, 579, - 580, 581, 583, 582, 161, 162, 163, 584, 585, 586, - 587, 589, 588, 590, 591, 592, 593, 242, 242, 242, - 242, 242, 681, 242, 596, 238, 242, 594, 595, 597, - 242, 361, 605, 611, 609, 164, 165, 610, 613, 614, - 615, 647, 648, 649, 654, 164, 165, 850, 852, 699, - 655, 661, 658, 854, 855, 660, 662, 666, 667, 708, - 670, 710, 675, 712, 713, 714, 715, 676, 717, 677, - 678, 719, 679, 721, 722, 166, 724, 689, 680, 682, - 729, 683, 167, 690, 733, 166, 691, 692, 738, 739, - 693, 694, 167, 695, 751, 700, 168, 701, 740, 169, - 170, 171, 172, 703, 780, 696, 168, 173, 705, 169, - 170, 171, 172, 706, 174, 711, 716, 173, 161, 162, - 163, 745, 746, 346, 174, 752, 756, 772, 773, 774, - 757, 758, 759, 778, 762, 779, 763, 781, 782, 799, - 783, 784, 785, 786, 796, 801, 788, 791, 793, 795, - 798, 802, 809, 804, 805, 811, 379, 380, 812, 164, - 165, 813, 787, 814, 815, 790, 838, 862, 792, 840, - 819, 794, 817, 823, 818, 824, 831, 844, 846, 847, - 848, 800, 404, 849, 853, 865, 408, 806, 867, 869, - 870, 872, 878, 875, 876, 877, 419, 891, 893, 166, - 897, 884, 885, 816, 899, 530, 167, 424, 900, 568, - 901, 770, 820, 821, 309, 453, 704, 230, 0, 0, - 168, 482, 461, 169, 170, 171, 172, 0, 0, 0, - 833, 641, 665, 0, 837, 0, 0, 0, 174, 0, - 843, 0, 0, 0, 0, 0, 484, 0, 0, 0, - 486, 487, 488, 0, 0, 0, 0, 493, 494, 495, - 0, 0, 856, 857, 858, 859, 860, 861, 0, 863, - 0, 864, 0, 866, 0, 0, 0, 0, 0, 871, - 0, 0, 0, 0, 161, 162, 163, 0, 0, 0, + 308, 308, 308, 247, 164, 165, 359, 241, 248, 166, + 241, 360, 577, 379, 380, 603, 167, 578, 608, 447, + 448, 321, 322, 323, 324, 325, 326, 559, 114, 115, + 168, 560, 175, 169, 170, 171, 172, 242, 365, 404, + 240, 173, 241, 408, 166, 446, 286, 757, 174, 287, + 288, 167, 109, 419, 221, 222, 78, 223, 567, 545, + 546, 221, 222, 78, 223, 175, 175, 752, 169, 170, + 171, 172, 453, 498, 800, 744, 173, 750, 603, 461, + 745, 826, 751, 174, 113, 221, 222, 78, 223, 517, + 621, 175, 225, 226, 241, 175, 518, 355, 807, 221, + 222, 78, 223, 484, 111, 175, 762, 486, 487, 488, + 657, 763, 876, 840, 493, 494, 495, 664, 841, 221, + 222, 78, 223, 623, 175, 847, 112, 241, 888, 428, + 848, 175, 881, 889, 467, 468, 469, 470, 471, 472, + 105, 116, 106, 161, 162, 163, 348, 349, 350, 221, + 222, 78, 223, 640, 642, 175, 645, 224, 135, 175, + 175, 175, 224, 227, 891, 779, 175, 175, 175, 892, + 351, 475, 476, 477, 478, 479, 480, 896, 273, 274, + 429, 352, 897, 117, 164, 165, 118, 542, 119, 430, + 431, 432, 433, 434, 435, 297, 298, 436, 437, 769, + 438, 439, 633, 440, 441, 635, 241, 311, 312, 241, + 686, 242, 743, 638, 268, 120, 269, 241, 121, 749, + 458, 459, 524, 525, 166, 331, 189, 333, 545, 546, + 122, 167, 653, 654, 563, 564, 737, 738, 123, 175, + 801, 802, 473, 474, 124, 168, 125, 126, 169, 170, + 171, 172, 127, 128, 353, 129, 173, 130, 131, 757, + 354, 132, 133, 174, 134, 136, 137, 140, 141, 138, + 142, 139, 598, 599, 600, 601, 602, 381, 382, 143, + 161, 162, 163, 387, 144, 145, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 146, 147, 148, 149, 150, 151, 152, 153, 160, 190, + 191, 214, 193, 188, 194, 195, 196, 192, 197, 198, + 202, 164, 165, 199, 175, 175, 175, 175, 175, 200, + 201, 698, 203, 204, 205, 206, 207, 236, 233, 242, + 620, 210, 220, 625, 234, 211, 242, 242, 630, 242, + 242, 242, 242, 235, 242, 237, 242, 242, 242, 242, + 845, 166, 242, 239, 245, 241, 851, 728, 167, 250, + 728, 251, 266, 267, 242, 271, 270, 272, 289, 295, + 280, 275, 168, 327, 278, 169, 170, 171, 172, 279, + 293, 294, 224, 173, 708, 515, 710, 417, 296, 224, + 174, 299, 300, 301, 310, 302, 719, 303, 721, 304, + 306, 724, 328, 329, 727, 330, 242, 731, 334, 733, + 313, 332, 736, 335, 337, 336, 338, 339, 340, 355, + 358, 341, 362, 212, 353, 342, 242, 343, 347, 363, + 386, 687, 366, 375, 367, 540, 175, 213, 175, 368, + 544, 369, 548, 370, 371, 372, 766, 767, 175, 373, + 175, 374, 376, 175, 377, 242, 175, 242, 378, 175, + 242, 175, 383, 242, 175, 384, 388, 244, 224, 811, + 812, 389, 249, 405, 224, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 406, + 407, 409, 410, 411, 412, 413, 414, 415, 175, 175, + 773, 242, 420, 421, 423, 425, 426, 444, 449, 242, + 242, 454, 455, 456, 457, 782, 450, 451, 452, 462, + 483, 882, 485, 506, 489, 490, 491, 492, 568, 514, + 496, 497, 499, 500, 501, 502, 503, 504, 509, 521, + 356, 522, 354, 357, 519, 527, 531, 526, 520, 523, + 529, 532, 528, 534, 632, 533, 535, 536, 537, 538, + 539, 543, 541, 549, 570, 605, 555, 361, 562, 571, + 224, 572, 573, 575, 574, 579, 224, 576, 658, 580, + 660, 581, 583, 582, 585, 665, 589, 584, 586, 587, + 588, 590, 161, 162, 163, 348, 349, 350, 591, 242, + 242, 242, 242, 242, 592, 242, 593, 596, 242, 682, + 594, 595, 242, 606, 597, 611, 609, 659, 646, 351, + 610, 614, 613, 161, 162, 163, 615, 647, 648, 649, + 352, 856, 858, 164, 165, 655, 700, 860, 861, 656, + 662, 661, 663, 667, 668, 681, 709, 676, 711, 677, + 713, 714, 715, 716, 671, 718, 678, 679, 720, 680, + 722, 723, 690, 725, 164, 165, 683, 730, 684, 696, + 691, 734, 692, 166, 693, 739, 740, 161, 162, 163, + 167, 694, 695, 701, 741, 742, 702, 747, 704, 706, + 707, 712, 717, 748, 168, 753, 754, 169, 170, 171, + 172, 758, 759, 760, 166, 173, 764, 761, 765, 783, + 780, 167, 174, 784, 785, 774, 775, 776, 164, 165, + 786, 787, 788, 781, 798, 168, 790, 793, 169, 170, + 171, 172, 161, 162, 163, 795, 173, 460, 797, 799, + 805, 530, 803, 174, 806, 809, 808, 813, 815, 816, + 789, 817, 818, 792, 827, 821, 794, 819, 166, 796, + 835, 839, 843, 828, 822, 167, 823, 844, 846, 850, + 804, 852, 859, 164, 165, 853, 810, 854, 855, 168, + 868, 871, 169, 170, 171, 172, 872, 874, 697, 875, + 173, 877, 820, 878, 880, 424, 883, 174, 884, 772, + 902, 824, 825, 885, 886, 887, 890, 894, 895, 904, + 905, 909, 911, 166, 912, 913, 914, 666, 482, 837, + 167, 309, 230, 705, 842, 0, 0, 0, 0, 0, + 0, 849, 0, 0, 168, 0, 0, 169, 170, 171, + 172, 0, 0, 0, 0, 173, 0, 0, 0, 0, + 0, 0, 174, 862, 863, 864, 865, 866, 867, 0, + 869, 0, 870, 0, 0, 873, 161, 162, 163, 612, + 0, 0, 879, 0, 0, 0, 622, 624, 0, 626, + 627, 628, 629, 0, 631, 0, 634, 636, 637, 639, + 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, + 893, 0, 0, 0, 652, 898, 0, 164, 165, 0, + 900, 901, 0, 903, 0, 0, 906, 0, 907, 908, + 0, 910, 0, 161, 162, 163, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 915, 916, 917, 918, 0, + 0, 0, 0, 0, 0, 0, 685, 166, 0, 0, + 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 164, 165, 699, 0, 168, 0, + 0, 169, 170, 171, 172, 0, 0, 0, 0, 641, + 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, + 0, 0, 0, 0, 0, 726, 0, 729, 0, 0, + 732, 0, 0, 735, 166, 0, 0, 0, 0, 0, + 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 168, 0, 0, 169, 170, + 171, 172, 0, 0, 0, 0, 644, 0, 0, 0, + 0, 768, 0, 174, 0, 0, 0, 0, 0, 777, + 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 883, 0, 0, 0, 0, - 888, 0, 0, 0, 0, 890, 0, 892, 0, 894, - 0, 895, 896, 0, 898, 164, 165, 0, 0, 0, - 542, 0, 0, 612, 0, 0, 902, 903, 904, 0, - 622, 624, 0, 626, 627, 628, 629, 0, 631, 0, - 634, 636, 637, 639, 0, 0, 643, 0, 0, 0, - 0, 0, 0, 0, 0, 166, 0, 0, 652, 0, - 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 168, 0, 0, 169, - 170, 171, 172, 0, 0, 0, 0, 644, 0, 0, - 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, - 684, 0, 0, 0, 0, 598, 599, 600, 601, 602, + 0, 0, 0, 0, 0, 0, 0, 0, 215, 3, + 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 0, 0, 0, 0, 0, 0, 0, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 0, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 0, 45, 46, 0, 0, 47, 0, 0, 829, + 830, 831, 832, 833, 0, 834, 0, 0, 836, 0, + 0, 0, 838, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 0, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 0, 69, 70, 71, 72, 73, + 74, 0, 0, 75, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, + 0, 217, 0, 0, -8, 1, 0, 0, 2, 3, + 0, 857, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 0, 0, 0, 0, 0, 0, 0, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 0, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 0, 45, 46, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, - 0, 728, 0, 0, 731, 0, 0, 734, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, - 0, 0, 775, 776, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 707, 0, 709, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 718, - 0, 720, 0, 0, 723, 0, 0, 726, 0, 0, - 730, 0, 732, 0, 0, 735, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 764, 765, - 0, 825, 826, 827, 828, 829, 0, 830, 0, 0, - 832, 215, 3, 0, 834, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 0, 0, - 0, 0, 14, 15, 16, 17, 18, 19, 20, 21, + 0, 0, 0, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 0, 69, 70, 71, 72, 73, + 74, 215, 3, 75, 0, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 0, 0, 0, 76, 77, + 78, 79, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 0, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 0, 45, 46, 0, 0, 47, @@ -1494,198 +1509,187 @@ static const grib_yytype_int16 grib_yytable[] = 0, 0, 0, 0, 0, 0, 48, 49, 50, 51, 52, 53, 54, 55, 56, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 0, 69, 70, - 71, 72, 73, 74, 0, 0, 75, 0, 0, 0, + 71, 72, 73, 74, 0, 0, 75, 215, 3, 0, + 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 216, 0, 0, 217, 0, 218, 0, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 0, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 0, 45, 46, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 216, 0, 0, 217, 0, 0, -8, 1, 0, - 0, 2, 3, 0, 851, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 0, 0, - 0, 0, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 0, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 0, 45, 46, 0, 0, 47, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 0, 69, 70, - 71, 72, 73, 74, 215, 3, 75, 0, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, - 0, 76, 77, 78, 79, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 0, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 0, 45, 46, - 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 0, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 0, 69, 70, 71, 72, 73, 74, 0, 0, 75, - 215, 3, 0, 0, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 216, 0, 0, 217, 0, 218, - 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 0, 0, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 0, 69, 70, 71, 72, 73, 74, + 215, 3, 75, 0, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 0, 0, 0, 616, 0, 0, + 217, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 0, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 0, 45, 46, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 53, 54, 55, 56, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 0, 69, 70, 71, - 72, 73, 74, 215, 3, 75, 0, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, - 616, 0, 0, 217, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 0, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 0, 45, 46, 0, - 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 0, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 0, - 69, 70, 71, 72, 73, 74, 0, 0, 75, 0, + 72, 73, 74, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 216, 0, 0, 217 + 216, 0, 0, 217 }; static const grib_yytype_int16 grib_yycheck[] = { - 0, 444, 91, 310, 356, 0, 168, 18, 357, 358, - 0, 668, 205, 362, 80, 60, 61, 92, 80, 81, - 80, 81, 4, 88, 283, 18, 108, 18, 110, 288, - 174, 107, 80, 81, 124, 125, 126, 127, 132, 22, - 23, 24, 136, 124, 102, 103, 124, 137, 124, 125, - 130, 124, 125, 134, 247, 137, 136, 135, 116, 124, - 55, 128, 107, 46, 137, 117, 118, 128, 139, 128, - 137, 124, 138, 144, 57, 137, 137, 137, 137, 124, - 125, 126, 127, 83, 124, 278, 279, 132, 136, 141, - 142, 143, 130, 151, 139, 132, 134, 135, 755, 124, - 125, 126, 127, 19, 20, 21, 88, 97, 124, 125, - 126, 127, 137, 125, 109, 173, 111, 112, 132, 128, - 132, 137, 117, 134, 133, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 125, - 125, 134, 124, 134, 60, 61, 132, 132, 206, 124, - 125, 209, 130, 19, 20, 21, 134, 135, 128, 508, - 76, 128, 130, 133, 131, 327, 359, 311, 312, 313, + 0, 444, 310, 205, 356, 0, 91, 168, 102, 103, + 0, 92, 357, 358, 669, 80, 88, 362, 132, 4, + 283, 108, 116, 110, 18, 288, 18, 60, 61, 107, + 174, 18, 80, 81, 80, 81, 124, 125, 80, 81, + 22, 23, 24, 117, 118, 247, 124, 125, 124, 137, + 137, 124, 124, 124, 125, 126, 127, 151, 125, 135, + 55, 134, 109, 125, 46, 132, 137, 141, 142, 143, + 132, 128, 128, 138, 107, 57, 278, 279, 132, 173, + 137, 137, 136, 83, 124, 125, 126, 127, 132, 137, + 136, 124, 125, 126, 127, 137, 128, 137, 128, 132, + 124, 131, 757, 88, 125, 137, 139, 97, 19, 20, + 21, 132, 206, 130, 109, 209, 111, 112, 128, 136, + 132, 132, 117, 133, 136, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 124, + 134, 139, 134, 19, 20, 21, 144, 134, 124, 60, + 61, 124, 125, 126, 127, 132, 128, 359, 135, 136, + 207, 133, 130, 508, 137, 76, 327, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 132, 100, 124, 125, 126, 127, 132, - 132, 107, 128, 136, 60, 61, 124, 133, 137, 128, - 124, 125, 126, 127, 133, 121, 124, 125, 124, 125, - 126, 127, 207, 137, 128, 130, 132, 212, 218, 133, - 136, 132, 124, 139, 135, 136, 669, 124, 125, 126, - 127, 132, 128, 128, 100, 293, 294, 133, 133, 128, - 137, 107, 128, 128, 133, 240, 241, 133, 133, 19, - 20, 21, 22, 23, 24, 121, 130, 128, 124, 125, - 126, 127, 133, 124, 132, 132, 132, 135, 136, 136, - 136, 266, 130, 139, 132, 270, 46, 19, 20, 21, - 124, 125, 126, 127, 130, 280, 124, 57, 134, 347, - 60, 61, 124, 137, 553, 124, 125, 126, 127, 130, - 124, 560, 130, 134, 299, 363, 134, 130, 137, 132, - 130, 306, 370, 371, 134, 132, 130, 134, 60, 61, - 134, 124, 19, 20, 21, 124, 125, 126, 127, 124, - 100, 128, 124, 422, 131, 330, 124, 107, 427, 334, - 335, 336, 535, 536, 696, 538, 341, 342, 343, 424, - 128, 121, 124, 131, 124, 125, 126, 127, 100, 124, - 130, 126, 132, 60, 61, 107, 136, 134, 135, 139, - 111, 112, 113, 114, 115, 116, 125, 126, 127, 686, - 124, 125, 124, 125, 126, 127, 122, 123, 126, 127, - 132, 386, 124, 125, 124, 654, 124, 139, 191, 592, - 193, 124, 661, 100, 313, 314, 315, 316, 317, 318, - 107, 321, 322, 323, 324, 325, 326, 124, 125, 414, - 80, 81, 3, 132, 121, 126, 127, 124, 125, 126, - 127, 874, 319, 320, 124, 132, 133, 124, 124, 124, - 124, 130, 139, 124, 124, 124, 124, 130, 130, 124, - 243, 244, 124, 124, 124, 124, 249, 124, 124, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 54, 19, 20, 21, 22, 23, 24, - 124, 124, 63, 64, 65, 66, 67, 68, 124, 124, - 71, 72, 132, 74, 75, 129, 77, 78, 124, 130, - 124, 46, 124, 124, 499, 500, 501, 502, 503, 124, - 124, 130, 57, 130, 130, 60, 61, 130, 124, 514, - 520, 124, 124, 523, 124, 132, 521, 522, 528, 524, - 525, 526, 527, 132, 529, 0, 531, 532, 533, 534, - 799, 134, 537, 134, 129, 124, 805, 605, 126, 126, - 125, 125, 134, 126, 549, 100, 126, 126, 126, 130, - 126, 126, 107, 126, 140, 132, 138, 656, 361, 128, - 124, 135, 134, 134, 663, 132, 121, 126, 134, 124, - 125, 126, 127, 641, 134, 126, 644, 132, 132, 132, - 132, 119, 132, 132, 139, 132, 591, 132, 120, 132, - 126, 132, 132, 132, 136, 126, 126, 126, 126, 132, - 124, 136, 128, 137, 108, 132, 611, 132, 411, 132, - 132, 132, 131, 416, 134, 418, 621, 134, 623, 134, - 134, 134, 134, 133, 133, 133, 133, 133, 633, 131, - 635, 131, 133, 638, 702, 640, 641, 642, 124, 644, - 645, 646, 741, 648, 649, 133, 131, 131, 747, 131, - 131, 131, 131, 124, 124, 124, 132, 124, 124, 124, - 124, 124, 124, 136, 136, 133, 846, 124, 124, 124, - 124, 124, 133, 133, 133, 133, 126, 682, 683, 689, - 685, 133, 131, 751, 752, 131, 131, 131, 693, 694, - 131, 112, 124, 133, 133, 132, 117, 132, 132, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 132, 132, 129, 136, 130, 130, 136, - 124, 124, 124, 133, 131, 136, 124, 530, 136, 124, - 131, 124, 124, 124, 133, 124, 124, 134, 124, 133, - 839, 128, 125, 128, 125, 125, 845, 125, 125, 133, - 132, 554, 128, 556, 19, 20, 21, 128, 561, 133, - 128, 128, 124, 133, 19, 20, 21, 133, 124, 133, - 133, 124, 133, 124, 124, 124, 133, 782, 783, 784, - 785, 786, 585, 788, 136, 109, 791, 133, 133, 133, - 795, 212, 134, 131, 137, 60, 61, 137, 137, 133, - 133, 124, 133, 132, 136, 60, 61, 817, 818, 612, - 124, 136, 125, 823, 824, 125, 124, 124, 124, 622, - 129, 624, 125, 626, 627, 628, 629, 125, 631, 126, - 126, 634, 126, 636, 637, 100, 639, 136, 133, 132, - 643, 132, 107, 133, 647, 100, 133, 133, 651, 652, - 133, 133, 107, 126, 134, 136, 121, 136, 128, 124, - 125, 126, 127, 137, 6, 130, 121, 132, 137, 124, - 125, 126, 127, 137, 139, 137, 137, 132, 19, 20, - 21, 128, 128, 207, 139, 134, 129, 690, 691, 692, - 125, 133, 133, 129, 128, 698, 128, 6, 131, 136, - 131, 131, 131, 131, 124, 124, 133, 133, 133, 133, - 125, 124, 6, 125, 136, 126, 240, 241, 126, 60, - 61, 126, 725, 133, 133, 728, 128, 124, 731, 128, - 137, 734, 138, 136, 138, 136, 132, 128, 136, 133, - 133, 744, 266, 133, 129, 124, 270, 750, 124, 124, - 124, 124, 133, 137, 137, 137, 280, 124, 124, 100, - 124, 133, 133, 766, 133, 386, 107, 285, 133, 446, - 133, 687, 775, 776, 174, 299, 618, 97, -1, -1, - 121, 328, 306, 124, 125, 126, 127, -1, -1, -1, - 793, 132, 562, -1, 797, -1, -1, -1, 139, -1, - 803, -1, -1, -1, -1, -1, 330, -1, -1, -1, - 334, 335, 336, -1, -1, -1, -1, 341, 342, 343, - -1, -1, 825, 826, 827, 828, 829, 830, -1, 832, - -1, 834, -1, 836, -1, -1, -1, -1, -1, 842, - -1, -1, -1, -1, 19, 20, 21, -1, -1, -1, + 324, 325, 326, 130, 60, 61, 130, 134, 135, 100, + 134, 135, 128, 240, 241, 128, 107, 133, 131, 293, + 294, 111, 112, 113, 114, 115, 116, 132, 124, 125, + 121, 136, 207, 124, 125, 126, 127, 212, 218, 266, + 132, 132, 134, 270, 100, 136, 132, 670, 139, 135, + 136, 107, 132, 280, 124, 125, 126, 127, 125, 126, + 127, 124, 125, 126, 127, 240, 241, 137, 124, 125, + 126, 127, 299, 347, 137, 128, 132, 128, 128, 306, + 133, 131, 133, 139, 130, 124, 125, 126, 127, 363, + 130, 266, 124, 125, 134, 270, 370, 371, 137, 124, + 125, 126, 127, 330, 124, 280, 128, 334, 335, 336, + 553, 133, 137, 128, 341, 342, 343, 560, 133, 124, + 125, 126, 127, 130, 299, 128, 124, 134, 128, 3, + 133, 306, 137, 133, 313, 314, 315, 316, 317, 318, + 130, 132, 132, 19, 20, 21, 22, 23, 24, 124, + 125, 126, 127, 535, 536, 330, 538, 422, 130, 334, + 335, 336, 427, 424, 128, 697, 341, 342, 343, 133, + 46, 321, 322, 323, 324, 325, 326, 128, 134, 135, + 54, 57, 133, 124, 60, 61, 130, 414, 132, 63, + 64, 65, 66, 67, 68, 124, 125, 71, 72, 687, + 74, 75, 130, 77, 78, 130, 134, 122, 123, 134, + 592, 386, 655, 130, 124, 124, 126, 134, 124, 662, + 124, 125, 124, 125, 100, 191, 129, 193, 126, 127, + 124, 107, 124, 125, 80, 81, 126, 127, 124, 414, + 124, 125, 319, 320, 124, 121, 124, 124, 124, 125, + 126, 127, 124, 124, 130, 124, 132, 124, 124, 882, + 136, 124, 124, 139, 124, 130, 124, 124, 124, 130, + 124, 130, 499, 500, 501, 502, 503, 243, 244, 124, + 19, 20, 21, 249, 124, 124, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 124, 124, 124, 124, 124, 132, 124, 124, 124, 124, + 124, 0, 124, 132, 124, 124, 124, 130, 124, 130, + 124, 60, 61, 130, 499, 500, 501, 502, 503, 130, + 130, 605, 124, 124, 124, 132, 132, 125, 124, 514, + 520, 134, 129, 523, 126, 134, 521, 522, 528, 524, + 525, 526, 527, 126, 529, 125, 531, 532, 533, 534, + 803, 100, 537, 126, 126, 134, 809, 641, 107, 126, + 644, 126, 130, 126, 549, 126, 132, 126, 138, 126, + 132, 135, 121, 119, 134, 124, 125, 126, 127, 134, + 134, 134, 657, 132, 621, 361, 623, 136, 126, 664, + 139, 132, 132, 132, 128, 132, 633, 132, 635, 132, + 132, 638, 120, 124, 641, 132, 591, 644, 132, 646, + 140, 126, 649, 132, 126, 132, 126, 126, 126, 703, + 136, 132, 136, 124, 130, 132, 611, 132, 132, 132, + 124, 108, 134, 131, 134, 411, 621, 134, 623, 134, + 416, 134, 418, 132, 134, 133, 683, 684, 633, 133, + 635, 133, 133, 638, 133, 640, 641, 642, 131, 644, + 645, 646, 131, 648, 649, 133, 131, 112, 743, 753, + 754, 133, 117, 131, 749, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 131, + 131, 131, 131, 124, 124, 124, 132, 124, 683, 684, + 690, 686, 124, 124, 124, 124, 124, 133, 133, 694, + 695, 124, 124, 124, 124, 6, 133, 133, 133, 133, + 128, 852, 131, 124, 131, 131, 131, 131, 446, 124, + 133, 133, 132, 132, 132, 132, 132, 126, 129, 124, + 130, 124, 136, 136, 136, 124, 124, 133, 136, 136, + 131, 124, 136, 124, 530, 131, 124, 124, 133, 124, + 124, 124, 134, 133, 125, 134, 128, 212, 128, 125, + 845, 125, 125, 128, 133, 133, 851, 128, 554, 128, + 556, 128, 124, 133, 124, 561, 124, 133, 133, 133, + 133, 124, 19, 20, 21, 22, 23, 24, 124, 784, + 785, 786, 787, 788, 124, 790, 133, 136, 793, 585, + 133, 133, 797, 137, 133, 131, 137, 125, 132, 46, + 137, 133, 137, 19, 20, 21, 133, 124, 133, 132, + 57, 821, 822, 60, 61, 136, 612, 827, 828, 124, + 136, 125, 124, 124, 124, 133, 622, 125, 624, 125, + 626, 627, 628, 629, 129, 631, 126, 126, 634, 126, + 636, 637, 136, 639, 60, 61, 132, 643, 132, 126, + 133, 647, 133, 100, 133, 651, 652, 19, 20, 21, + 107, 133, 133, 136, 128, 128, 136, 128, 137, 137, + 137, 137, 137, 128, 121, 134, 134, 124, 125, 126, + 127, 129, 125, 133, 100, 132, 128, 133, 128, 6, + 129, 107, 139, 131, 131, 691, 692, 693, 60, 61, + 131, 131, 131, 699, 124, 121, 133, 133, 124, 125, + 126, 127, 19, 20, 21, 133, 132, 133, 133, 124, + 124, 386, 136, 139, 124, 136, 125, 6, 126, 126, + 726, 126, 133, 729, 136, 138, 732, 133, 100, 735, + 132, 128, 128, 136, 138, 107, 137, 128, 128, 128, + 746, 136, 129, 60, 61, 133, 752, 133, 133, 121, + 124, 124, 124, 125, 126, 127, 124, 124, 130, 124, + 132, 124, 768, 124, 124, 285, 137, 139, 137, 688, + 124, 777, 778, 137, 133, 133, 128, 133, 133, 124, + 124, 124, 133, 100, 133, 133, 133, 562, 328, 795, + 107, 174, 97, 618, 800, -1, -1, -1, -1, -1, + -1, 807, -1, -1, 121, -1, -1, 124, 125, 126, + 127, -1, -1, -1, -1, 132, -1, -1, -1, -1, + -1, -1, 139, 829, 830, 831, 832, 833, 834, -1, + 836, -1, 838, -1, -1, 841, 19, 20, 21, 514, + -1, -1, 848, -1, -1, -1, 521, 522, -1, 524, + 525, 526, 527, -1, 529, -1, 531, 532, 533, 534, + -1, -1, 537, -1, -1, -1, -1, -1, -1, -1, + 876, -1, -1, -1, 549, 881, -1, 60, 61, -1, + 886, 887, -1, 889, -1, -1, 892, -1, 894, 895, + -1, 897, -1, 19, 20, 21, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 911, 912, 913, 914, -1, + -1, -1, -1, -1, -1, -1, 591, 100, -1, -1, + -1, -1, -1, -1, 107, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 60, 61, 611, -1, 121, -1, + -1, 124, 125, 126, 127, -1, -1, -1, -1, 132, + -1, -1, -1, -1, -1, -1, 139, -1, -1, -1, + -1, -1, -1, -1, -1, 640, -1, 642, -1, -1, + 645, -1, -1, 648, 100, -1, -1, -1, -1, -1, + -1, 107, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 121, -1, -1, 124, 125, + 126, 127, -1, -1, -1, -1, 132, -1, -1, -1, + -1, 686, -1, 139, -1, -1, -1, -1, -1, 694, + 695, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 868, -1, -1, -1, -1, - 873, -1, -1, -1, -1, 878, -1, 880, -1, 882, - -1, 884, 885, -1, 887, 60, 61, -1, -1, -1, - 414, -1, -1, 514, -1, -1, 899, 900, 901, -1, - 521, 522, -1, 524, 525, 526, 527, -1, 529, -1, - 531, 532, 533, 534, -1, -1, 537, -1, -1, -1, - -1, -1, -1, -1, -1, 100, -1, -1, 549, -1, - -1, -1, 107, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 121, -1, -1, 124, - 125, 126, 127, -1, -1, -1, -1, 132, -1, -1, - -1, -1, -1, -1, 139, -1, -1, -1, -1, -1, - 591, -1, -1, -1, -1, 499, 500, 501, 502, 503, + -1, -1, -1, -1, -1, -1, -1, -1, 4, 5, + -1, -1, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, -1, -1, -1, -1, -1, -1, -1, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, -1, -1, 62, -1, -1, 784, + 785, 786, 787, 788, -1, 790, -1, -1, 793, -1, + -1, -1, 797, 79, 80, 81, 82, 83, 84, 85, + 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, + 106, -1, -1, 109, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 124, -1, + -1, 127, -1, -1, 0, 1, -1, -1, 4, 5, + -1, 137, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, -1, -1, -1, -1, -1, -1, -1, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 611, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 640, - -1, 642, -1, -1, 645, -1, -1, 648, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 685, -1, -1, -1, -1, -1, - -1, -1, 693, 694, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 621, -1, 623, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 633, - -1, 635, -1, -1, 638, -1, -1, 641, -1, -1, - 644, -1, 646, -1, -1, 649, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 682, 683, - -1, 782, 783, 784, 785, 786, -1, 788, -1, -1, - 791, 4, 5, -1, 795, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, -1, -1, -1, -1, -1, - -1, -1, 25, 26, 27, 28, 29, 30, 31, 32, + -1, -1, -1, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, + 106, 4, 5, 109, -1, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, -1, -1, -1, 124, 125, + 126, 127, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, -1, -1, 62, @@ -1693,53 +1697,30 @@ static const grib_yytype_int16 grib_yycheck[] = -1, -1, -1, -1, -1, -1, 79, 80, 81, 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, -1, 101, 102, - 103, 104, 105, 106, -1, -1, 109, -1, -1, -1, + 103, 104, 105, 106, -1, -1, 109, 4, 5, -1, + -1, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 124, -1, -1, 127, -1, 129, -1, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, -1, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, 58, 59, -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 124, -1, -1, 127, -1, -1, 0, 1, -1, - -1, 4, 5, -1, 137, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, -1, -1, -1, -1, -1, - -1, -1, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, -1, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, -1, -1, 62, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, -1, 101, 102, - 103, 104, 105, 106, 4, 5, 109, -1, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, -1, -1, - -1, 124, 125, 126, 127, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, -1, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, - -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 79, - 80, 81, 82, 83, 84, 85, 86, 87, -1, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - -1, 101, 102, 103, 104, 105, 106, -1, -1, 109, - 4, 5, -1, -1, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 124, -1, -1, 127, -1, 129, - -1, 25, 26, 27, 28, 29, 30, 31, 32, 33, + -1, -1, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, + 4, 5, 109, -1, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, -1, -1, -1, 124, -1, -1, + 127, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 84, 85, 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, - 104, 105, 106, 4, 5, 109, -1, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, -1, -1, -1, - 124, -1, -1, 127, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, -1, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, -1, - -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 79, 80, - 81, 82, 83, 84, 85, 86, 87, -1, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, 99, -1, - 101, 102, 103, 104, 105, 106, -1, -1, 109, -1, + 104, 105, 106, -1, -1, 109, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, -1, -1, 127 + 124, -1, -1, 127 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of @@ -1811,32 +1792,33 @@ static const grib_yytype_uint8 grib_yystos[] = 151, 130, 162, 130, 162, 151, 162, 162, 162, 162, 151, 162, 163, 130, 162, 130, 162, 162, 130, 162, 156, 132, 156, 162, 132, 156, 132, 124, 133, 132, - 128, 137, 162, 125, 136, 124, 170, 163, 125, 163, - 125, 136, 124, 170, 163, 165, 124, 124, 160, 161, - 129, 153, 137, 128, 137, 125, 125, 126, 126, 126, - 133, 163, 132, 132, 162, 156, 108, 173, 174, 136, - 133, 133, 133, 133, 133, 126, 130, 188, 162, 163, - 136, 136, 134, 137, 191, 137, 137, 154, 163, 154, - 163, 137, 163, 163, 163, 163, 137, 163, 154, 163, - 154, 163, 163, 154, 163, 162, 154, 188, 162, 163, - 154, 162, 154, 163, 162, 154, 126, 127, 163, 163, - 128, 170, 128, 133, 137, 128, 128, 170, 128, 133, - 137, 134, 134, 153, 137, 160, 129, 125, 133, 133, - 128, 133, 128, 128, 154, 154, 162, 155, 110, 137, - 174, 151, 163, 163, 163, 162, 162, 150, 129, 163, - 6, 6, 131, 131, 131, 131, 131, 163, 133, 80, - 163, 133, 163, 133, 163, 133, 124, 137, 125, 136, - 163, 124, 124, 137, 125, 136, 163, 188, 188, 6, - 153, 126, 126, 126, 133, 133, 163, 138, 138, 137, - 163, 163, 131, 136, 136, 162, 162, 162, 162, 162, - 162, 132, 162, 163, 162, 128, 133, 163, 128, 170, - 128, 128, 133, 163, 128, 170, 136, 133, 133, 133, - 151, 137, 151, 129, 151, 151, 163, 163, 163, 163, - 163, 163, 124, 163, 163, 124, 163, 124, 137, 124, - 124, 163, 124, 137, 161, 137, 137, 137, 133, 128, - 133, 128, 133, 163, 133, 133, 128, 133, 163, 137, - 163, 124, 163, 124, 163, 163, 163, 124, 163, 133, - 133, 133, 163, 163, 163 + 128, 137, 162, 124, 125, 136, 124, 170, 163, 125, + 163, 125, 136, 124, 170, 163, 165, 124, 124, 160, + 161, 129, 153, 137, 128, 137, 125, 125, 126, 126, + 126, 133, 163, 132, 132, 162, 156, 108, 173, 174, + 136, 133, 133, 133, 133, 133, 126, 130, 188, 162, + 163, 136, 136, 134, 137, 191, 137, 137, 154, 163, + 154, 163, 137, 163, 163, 163, 163, 137, 163, 154, + 163, 154, 163, 163, 154, 163, 162, 154, 188, 162, + 163, 154, 162, 154, 163, 162, 154, 126, 127, 163, + 163, 128, 128, 170, 128, 133, 137, 128, 128, 170, + 128, 133, 137, 134, 134, 153, 137, 160, 129, 125, + 133, 133, 128, 133, 128, 128, 154, 154, 162, 155, + 110, 137, 174, 151, 163, 163, 163, 162, 162, 150, + 129, 163, 6, 6, 131, 131, 131, 131, 131, 163, + 133, 80, 163, 133, 163, 133, 163, 133, 124, 124, + 137, 124, 125, 136, 163, 124, 124, 137, 125, 136, + 163, 188, 188, 6, 153, 126, 126, 126, 133, 133, + 163, 138, 138, 137, 163, 163, 131, 136, 136, 162, + 162, 162, 162, 162, 162, 132, 162, 163, 162, 128, + 128, 133, 163, 128, 128, 170, 128, 128, 133, 163, + 128, 170, 136, 133, 133, 133, 151, 137, 151, 129, + 151, 151, 163, 163, 163, 163, 163, 163, 124, 163, + 163, 124, 124, 163, 124, 124, 137, 124, 124, 163, + 124, 137, 161, 137, 137, 137, 133, 133, 128, 133, + 128, 128, 133, 163, 133, 133, 128, 133, 163, 137, + 163, 163, 124, 163, 124, 124, 163, 163, 163, 124, + 163, 133, 133, 133, 133, 163, 163, 163, 163 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ @@ -1861,14 +1843,15 @@ static const grib_yytype_uint8 grib_yyr1[] = 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 167, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 170, 170, 171, 171, 172, 172, 173, 173, - 174, 175, 175, 175, 176, 176, 176, 176, 177, 177, - 178, 178, 179, 179, 180, 180, 180, 180, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 182, 182, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 184, 184, 184, 185, 185, 185, 185, 185, 185, - 185, 185, 185, 185, 186, 186, 187, 187, 188, 189, - 189, 190, 190, 191, 191, 192, 193, 194, 194 + 169, 169, 169, 169, 170, 170, 171, 171, 172, 172, + 173, 173, 174, 175, 175, 175, 176, 176, 176, 176, + 177, 177, 178, 178, 179, 179, 180, 180, 180, 180, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, + 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 184, 184, 184, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 185, 186, 186, 187, 187, + 188, 189, 189, 190, 190, 191, 191, 192, 193, 194, + 194 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -1891,16 +1874,17 @@ static const grib_yytype_int8 grib_yyr2[] = 1, 7, 11, 7, 11, 6, 7, 11, 4, 4, 2, 3, 1, 2, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 8, 7, 7, 6, 9, 12, 14, 10, - 14, 12, 8, 11, 6, 9, 12, 10, 14, 12, - 8, 11, 1, 2, 1, 2, 6, 12, 1, 2, - 4, 10, 9, 7, 5, 5, 5, 5, 1, 2, - 4, 6, 5, 5, 8, 1, 8, 1, 1, 1, - 1, 1, 1, 3, 2, 3, 4, 3, 1, 3, - 3, 3, 3, 3, 1, 4, 6, 6, 6, 8, - 4, 3, 3, 1, 3, 3, 3, 3, 3, 3, - 3, 3, 2, 1, 3, 1, 3, 1, 1, 1, - 1, 4, 2, 1, 2, 1, 7, 1, 2 + 1, 1, 8, 7, 7, 6, 9, 12, 12, 14, + 10, 14, 14, 12, 8, 11, 6, 9, 12, 10, + 14, 12, 8, 11, 1, 2, 1, 2, 6, 12, + 1, 2, 4, 10, 9, 7, 5, 5, 5, 5, + 1, 2, 4, 6, 5, 5, 8, 1, 8, 1, + 1, 1, 1, 1, 1, 3, 2, 3, 4, 3, + 1, 3, 3, 3, 3, 3, 1, 4, 6, 6, + 6, 8, 4, 3, 3, 1, 3, 3, 3, 3, + 3, 3, 3, 3, 2, 1, 3, 1, 3, 1, + 1, 1, 1, 4, 2, 1, 2, 1, 7, 1, + 2 }; @@ -2367,242 +2351,242 @@ grib_yyreduce: #line 263 "griby.y" { grib_parser_all_actions = 0;grib_parser_concept=0; grib_parser_hash_array=0;grib_parser_rules=0; } -#line 2371 "y.tab.c" +#line 2355 "y.tab.c" break; case 3: /* all: concept_list */ #line 265 "griby.y" { grib_parser_concept = reverse_concept((grib_yyvsp[0].concept_value)); } -#line 2377 "y.tab.c" +#line 2361 "y.tab.c" break; case 4: /* all: hash_array_list */ #line 266 "griby.y" { grib_parser_hash_array = reverse_hash_array((grib_yyvsp[0].hash_array_value)); } -#line 2383 "y.tab.c" +#line 2367 "y.tab.c" break; case 5: /* all: instructions */ #line 267 "griby.y" { grib_parser_all_actions = (grib_yyvsp[0].act); } -#line 2389 "y.tab.c" +#line 2373 "y.tab.c" break; case 6: /* all: rules */ #line 268 "griby.y" { grib_parser_rules = (grib_yyvsp[0].rules); } -#line 2395 "y.tab.c" +#line 2379 "y.tab.c" break; case 7: /* all: error */ #line 270 "griby.y" { grib_parser_all_actions = 0; grib_parser_concept=0; grib_parser_hash_array=0; grib_parser_rules=0; } -#line 2402 "y.tab.c" +#line 2386 "y.tab.c" break; case 9: /* dvalues: FLOAT */ #line 277 "griby.y" - { (grib_yyval.dvalue)=grib_darray_push(grib_parser_context,0,(grib_yyvsp[0].dval));} -#line 2408 "y.tab.c" + { (grib_yyval.dvalue)=grib_darray_push(0,(grib_yyvsp[0].dval));} +#line 2392 "y.tab.c" break; case 10: /* dvalues: dvalues ',' FLOAT */ #line 278 "griby.y" - { (grib_yyval.dvalue)=grib_darray_push(grib_parser_context,(grib_yyvsp[-2].dvalue),(grib_yyvsp[0].dval));} -#line 2414 "y.tab.c" + { (grib_yyval.dvalue)=grib_darray_push((grib_yyvsp[-2].dvalue),(grib_yyvsp[0].dval));} +#line 2398 "y.tab.c" break; case 11: /* dvalues: INTEGER */ #line 279 "griby.y" - { (grib_yyval.dvalue)=grib_darray_push(grib_parser_context,0,(grib_yyvsp[0].lval));} -#line 2420 "y.tab.c" + { (grib_yyval.dvalue)=grib_darray_push(0,(grib_yyvsp[0].lval));} +#line 2404 "y.tab.c" break; case 12: /* dvalues: dvalues ',' INTEGER */ #line 280 "griby.y" - { (grib_yyval.dvalue)=grib_darray_push(grib_parser_context,(grib_yyvsp[-2].dvalue),(grib_yyvsp[0].lval));} -#line 2426 "y.tab.c" + { (grib_yyval.dvalue)=grib_darray_push((grib_yyvsp[-2].dvalue),(grib_yyvsp[0].lval));} +#line 2410 "y.tab.c" break; case 13: /* svalues: STRING */ #line 283 "griby.y" - { (grib_yyval.svalue)=grib_sarray_push(grib_parser_context,0,(grib_yyvsp[0].str));} -#line 2432 "y.tab.c" + { (grib_yyval.svalue)=grib_sarray_push(0,(grib_yyvsp[0].str));} +#line 2416 "y.tab.c" break; case 14: /* svalues: svalues ',' STRING */ #line 284 "griby.y" - { (grib_yyval.svalue)=grib_sarray_push(grib_parser_context,(grib_yyvsp[-2].svalue),(grib_yyvsp[0].str));} -#line 2438 "y.tab.c" + { (grib_yyval.svalue)=grib_sarray_push((grib_yyvsp[-2].svalue),(grib_yyvsp[0].str));} +#line 2422 "y.tab.c" break; case 15: /* integer_array: INTEGER */ #line 288 "griby.y" { (grib_yyval.ivalue)=grib_iarray_push(0,(grib_yyvsp[0].lval));} -#line 2444 "y.tab.c" +#line 2428 "y.tab.c" break; case 16: /* integer_array: integer_array ',' INTEGER */ #line 289 "griby.y" { (grib_yyval.ivalue)=grib_iarray_push((grib_yyvsp[-2].ivalue),(grib_yyvsp[0].lval));} -#line 2450 "y.tab.c" +#line 2434 "y.tab.c" break; case 18: /* instructions: instruction instructions */ #line 293 "griby.y" { (grib_yyvsp[-1].act)->next = (grib_yyvsp[0].act); (grib_yyval.act) = (grib_yyvsp[-1].act); } -#line 2456 "y.tab.c" +#line 2440 "y.tab.c" break; case 19: /* instructions: instruction ';' instructions */ #line 294 "griby.y" { (grib_yyvsp[-2].act)->next = (grib_yyvsp[0].act); (grib_yyval.act) = (grib_yyvsp[-2].act); } -#line 2462 "y.tab.c" +#line 2446 "y.tab.c" break; case 20: /* instructions: instruction ';' */ #line 295 "griby.y" { (grib_yyval.act) = (grib_yyvsp[-1].act);} -#line 2468 "y.tab.c" +#line 2452 "y.tab.c" break; case 32: /* argument_list: empty */ #line 314 "griby.y" { (grib_yyval.explist) = 0; } -#line 2474 "y.tab.c" +#line 2458 "y.tab.c" break; case 35: /* arguments: argument ',' arguments */ #line 319 "griby.y" { (grib_yyvsp[-2].explist)->next = (grib_yyvsp[0].explist); (grib_yyval.explist) = (grib_yyvsp[-2].explist); } -#line 2480 "y.tab.c" +#line 2464 "y.tab.c" break; case 36: /* argument: expression */ #line 322 "griby.y" { (grib_yyval.explist) = grib_arguments_new(grib_parser_context,(grib_yyvsp[0].exp),NULL); } -#line 2486 "y.tab.c" +#line 2470 "y.tab.c" break; case 37: /* simple: UNSIGNED '[' INTEGER ']' IDENT default flags */ #line 327 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"unsigned",(grib_yyvsp[-4].lval),NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-2].str)); } -#line 2492 "y.tab.c" +#line 2476 "y.tab.c" break; case 38: /* simple: UNSIGNED '[' INTEGER ']' IDENT '[' argument_list ']' default flags */ #line 330 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"unsigned",(grib_yyvsp[-7].lval),(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-5].str)); } -#line 2498 "y.tab.c" +#line 2482 "y.tab.c" break; case 39: /* simple: UNSIGNED '(' INTEGER ')' IDENT default flags */ #line 333 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"unsigned_bits",(grib_yyvsp[-4].lval),NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-2].str)); } -#line 2504 "y.tab.c" +#line 2488 "y.tab.c" break; case 40: /* simple: UNSIGNED '(' INTEGER ')' IDENT '[' argument_list ']' default flags */ #line 336 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"unsigned_bits",(grib_yyvsp[-7].lval),(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-5].str)); } -#line 2510 "y.tab.c" +#line 2494 "y.tab.c" break; case 41: /* simple: ASCII '[' INTEGER ']' IDENT default flags */ #line 339 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"ascii",(grib_yyvsp[-4].lval),NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-2].str)); } -#line 2516 "y.tab.c" +#line 2500 "y.tab.c" break; case 42: /* simple: GROUP IDENT default flags */ #line 342 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"group",0,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-2].str)); } -#line 2522 "y.tab.c" +#line 2506 "y.tab.c" break; case 43: /* simple: GROUP IDENT '(' argument_list ')' default flags */ #line 345 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"group",0,(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-5].str)); } -#line 2528 "y.tab.c" +#line 2512 "y.tab.c" break; case 44: /* simple: IDENT '=' TO_INTEGER '(' argument_list ')' flags */ #line 348 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-6].str),"to_integer",0,(grib_yyvsp[-2].explist),0,(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-6].str)); } -#line 2534 "y.tab.c" +#line 2518 "y.tab.c" break; case 45: /* simple: IDENT '=' SEX2DEC '(' argument_list ')' flags */ #line 351 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-6].str),"sexagesimal2decimal",0,(grib_yyvsp[-2].explist),0,(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-6].str)); } -#line 2540 "y.tab.c" +#line 2524 "y.tab.c" break; case 46: /* simple: IDENT '=' TO_STRING '(' argument_list ')' flags */ #line 354 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-6].str),"to_string",0,(grib_yyvsp[-2].explist),0,(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-6].str)); } -#line 2546 "y.tab.c" +#line 2530 "y.tab.c" break; case 47: /* simple: NON_ALPHA IDENT default flags */ #line 357 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"non_alpha",0,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-2].str)); } -#line 2552 "y.tab.c" +#line 2536 "y.tab.c" break; case 48: /* simple: ASCII '[' INTEGER ']' STRING default flags */ #line 361 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"ascii",(grib_yyvsp[-4].lval),NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-2].str)); } -#line 2558 "y.tab.c" +#line 2542 "y.tab.c" break; case 49: /* simple: BYTE '[' INTEGER ']' IDENT default flags */ #line 364 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"bytes",(grib_yyvsp[-4].lval),NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-2].str)); } -#line 2564 "y.tab.c" +#line 2548 "y.tab.c" break; case 50: /* simple: BYTE '[' INTEGER ']' IDENT '[' argument_list ']' default flags */ #line 367 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"bytes",(grib_yyvsp[-7].lval),(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-5].str)); } -#line 2570 "y.tab.c" +#line 2554 "y.tab.c" break; case 51: /* simple: KSEC1EXPVER '[' INTEGER ']' IDENT default flags */ #line 370 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"ksec1expver",(grib_yyvsp[-4].lval),NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-2].str)); } -#line 2576 "y.tab.c" +#line 2560 "y.tab.c" break; case 52: /* simple: SIGNED '[' INTEGER ']' IDENT default flags */ #line 373 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"signed",(grib_yyvsp[-4].lval),NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-2].str)); } -#line 2582 "y.tab.c" +#line 2566 "y.tab.c" break; case 53: /* simple: SIGNED '[' INTEGER ']' IDENT '[' argument_list ']' default flags */ #line 376 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"signed",(grib_yyvsp[-7].lval),(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-5].str)); } -#line 2588 "y.tab.c" +#line 2572 "y.tab.c" break; case 54: /* simple: SIGNED '(' INTEGER ')' IDENT default flags */ #line 379 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"signed_bits",(grib_yyvsp[-4].lval),NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-2].str)); } -#line 2594 "y.tab.c" +#line 2578 "y.tab.c" break; case 55: /* simple: SIGNED '(' INTEGER ')' IDENT '[' argument_list ']' default flags */ #line 382 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"signed_bits",(grib_yyvsp[-7].lval),(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-5].str)); } -#line 2600 "y.tab.c" +#line 2584 "y.tab.c" break; case 56: /* simple: CODETABLE '[' INTEGER ']' IDENT argument default flags */ #line 385 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-3].str),"codetable",(grib_yyvsp[-5].lval), (grib_yyvsp[-2].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-3].str)); } -#line 2606 "y.tab.c" +#line 2590 "y.tab.c" break; case 57: /* simple: CODETABLE '[' IDENT ']' IDENT argument default flags */ @@ -2616,326 +2600,326 @@ grib_yyreduce: (grib_yyvsp[-1].explist), (grib_yyvsp[0].lval), NULL, NULL); free((grib_yyvsp[-3].str)); } -#line 2620 "y.tab.c" +#line 2604 "y.tab.c" break; case 58: /* simple: CODETABLE '[' INTEGER ']' IDENT argument default SET '(' IDENT ')' flags */ #line 399 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-7].str),"codetable",(grib_yyvsp[-9].lval), (grib_yyvsp[-6].explist),(grib_yyvsp[-5].explist),(grib_yyvsp[0].lval),NULL,(grib_yyvsp[-2].str)); free((grib_yyvsp[-7].str));free((grib_yyvsp[-2].str)); } -#line 2627 "y.tab.c" +#line 2611 "y.tab.c" break; case 59: /* simple: CODETABLE '[' INTEGER ']' IDENT '(' argument_list ')' default flags */ #line 403 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"codetable",(grib_yyvsp[-7].lval), (grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-5].str)); } -#line 2633 "y.tab.c" +#line 2617 "y.tab.c" break; case 60: /* simple: SMART_TABLE IDENT '(' argument_list ')' default flags */ #line 406 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"smart_table",0,(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-5].str)); } -#line 2639 "y.tab.c" +#line 2623 "y.tab.c" break; case 61: /* simple: IDENT '=' DICTIONARY '(' argument_list ')' default flags */ #line 409 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-7].str),"dictionary",0,(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-7].str)); } -#line 2645 "y.tab.c" +#line 2629 "y.tab.c" break; case 62: /* simple: IDENT '=' GETENV '(' argument_list ')' default flags */ #line 412 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-7].str),"getenv",0,(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-7].str)); } -#line 2651 "y.tab.c" +#line 2635 "y.tab.c" break; case 63: /* simple: COMPLEX_CODETABLE '[' INTEGER ']' IDENT argument default flags */ #line 415 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-3].str),"complex_codetable",(grib_yyvsp[-5].lval), (grib_yyvsp[-2].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-3].str)); } -#line 2657 "y.tab.c" +#line 2641 "y.tab.c" break; case 64: /* simple: COMPLEX_CODETABLE '[' INTEGER ']' IDENT '(' argument_list ')' default flags */ #line 418 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"complex_codetable",(grib_yyvsp[-7].lval), (grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-5].str)); } -#line 2663 "y.tab.c" +#line 2647 "y.tab.c" break; case 65: /* simple: FLAG '[' INTEGER ']' IDENT argument default flags */ #line 421 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-3].str),"codeflag",(grib_yyvsp[-5].lval), (grib_yyvsp[-2].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-3].str)); } -#line 2669 "y.tab.c" +#line 2653 "y.tab.c" break; case 66: /* simple: LOOKUP '[' INTEGER ']' IDENT '(' argument_list ')' flags */ #line 424 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-4].str),"lookup",(grib_yyvsp[-6].lval),(grib_yyvsp[-2].explist),NULL,(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-4].str)); } -#line 2675 "y.tab.c" +#line 2659 "y.tab.c" break; case 67: /* simple: FLAGBIT IDENT '(' argument_list ')' default flags */ #line 427 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"bit",0,(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-5].str)); } -#line 2681 "y.tab.c" +#line 2665 "y.tab.c" break; case 68: /* simple: LABEL IDENT */ #line 430 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[0].str),"label",0,NULL,NULL,0,NULL,NULL); free((grib_yyvsp[0].str)); } -#line 2687 "y.tab.c" +#line 2671 "y.tab.c" break; case 69: /* simple: LABEL STRING */ #line 433 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[0].str),"label",0,NULL,NULL,0,NULL,NULL); free((grib_yyvsp[0].str)); } -#line 2693 "y.tab.c" +#line 2677 "y.tab.c" break; case 70: /* simple: IBMFLOAT IDENT default flags */ #line 436 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"ibmfloat",4,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2699 "y.tab.c" +#line 2683 "y.tab.c" break; case 71: /* simple: INT8 IDENT default flags */ #line 440 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"int8",1,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2705 "y.tab.c" +#line 2689 "y.tab.c" break; case 72: /* simple: UINT8 IDENT default flags */ #line 443 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"uint8",1,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2711 "y.tab.c" +#line 2695 "y.tab.c" break; case 73: /* simple: INT16 IDENT default flags */ #line 446 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"int16",2,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2717 "y.tab.c" +#line 2701 "y.tab.c" break; case 74: /* simple: UINT16 IDENT default flags */ #line 449 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"uint16",2,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2723 "y.tab.c" +#line 2707 "y.tab.c" break; case 75: /* simple: INT16_LITTLE_ENDIAN IDENT default flags */ #line 452 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"int16_little_endian",2,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2729 "y.tab.c" +#line 2713 "y.tab.c" break; case 76: /* simple: UINT16_LITTLE_ENDIAN IDENT default flags */ #line 455 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"uint16_little_endian",2,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2735 "y.tab.c" +#line 2719 "y.tab.c" break; case 77: /* simple: INT32 IDENT default flags */ #line 458 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"int32",4,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2741 "y.tab.c" +#line 2725 "y.tab.c" break; case 78: /* simple: UINT32 IDENT default flags */ #line 461 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"uint32",4,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2747 "y.tab.c" +#line 2731 "y.tab.c" break; case 79: /* simple: INT32_LITTLE_ENDIAN IDENT default flags */ #line 464 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"int32_little_endian",4,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2753 "y.tab.c" +#line 2737 "y.tab.c" break; case 80: /* simple: UINT32_LITTLE_ENDIAN IDENT default flags */ #line 467 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"uint32_little_endian",4,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2759 "y.tab.c" +#line 2743 "y.tab.c" break; case 81: /* simple: INT64 IDENT default flags */ #line 470 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"int64",8,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2765 "y.tab.c" +#line 2749 "y.tab.c" break; case 82: /* simple: UINT64 IDENT default flags */ #line 473 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"uint64",8,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2771 "y.tab.c" +#line 2755 "y.tab.c" break; case 83: /* simple: INT64_LITTLE_ENDIAN IDENT default flags */ #line 476 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"int64_little_endian",8,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2777 "y.tab.c" +#line 2761 "y.tab.c" break; case 84: /* simple: UINT64_LITTLE_ENDIAN IDENT default flags */ #line 479 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"uint64_little_endian",8,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-2].str)); } -#line 2783 "y.tab.c" +#line 2767 "y.tab.c" break; case 85: /* simple: BLOB IDENT '[' argument_list ']' default flags */ #line 482 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"blob",0,(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-5].str)); } -#line 2789 "y.tab.c" +#line 2773 "y.tab.c" break; case 86: /* simple: IBMFLOAT IDENT '.' IDENT default flags */ #line 486 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"ibmfloat",4,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),(grib_yyvsp[-4].str),NULL);free((grib_yyvsp[-2].str)); free((grib_yyvsp[-4].str)); } -#line 2795 "y.tab.c" +#line 2779 "y.tab.c" break; case 87: /* simple: IBMFLOAT IDENT '[' argument ']' default flags */ #line 489 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"ibmfloat",4,(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-5].str)); } -#line 2801 "y.tab.c" +#line 2785 "y.tab.c" break; case 88: /* simple: POS IDENT */ #line 492 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[0].str),"position",0,NULL,NULL,0,NULL,NULL); free((grib_yyvsp[0].str)); } -#line 2807 "y.tab.c" +#line 2791 "y.tab.c" break; case 89: /* simple: INTCONST IDENT '=' argument flags */ #line 495 "griby.y" { (grib_yyval.act) = grib_action_create_variable(grib_parser_context,(grib_yyvsp[-3].str),"constant",0,(grib_yyvsp[-1].explist),NULL,(grib_yyvsp[0].lval),NULL);free((grib_yyvsp[-3].str)); } -#line 2813 "y.tab.c" +#line 2797 "y.tab.c" break; case 90: /* simple: TRANS IDENT '=' argument flags */ #line 498 "griby.y" { (grib_yyval.act) = grib_action_create_variable(grib_parser_context,(grib_yyvsp[-3].str),"transient",0,(grib_yyvsp[-1].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL); free((grib_yyvsp[-3].str)); } -#line 2819 "y.tab.c" +#line 2803 "y.tab.c" break; case 91: /* simple: TRANS IDENT '=' '{' dvalues '}' flags */ #line 500 "griby.y" { (grib_yyval.act) = grib_action_create_transient_darray(grib_parser_context,(grib_yyvsp[-5].str),(grib_yyvsp[-2].dvalue),(grib_yyvsp[0].lval)); free((grib_yyvsp[-5].str)); } -#line 2825 "y.tab.c" +#line 2809 "y.tab.c" break; case 92: /* simple: FLOAT IDENT default flags */ #line 503 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"ieeefloat",4,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-2].str)); } -#line 2831 "y.tab.c" +#line 2815 "y.tab.c" break; case 93: /* simple: FLOAT IDENT '.' IDENT default flags */ #line 506 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-2].str),"ieeefloat",4,NULL,(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),(grib_yyvsp[-4].str),NULL); free((grib_yyvsp[-2].str));free((grib_yyvsp[-4].str));} -#line 2837 "y.tab.c" +#line 2821 "y.tab.c" break; case 94: /* simple: FLOAT IDENT '[' argument ']' default flags */ #line 509 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-5].str),"ieeefloat",4,(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL,NULL);free((grib_yyvsp[-5].str)); } -#line 2843 "y.tab.c" +#line 2827 "y.tab.c" break; case 95: /* simple: G1_HALF_BYTE IDENT */ #line 512 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[0].str),"g1_half_byte_codeflag",0,NULL,NULL,0,NULL,NULL);free((grib_yyvsp[0].str)); } -#line 2849 "y.tab.c" +#line 2833 "y.tab.c" break; case 96: /* simple: SECTION_LENGTH '[' INTEGER ']' IDENT default */ #line 515 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-1].str),"section_length",(grib_yyvsp[-3].lval),NULL,(grib_yyvsp[0].explist),0,NULL,NULL);free((grib_yyvsp[-1].str)); } -#line 2855 "y.tab.c" +#line 2839 "y.tab.c" break; case 97: /* simple: G1_MESSAGE_LENGTH '[' INTEGER ']' IDENT '(' argument_list ')' */ #line 518 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-3].str),"g1_message_length",(grib_yyvsp[-5].lval),(grib_yyvsp[-1].explist),NULL,0,NULL,NULL);free((grib_yyvsp[-3].str)); } -#line 2861 "y.tab.c" +#line 2845 "y.tab.c" break; case 98: /* simple: G1_SECTION4_LENGTH '[' INTEGER ']' IDENT '(' argument_list ')' */ #line 521 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-3].str),"g1_section4_length",(grib_yyvsp[-5].lval),(grib_yyvsp[-1].explist),NULL,0,NULL,NULL);free((grib_yyvsp[-3].str)); } -#line 2867 "y.tab.c" +#line 2851 "y.tab.c" break; case 99: /* simple: KSEC IDENT argument */ #line 524 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-1].str),"ksec",0,(grib_yyvsp[0].explist),NULL,0,NULL,NULL);free((grib_yyvsp[-1].str)); } -#line 2873 "y.tab.c" +#line 2857 "y.tab.c" break; case 100: /* simple: PAD IDENT '(' argument_list ')' */ #line 527 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-3].str),"pad",0,(grib_yyvsp[-1].explist),0,0,NULL,NULL); free((grib_yyvsp[-3].str)); } -#line 2879 "y.tab.c" +#line 2863 "y.tab.c" break; case 101: /* simple: PADTO IDENT '(' argument_list ')' */ #line 530 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-3].str),"padto",0,(grib_yyvsp[-1].explist),0,0,NULL,NULL); free((grib_yyvsp[-3].str)); } -#line 2885 "y.tab.c" +#line 2869 "y.tab.c" break; case 102: /* simple: PADTOEVEN IDENT '(' argument_list ')' */ #line 533 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-3].str),"padtoeven",0,(grib_yyvsp[-1].explist),0,0,NULL,NULL); free((grib_yyvsp[-3].str)); } -#line 2891 "y.tab.c" +#line 2875 "y.tab.c" break; case 103: /* simple: PADTOMULTIPLE IDENT '(' argument_list ')' */ #line 536 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-3].str),"padtomultiple",0,(grib_yyvsp[-1].explist),0,0,NULL,NULL); free((grib_yyvsp[-3].str)); } -#line 2897 "y.tab.c" +#line 2881 "y.tab.c" break; case 104: /* simple: MESSAGE '[' INTEGER ']' IDENT flags */ #line 539 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-1].str),"message",(grib_yyvsp[-3].lval),0,0,(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-1].str)); } -#line 2903 "y.tab.c" +#line 2887 "y.tab.c" break; case 105: /* simple: MESSAGE_COPY IDENT flags */ #line 542 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-1].str),"message_copy",0,0,0,(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-1].str)); } -#line 2909 "y.tab.c" +#line 2893 "y.tab.c" break; case 106: /* simple: SECTION_PADDING IDENT flags */ #line 545 "griby.y" { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[-1].str),"section_padding",0,0,0,(grib_yyvsp[0].lval),NULL,NULL); free((grib_yyvsp[-1].str)); } -#line 2915 "y.tab.c" +#line 2899 "y.tab.c" break; case 107: /* simple: TEMPLATE IDENT STRING */ #line 547 "griby.y" { (grib_yyval.act) = grib_action_create_template(grib_parser_context,0,(grib_yyvsp[-1].str),(grib_yyvsp[0].str)); free((grib_yyvsp[-1].str)); free((grib_yyvsp[0].str));} -#line 2921 "y.tab.c" +#line 2905 "y.tab.c" break; case 108: /* simple: TEMPLATE_NOFAIL IDENT STRING */ #line 549 "griby.y" { (grib_yyval.act) = grib_action_create_template(grib_parser_context,1,(grib_yyvsp[-1].str),(grib_yyvsp[0].str)); free((grib_yyvsp[-1].str)); free((grib_yyvsp[0].str));} -#line 2927 "y.tab.c" +#line 2911 "y.tab.c" break; case 109: /* simple: ALIAS IDENT '=' IDENT flags */ #line 552 "griby.y" { (grib_yyval.act) = grib_action_create_alias(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].str),NULL,(grib_yyvsp[0].lval)); free((grib_yyvsp[-3].str)); free((grib_yyvsp[-1].str)); } -#line 2933 "y.tab.c" +#line 2917 "y.tab.c" break; case 110: /* simple: UNALIAS IDENT */ #line 555 "griby.y" { (grib_yyval.act) = grib_action_create_alias(grib_parser_context,(grib_yyvsp[0].str),NULL,NULL,0); free((grib_yyvsp[0].str)); } -#line 2939 "y.tab.c" +#line 2923 "y.tab.c" break; case 111: /* simple: ALIAS IDENT '.' IDENT '=' IDENT flags */ @@ -2943,7 +2927,7 @@ grib_yyreduce: { (grib_yyval.act) = grib_action_create_alias(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].str),(grib_yyvsp[-5].str),(grib_yyvsp[0].lval)); free((grib_yyvsp[-5].str)); free((grib_yyvsp[-3].str)); free((grib_yyvsp[-1].str)); } -#line 2947 "y.tab.c" +#line 2931 "y.tab.c" break; case 112: /* simple: UNALIAS IDENT '.' IDENT */ @@ -2951,19 +2935,19 @@ grib_yyreduce: { (grib_yyval.act) = grib_action_create_alias(grib_parser_context,(grib_yyvsp[0].str),NULL,(grib_yyvsp[-2].str),0); free((grib_yyvsp[-2].str)); free((grib_yyvsp[0].str)); } -#line 2955 "y.tab.c" +#line 2939 "y.tab.c" break; case 113: /* simple: META IDENT IDENT '(' argument_list ')' default flags */ #line 566 "griby.y" { (grib_yyval.act) = grib_action_create_meta(grib_parser_context,(grib_yyvsp[-6].str),(grib_yyvsp[-5].str),(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),NULL); free((grib_yyvsp[-6].str));free((grib_yyvsp[-5].str));} -#line 2961 "y.tab.c" +#line 2945 "y.tab.c" break; case 114: /* simple: META IDENT '.' IDENT IDENT '(' argument_list ')' default flags */ #line 569 "griby.y" { (grib_yyval.act) = grib_action_create_meta(grib_parser_context,(grib_yyvsp[-6].str),(grib_yyvsp[-5].str),(grib_yyvsp[-3].explist),(grib_yyvsp[-1].explist),(grib_yyvsp[0].lval),(grib_yyvsp[-8].str)); free((grib_yyvsp[-6].str));free((grib_yyvsp[-5].str));free((grib_yyvsp[-8].str));} -#line 2967 "y.tab.c" +#line 2951 "y.tab.c" break; case 115: /* simple: ITERATOR IDENT '(' argument_list ')' */ @@ -2979,7 +2963,7 @@ grib_yyreduce: "ITERATOR","iterator",a,NULL, GRIB_ACCESSOR_FLAG_HIDDEN|GRIB_ACCESSOR_FLAG_READ_ONLY,NULL); free((grib_yyvsp[-3].str)); } -#line 2983 "y.tab.c" +#line 2967 "y.tab.c" break; case 116: /* simple: NEAREST IDENT '(' argument_list ')' */ @@ -2995,7 +2979,7 @@ grib_yyreduce: "NEAREST","nearest",a,NULL, GRIB_ACCESSOR_FLAG_HIDDEN|GRIB_ACCESSOR_FLAG_READ_ONLY,NULL); free((grib_yyvsp[-3].str)); } -#line 2999 "y.tab.c" +#line 2983 "y.tab.c" break; case 117: /* simple: BOX IDENT '(' argument_list ')' */ @@ -3011,815 +2995,827 @@ grib_yyreduce: "BOX","box",a,NULL, GRIB_ACCESSOR_FLAG_HIDDEN|GRIB_ACCESSOR_FLAG_READ_ONLY,NULL); free((grib_yyvsp[-3].str)); } -#line 3015 "y.tab.c" +#line 2999 "y.tab.c" break; case 118: /* simple: EXPORT IDENT '(' argument_list ')' */ #line 608 "griby.y" { (grib_yyval.act) = grib_action_create_put(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].explist));free((grib_yyvsp[-3].str));} -#line 3021 "y.tab.c" +#line 3005 "y.tab.c" break; case 119: /* simple: REMOVE argument_list */ #line 611 "griby.y" { (grib_yyval.act) = grib_action_create_remove(grib_parser_context,(grib_yyvsp[0].explist));} -#line 3027 "y.tab.c" +#line 3011 "y.tab.c" break; case 120: /* simple: RENAME '(' IDENT ',' IDENT ')' */ #line 613 "griby.y" { (grib_yyval.act) = grib_action_create_rename(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].str));free((grib_yyvsp[-3].str));free((grib_yyvsp[-1].str));} -#line 3033 "y.tab.c" +#line 3017 "y.tab.c" break; case 121: /* simple: ASSERT '(' expression ')' */ #line 616 "griby.y" { (grib_yyval.act) = grib_action_create_assert(grib_parser_context,(grib_yyvsp[-1].exp));} -#line 3039 "y.tab.c" +#line 3023 "y.tab.c" break; case 122: /* simple: MODIFY IDENT flags */ #line 619 "griby.y" { (grib_yyval.act) = grib_action_create_modify(grib_parser_context,(grib_yyvsp[-1].str),(grib_yyvsp[0].lval)); free((grib_yyvsp[-1].str));} -#line 3045 "y.tab.c" +#line 3029 "y.tab.c" break; case 123: /* simple: SET IDENT '=' MISSING */ #line 621 "griby.y" { (grib_yyval.act) = grib_action_create_set_missing(grib_parser_context,(grib_yyvsp[-2].str)); free((grib_yyvsp[-2].str)); } -#line 3051 "y.tab.c" +#line 3035 "y.tab.c" break; case 124: /* simple: SET IDENT '=' expression */ #line 622 "griby.y" { (grib_yyval.act) = grib_action_create_set(grib_parser_context,(grib_yyvsp[-2].str),(grib_yyvsp[0].exp),0); free((grib_yyvsp[-2].str)); } -#line 3057 "y.tab.c" +#line 3041 "y.tab.c" break; case 125: /* simple: SET IDENT '=' '{' dvalues '}' */ #line 623 "griby.y" { (grib_yyval.act) = grib_action_create_set_darray(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-1].dvalue)); free((grib_yyvsp[-4].str)); } -#line 3063 "y.tab.c" +#line 3047 "y.tab.c" break; case 126: /* simple: SET IDENT '=' '{' svalues '}' */ #line 624 "griby.y" { (grib_yyval.act) = grib_action_create_set_sarray(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-1].svalue)); free((grib_yyvsp[-4].str)); } -#line 3069 "y.tab.c" +#line 3053 "y.tab.c" break; case 127: /* simple: SET_NOFAIL IDENT '=' expression */ #line 626 "griby.y" { (grib_yyval.act) = grib_action_create_set(grib_parser_context,(grib_yyvsp[-2].str),(grib_yyvsp[0].exp),1); free((grib_yyvsp[-2].str)); } -#line 3075 "y.tab.c" +#line 3059 "y.tab.c" break; case 128: /* simple: WRITE STRING */ #line 629 "griby.y" { (grib_yyval.act) = grib_action_create_write(grib_parser_context,(grib_yyvsp[0].str),0,0); free((grib_yyvsp[0].str));} -#line 3081 "y.tab.c" +#line 3065 "y.tab.c" break; case 129: /* simple: WRITE */ #line 630 "griby.y" { (grib_yyval.act) = grib_action_create_write(grib_parser_context,"",0,0); } -#line 3087 "y.tab.c" +#line 3071 "y.tab.c" break; case 130: /* simple: WRITE '(' INTEGER ')' STRING */ #line 631 "griby.y" { (grib_yyval.act) = grib_action_create_write(grib_parser_context,(grib_yyvsp[0].str),0,(grib_yyvsp[-2].lval)); free((grib_yyvsp[0].str));} -#line 3093 "y.tab.c" +#line 3077 "y.tab.c" break; case 131: /* simple: WRITE '(' INTEGER ')' */ #line 632 "griby.y" { (grib_yyval.act) = grib_action_create_write(grib_parser_context,"",0,(grib_yyvsp[-1].lval)); } -#line 3099 "y.tab.c" +#line 3083 "y.tab.c" break; case 132: /* simple: APPEND STRING */ #line 633 "griby.y" { (grib_yyval.act) = grib_action_create_write(grib_parser_context,(grib_yyvsp[0].str),1,0); free((grib_yyvsp[0].str));} -#line 3105 "y.tab.c" +#line 3089 "y.tab.c" break; case 133: /* simple: APPEND */ #line 634 "griby.y" { (grib_yyval.act) = grib_action_create_write(grib_parser_context,"",1,0); } -#line 3111 "y.tab.c" +#line 3095 "y.tab.c" break; case 134: /* simple: APPEND '(' INTEGER ')' STRING */ #line 635 "griby.y" { (grib_yyval.act) = grib_action_create_write(grib_parser_context,(grib_yyvsp[0].str),1,(grib_yyvsp[-2].lval)); free((grib_yyvsp[0].str));} -#line 3117 "y.tab.c" +#line 3101 "y.tab.c" break; case 135: /* simple: APPEND '(' INTEGER ')' */ #line 636 "griby.y" { (grib_yyval.act) = grib_action_create_write(grib_parser_context,"",1,(grib_yyvsp[-1].lval)); } -#line 3123 "y.tab.c" +#line 3107 "y.tab.c" break; case 136: /* simple: CLOSE '(' IDENT ')' */ #line 638 "griby.y" { (grib_yyval.act) = grib_action_create_close(grib_parser_context,(grib_yyvsp[-1].str)); free((grib_yyvsp[-1].str));} -#line 3129 "y.tab.c" +#line 3113 "y.tab.c" break; case 137: /* simple: PRINT STRING */ #line 639 "griby.y" { (grib_yyval.act) = grib_action_create_print(grib_parser_context,(grib_yyvsp[0].str),0); free((grib_yyvsp[0].str)); } -#line 3135 "y.tab.c" +#line 3119 "y.tab.c" break; case 138: /* simple: PRINT '(' STRING ')' STRING */ #line 640 "griby.y" { (grib_yyval.act) = grib_action_create_print(grib_parser_context,(grib_yyvsp[0].str),(grib_yyvsp[-2].str)); free((grib_yyvsp[0].str)); free((grib_yyvsp[-2].str));} -#line 3141 "y.tab.c" +#line 3125 "y.tab.c" break; case 139: /* simple: PRINT '(' IDENT ')' STRING */ #line 641 "griby.y" { (grib_yyval.act) = grib_action_create_print(grib_parser_context,(grib_yyvsp[0].str),(grib_yyvsp[-2].str)); free((grib_yyvsp[0].str)); free((grib_yyvsp[-2].str));} -#line 3147 "y.tab.c" +#line 3131 "y.tab.c" break; case 140: /* simple: PRINT */ #line 642 "griby.y" { (grib_yyval.act) = grib_action_create_print(grib_parser_context,"",0); } -#line 3153 "y.tab.c" +#line 3137 "y.tab.c" break; case 141: /* if_block: IF '(' expression ')' '{' instructions '}' */ #line 646 "griby.y" { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[-4].exp),(grib_yyvsp[-1].act),0,0,grib_yylineno,file_being_parsed()); } -#line 3159 "y.tab.c" +#line 3143 "y.tab.c" break; case 142: /* if_block: IF '(' expression ')' '{' instructions '}' ELSE '{' instructions '}' */ #line 647 "griby.y" { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[-8].exp),(grib_yyvsp[-5].act),(grib_yyvsp[-1].act),0,grib_yylineno,file_being_parsed()); } -#line 3165 "y.tab.c" +#line 3149 "y.tab.c" break; case 143: /* if_block: IF_TRANSIENT '(' expression ')' '{' instructions '}' */ #line 648 "griby.y" { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[-4].exp),(grib_yyvsp[-1].act),0,1,grib_yylineno,file_being_parsed()); } -#line 3171 "y.tab.c" +#line 3155 "y.tab.c" break; case 144: /* if_block: IF_TRANSIENT '(' expression ')' '{' instructions '}' ELSE '{' instructions '}' */ #line 649 "griby.y" { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[-8].exp),(grib_yyvsp[-5].act),(grib_yyvsp[-1].act),1,grib_yylineno,file_being_parsed()); } -#line 3177 "y.tab.c" +#line 3161 "y.tab.c" break; case 145: /* when_block: WHEN '(' expression ')' set semi */ #line 653 "griby.y" { (grib_yyval.act) = grib_action_create_when(grib_parser_context,(grib_yyvsp[-3].exp),(grib_yyvsp[-1].act),NULL); } -#line 3183 "y.tab.c" +#line 3167 "y.tab.c" break; case 146: /* when_block: WHEN '(' expression ')' '{' set_list '}' */ #line 654 "griby.y" { (grib_yyval.act) = grib_action_create_when(grib_parser_context,(grib_yyvsp[-4].exp),(grib_yyvsp[-1].act),NULL); } -#line 3189 "y.tab.c" +#line 3173 "y.tab.c" break; case 147: /* when_block: WHEN '(' expression ')' '{' set_list '}' ELSE '{' set_list '}' */ #line 655 "griby.y" { (grib_yyval.act) = grib_action_create_when(grib_parser_context,(grib_yyvsp[-8].exp),(grib_yyvsp[-5].act),(grib_yyvsp[-1].act)); } -#line 3195 "y.tab.c" +#line 3179 "y.tab.c" break; case 148: /* set: SET IDENT '=' expression */ #line 658 "griby.y" { (grib_yyval.act) = grib_action_create_set(grib_parser_context,(grib_yyvsp[-2].str),(grib_yyvsp[0].exp),0); free((grib_yyvsp[-2].str)); } -#line 3201 "y.tab.c" +#line 3185 "y.tab.c" break; case 149: /* set: SET_NOFAIL IDENT '=' expression */ #line 659 "griby.y" { (grib_yyval.act) = grib_action_create_set(grib_parser_context,(grib_yyvsp[-2].str),(grib_yyvsp[0].exp),1); free((grib_yyvsp[-2].str)); } -#line 3207 "y.tab.c" +#line 3191 "y.tab.c" break; case 151: /* set_list: set_list set semi */ #line 663 "griby.y" { (grib_yyvsp[-2].act)->next = (grib_yyvsp[-1].act); (grib_yyval.act) = (grib_yyvsp[-2].act); } -#line 3213 "y.tab.c" +#line 3197 "y.tab.c" break; case 152: /* default: empty */ #line 667 "griby.y" { (grib_yyval.explist) = NULL ;} -#line 3219 "y.tab.c" +#line 3203 "y.tab.c" break; case 153: /* default: '=' argument_list */ #line 668 "griby.y" { (grib_yyval.explist) = (grib_yyvsp[0].explist) ;} -#line 3225 "y.tab.c" +#line 3209 "y.tab.c" break; case 154: /* flags: empty */ #line 671 "griby.y" { (grib_yyval.lval) = 0 ; } -#line 3231 "y.tab.c" +#line 3215 "y.tab.c" break; case 155: /* flags: ':' flag_list */ #line 672 "griby.y" { (grib_yyval.lval) = (grib_yyvsp[0].lval); } -#line 3237 "y.tab.c" +#line 3221 "y.tab.c" break; case 157: /* flag_list: flag_list ',' flag */ #line 676 "griby.y" { (grib_yyval.lval) = (grib_yyvsp[-2].lval) | (grib_yyvsp[0].lval); } -#line 3243 "y.tab.c" +#line 3227 "y.tab.c" break; case 158: /* flag: READ_ONLY */ #line 679 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_READ_ONLY; } -#line 3249 "y.tab.c" +#line 3233 "y.tab.c" break; case 159: /* flag: LOWERCASE */ #line 680 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_LOWERCASE; } -#line 3255 "y.tab.c" +#line 3239 "y.tab.c" break; case 160: /* flag: DUMP */ #line 681 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_DUMP; } -#line 3261 "y.tab.c" +#line 3245 "y.tab.c" break; case 161: /* flag: NO_COPY */ #line 682 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_NO_COPY; } -#line 3267 "y.tab.c" +#line 3251 "y.tab.c" break; case 162: /* flag: NO_FAIL */ #line 683 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_NO_FAIL; } -#line 3273 "y.tab.c" +#line 3257 "y.tab.c" break; case 163: /* flag: HIDDEN */ #line 684 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_HIDDEN; } -#line 3279 "y.tab.c" +#line 3263 "y.tab.c" break; case 164: /* flag: EDITION_SPECIFIC */ #line 685 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; } -#line 3285 "y.tab.c" +#line 3269 "y.tab.c" break; case 165: /* flag: CAN_BE_MISSING */ #line 686 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_CAN_BE_MISSING; } -#line 3291 "y.tab.c" +#line 3275 "y.tab.c" break; case 166: /* flag: CONSTRAINT */ #line 687 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_CONSTRAINT; } -#line 3297 "y.tab.c" +#line 3281 "y.tab.c" break; case 167: /* flag: COPY_OK */ #line 688 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_COPY_OK; } -#line 3303 "y.tab.c" +#line 3287 "y.tab.c" break; case 168: /* flag: TRANS */ #line 689 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_TRANSIENT; } -#line 3309 "y.tab.c" +#line 3293 "y.tab.c" break; case 169: /* flag: STRING_TYPE */ #line 690 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_STRING_TYPE; } -#line 3315 "y.tab.c" +#line 3299 "y.tab.c" break; case 170: /* flag: LONG_TYPE */ #line 691 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_LONG_TYPE; } -#line 3321 "y.tab.c" +#line 3305 "y.tab.c" break; case 171: /* flag: DOUBLE_TYPE */ #line 692 "griby.y" { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_DOUBLE_TYPE; } -#line 3327 "y.tab.c" +#line 3311 "y.tab.c" break; case 172: /* list_block: IDENT LIST '(' expression ')' '{' instructions '}' */ #line 695 "griby.y" { (grib_yyval.act) = grib_action_create_list(grib_parser_context,(grib_yyvsp[-7].str),(grib_yyvsp[-4].exp),(grib_yyvsp[-1].act)); free((grib_yyvsp[-7].str)); } -#line 3333 "y.tab.c" +#line 3317 "y.tab.c" break; case 173: /* while_block: WHILE '(' expression ')' '{' instructions '}' */ #line 698 "griby.y" { (grib_yyval.act) = grib_action_create_while(grib_parser_context,(grib_yyvsp[-4].exp),(grib_yyvsp[-1].act)); } -#line 3339 "y.tab.c" +#line 3323 "y.tab.c" break; case 174: /* trigger_block: TRIGGER '(' argument_list ')' '{' instructions '}' */ #line 701 "griby.y" { (grib_yyval.act) = grib_action_create_trigger(grib_parser_context,(grib_yyvsp[-4].explist),(grib_yyvsp[-1].act)); } -#line 3345 "y.tab.c" +#line 3329 "y.tab.c" break; case 175: /* concept_block: CONCEPT IDENT '{' concept_list '}' flags */ #line 704 "griby.y" { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-2].concept_value),0,0,0,0,0,0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-4].str)); } -#line 3351 "y.tab.c" +#line 3335 "y.tab.c" break; case 176: /* concept_block: CONCEPT IDENT '(' IDENT ')' '{' concept_list '}' flags */ #line 705 "griby.y" { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-7].str),(grib_yyvsp[-2].concept_value),0,0,(grib_yyvsp[-5].str),0,0,0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-7].str));free((grib_yyvsp[-5].str)); } -#line 3357 "y.tab.c" +#line 3341 "y.tab.c" break; case 177: /* concept_block: CONCEPT IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags */ #line 706 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-10].str),0,(grib_yyvsp[-6].str),0,(grib_yyvsp[-8].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-2].str)); } -#line 3363 "y.tab.c" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-10].str),0,(grib_yyvsp[-6].str),0,(grib_yyvsp[-8].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-2].str)); } +#line 3347 "y.tab.c" break; - case 178: /* concept_block: CONCEPT IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ',' IDENT ')' flags */ + case 178: /* concept_block: CONCEPT IDENT '(' IDENT ',' IDENT ',' IDENT ',' IDENT ')' flags */ #line 707 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-12].str),0,(grib_yyvsp[-8].str),0,(grib_yyvsp[-10].str),(grib_yyvsp[-6].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),(grib_yyvsp[0].lval),0); free((grib_yyvsp[-12].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-2].str)); } -#line 3369 "y.tab.c" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-10].str),0,(grib_yyvsp[-6].str),0,(grib_yyvsp[-8].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-2].str)); } +#line 3353 "y.tab.c" break; - case 179: /* concept_block: CONCEPT IDENT '(' IDENT ',' STRING ',' IDENT ')' flags */ + case 179: /* concept_block: CONCEPT IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ',' IDENT ')' flags */ #line 708 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-8].str),0,(grib_yyvsp[-4].str),0,(grib_yyvsp[-6].str),(grib_yyvsp[-2].str),0,0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-2].str)); } -#line 3375 "y.tab.c" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-12].str),0,(grib_yyvsp[-8].str),0,(grib_yyvsp[-10].str),(grib_yyvsp[-6].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),(grib_yyvsp[0].lval),0); free((grib_yyvsp[-12].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-2].str)); } +#line 3359 "y.tab.c" break; - case 180: /* concept_block: CONCEPT IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags */ + case 180: /* concept_block: CONCEPT IDENT '(' IDENT ',' STRING ',' IDENT ')' flags */ #line 709 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-10].str),0,(grib_yyvsp[-6].str),(grib_yyvsp[-12].str),(grib_yyvsp[-8].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str)); free((grib_yyvsp[-2].str)); free((grib_yyvsp[-12].str));} -#line 3381 "y.tab.c" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-8].str),0,(grib_yyvsp[-4].str),0,(grib_yyvsp[-6].str),(grib_yyvsp[-2].str),0,0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-2].str)); } +#line 3365 "y.tab.c" break; - case 181: /* concept_block: CONCEPT IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ')' flags */ -#line 710 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-8].str),0,(grib_yyvsp[-4].str),(grib_yyvsp[-10].str),(grib_yyvsp[-6].str),(grib_yyvsp[-2].str),0,0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-2].str)); free((grib_yyvsp[-10].str));} -#line 3387 "y.tab.c" - break; - - case 182: /* concept_block: CONCEPT IDENT '.' IDENT '{' concept_list '}' flags */ + case 181: /* concept_block: CONCEPT IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags */ #line 711 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-2].concept_value),0,(grib_yyvsp[-6].str),0,0,0,0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-6].str));free((grib_yyvsp[-4].str)); } -#line 3393 "y.tab.c" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-10].str),0,(grib_yyvsp[-6].str),(grib_yyvsp[-12].str),(grib_yyvsp[-8].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str)); free((grib_yyvsp[-2].str)); free((grib_yyvsp[-12].str));} +#line 3371 "y.tab.c" break; - case 183: /* concept_block: CONCEPT IDENT '.' IDENT '(' IDENT ')' '{' concept_list '}' flags */ + case 182: /* concept_block: CONCEPT IDENT '.' IDENT '(' IDENT ',' IDENT ',' IDENT ',' IDENT ')' flags */ #line 712 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-7].str),(grib_yyvsp[-2].concept_value),0,(grib_yyvsp[-9].str),(grib_yyvsp[-5].str),0,0,0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-9].str));free((grib_yyvsp[-7].str));free((grib_yyvsp[-5].str)); } -#line 3399 "y.tab.c" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-10].str),0,(grib_yyvsp[-6].str),(grib_yyvsp[-12].str),(grib_yyvsp[-8].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str)); free((grib_yyvsp[-2].str)); free((grib_yyvsp[-12].str));} +#line 3377 "y.tab.c" break; - case 184: /* concept_block: CONCEPT_NOFAIL IDENT '{' concept_list '}' flags */ + case 183: /* concept_block: CONCEPT IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ')' flags */ #line 713 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-2].concept_value),0,0,0,0,0,0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-4].str)); } -#line 3405 "y.tab.c" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-8].str),0,(grib_yyvsp[-4].str),(grib_yyvsp[-10].str),(grib_yyvsp[-6].str),(grib_yyvsp[-2].str),0,0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-2].str)); free((grib_yyvsp[-10].str));} +#line 3383 "y.tab.c" break; - case 185: /* concept_block: CONCEPT_NOFAIL IDENT '(' IDENT ')' '{' concept_list '}' flags */ + case 184: /* concept_block: CONCEPT IDENT '.' IDENT '{' concept_list '}' flags */ #line 714 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-7].str),(grib_yyvsp[-2].concept_value),0,0,(grib_yyvsp[-5].str),0,0,0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-7].str));free((grib_yyvsp[-5].str)); } -#line 3411 "y.tab.c" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-2].concept_value),0,(grib_yyvsp[-6].str),0,0,0,0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-6].str));free((grib_yyvsp[-4].str)); } +#line 3389 "y.tab.c" break; - case 186: /* concept_block: CONCEPT_NOFAIL IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags */ + case 185: /* concept_block: CONCEPT IDENT '.' IDENT '(' IDENT ')' '{' concept_list '}' flags */ #line 715 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-10].str),0,(grib_yyvsp[-6].str),0,(grib_yyvsp[-8].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-2].str)); } -#line 3417 "y.tab.c" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-7].str),(grib_yyvsp[-2].concept_value),0,(grib_yyvsp[-9].str),(grib_yyvsp[-5].str),0,0,0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-9].str));free((grib_yyvsp[-7].str));free((grib_yyvsp[-5].str)); } +#line 3395 "y.tab.c" break; - case 187: /* concept_block: CONCEPT_NOFAIL IDENT '(' IDENT ',' STRING ',' IDENT ')' flags */ -#line 716 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-8].str),0,(grib_yyvsp[-4].str),0,(grib_yyvsp[-6].str),(grib_yyvsp[-2].str),0,0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-2].str)); } -#line 3423 "y.tab.c" - break; - - case 188: /* concept_block: CONCEPT_NOFAIL IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags */ + case 186: /* concept_block: CONCEPT_NOFAIL IDENT '{' concept_list '}' flags */ #line 717 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-10].str),0,(grib_yyvsp[-6].str),(grib_yyvsp[-12].str),(grib_yyvsp[-8].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-2].str)); free((grib_yyvsp[-12].str));} -#line 3429 "y.tab.c" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-2].concept_value),0,0,0,0,0,0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-4].str)); } +#line 3401 "y.tab.c" break; - case 189: /* concept_block: CONCEPT_NOFAIL IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ')' flags */ + case 187: /* concept_block: CONCEPT_NOFAIL IDENT '(' IDENT ')' '{' concept_list '}' flags */ #line 718 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-8].str),0,(grib_yyvsp[-4].str),(grib_yyvsp[-10].str),(grib_yyvsp[-6].str),(grib_yyvsp[-2].str),0,0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-2].str)); free((grib_yyvsp[-10].str));} -#line 3435 "y.tab.c" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-7].str),(grib_yyvsp[-2].concept_value),0,0,(grib_yyvsp[-5].str),0,0,0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-7].str));free((grib_yyvsp[-5].str)); } +#line 3407 "y.tab.c" break; - case 190: /* concept_block: CONCEPT_NOFAIL IDENT '.' IDENT '{' concept_list '}' flags */ + case 188: /* concept_block: CONCEPT_NOFAIL IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags */ #line 719 "griby.y" - { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-2].concept_value),0,(grib_yyvsp[-6].str),0,0,0,0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-6].str));free((grib_yyvsp[-4].str)); } -#line 3441 "y.tab.c" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-10].str),0,(grib_yyvsp[-6].str),0,(grib_yyvsp[-8].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-2].str)); } +#line 3413 "y.tab.c" break; - case 191: /* concept_block: CONCEPT_NOFAIL IDENT '.' IDENT '(' IDENT ')' '{' concept_list '}' flags */ + case 189: /* concept_block: CONCEPT_NOFAIL IDENT '(' IDENT ',' STRING ',' IDENT ')' flags */ #line 720 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-8].str),0,(grib_yyvsp[-4].str),0,(grib_yyvsp[-6].str),(grib_yyvsp[-2].str),0,0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-2].str)); } +#line 3419 "y.tab.c" + break; + + case 190: /* concept_block: CONCEPT_NOFAIL IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags */ +#line 721 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-10].str),0,(grib_yyvsp[-6].str),(grib_yyvsp[-12].str),(grib_yyvsp[-8].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-2].str)); free((grib_yyvsp[-12].str));} +#line 3425 "y.tab.c" + break; + + case 191: /* concept_block: CONCEPT_NOFAIL IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ')' flags */ +#line 722 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-8].str),0,(grib_yyvsp[-4].str),(grib_yyvsp[-10].str),(grib_yyvsp[-6].str),(grib_yyvsp[-2].str),0,0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-2].str)); free((grib_yyvsp[-10].str));} +#line 3431 "y.tab.c" + break; + + case 192: /* concept_block: CONCEPT_NOFAIL IDENT '.' IDENT '{' concept_list '}' flags */ +#line 723 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-2].concept_value),0,(grib_yyvsp[-6].str),0,0,0,0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-6].str));free((grib_yyvsp[-4].str)); } +#line 3437 "y.tab.c" + break; + + case 193: /* concept_block: CONCEPT_NOFAIL IDENT '.' IDENT '(' IDENT ')' '{' concept_list '}' flags */ +#line 724 "griby.y" { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[-7].str),(grib_yyvsp[-2].concept_value),0,(grib_yyvsp[-9].str),(grib_yyvsp[-5].str),0,0,0,(grib_yyvsp[0].lval),1); free((grib_yyvsp[-9].str));free((grib_yyvsp[-7].str));free((grib_yyvsp[-5].str)); } -#line 3447 "y.tab.c" +#line 3443 "y.tab.c" break; - case 193: /* concept_list: concept_list concept_value */ -#line 725 "griby.y" - { (grib_yyval.concept_value) = (grib_yyvsp[0].concept_value); (grib_yyvsp[0].concept_value)->next = (grib_yyvsp[-1].concept_value); } -#line 3453 "y.tab.c" - break; - - case 195: /* hash_array_list: hash_array_list hash_array_value */ + case 195: /* concept_list: concept_list concept_value */ #line 729 "griby.y" - { (grib_yyval.hash_array_value) = (grib_yyvsp[0].hash_array_value); (grib_yyvsp[0].hash_array_value)->next = (grib_yyvsp[-1].hash_array_value); } -#line 3459 "y.tab.c" + { (grib_yyval.concept_value) = (grib_yyvsp[0].concept_value); (grib_yyvsp[0].concept_value)->next = (grib_yyvsp[-1].concept_value); } +#line 3449 "y.tab.c" break; - case 196: /* hash_array_block: HASH_ARRAY IDENT '{' hash_array_list '}' flags */ -#line 732 "griby.y" - { (grib_yyval.act) = grib_action_create_hash_array(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-2].hash_array_value),0,0,0,0,0,0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-4].str)); } -#line 3465 "y.tab.c" - break; - - case 197: /* hash_array_block: HASH_ARRAY IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags */ + case 197: /* hash_array_list: hash_array_list hash_array_value */ #line 733 "griby.y" - { (grib_yyval.act) = grib_action_create_hash_array(grib_parser_context,(grib_yyvsp[-10].str),0,(grib_yyvsp[-6].str),0,(grib_yyvsp[-8].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-2].str)); } -#line 3471 "y.tab.c" + { (grib_yyval.hash_array_value) = (grib_yyvsp[0].hash_array_value); (grib_yyvsp[0].hash_array_value)->next = (grib_yyvsp[-1].hash_array_value); } +#line 3455 "y.tab.c" break; - case 199: /* case_list: case_list case_value */ + case 198: /* hash_array_block: HASH_ARRAY IDENT '{' hash_array_list '}' flags */ +#line 736 "griby.y" + { (grib_yyval.act) = grib_action_create_hash_array(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-2].hash_array_value),0,0,0,0,0,0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-4].str)); } +#line 3461 "y.tab.c" + break; + + case 199: /* hash_array_block: HASH_ARRAY IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags */ #line 737 "griby.y" + { (grib_yyval.act) = grib_action_create_hash_array(grib_parser_context,(grib_yyvsp[-10].str),0,(grib_yyvsp[-6].str),0,(grib_yyvsp[-8].str),(grib_yyvsp[-4].str),(grib_yyvsp[-2].str),0,(grib_yyvsp[0].lval),0); free((grib_yyvsp[-10].str));free((grib_yyvsp[-6].str));free((grib_yyvsp[-8].str));free((grib_yyvsp[-4].str));free((grib_yyvsp[-2].str)); } +#line 3467 "y.tab.c" + break; + + case 201: /* case_list: case_list case_value */ +#line 741 "griby.y" { (grib_yyval.case_value) = (grib_yyvsp[0].case_value); (grib_yyvsp[0].case_value)->next = (grib_yyvsp[-1].case_value); } -#line 3477 "y.tab.c" +#line 3473 "y.tab.c" break; - case 200: /* case_value: CASE arguments ':' instructions */ -#line 740 "griby.y" - { (grib_yyval.case_value) = grib_case_new(grib_parser_context,(grib_yyvsp[-2].explist),(grib_yyvsp[0].act)); } -#line 3483 "y.tab.c" - break; - - case 201: /* switch_block: SWITCH '(' argument_list ')' '{' case_list DEFAULT ':' instructions '}' */ + case 202: /* case_value: CASE arguments ':' instructions */ #line 744 "griby.y" + { (grib_yyval.case_value) = grib_case_new(grib_parser_context,(grib_yyvsp[-2].explist),(grib_yyvsp[0].act)); } +#line 3479 "y.tab.c" + break; + + case 203: /* switch_block: SWITCH '(' argument_list ')' '{' case_list DEFAULT ':' instructions '}' */ +#line 748 "griby.y" { (grib_yyval.act) = grib_action_create_switch(grib_parser_context,(grib_yyvsp[-7].explist),(grib_yyvsp[-4].case_value),(grib_yyvsp[-1].act)); } -#line 3489 "y.tab.c" +#line 3485 "y.tab.c" break; - case 202: /* switch_block: SWITCH '(' argument_list ')' '{' case_list DEFAULT ':' '}' */ -#line 745 "griby.y" - { (grib_yyval.act) = grib_action_create_switch(grib_parser_context,(grib_yyvsp[-6].explist),(grib_yyvsp[-3].case_value),grib_action_create_noop(grib_parser_context,"continue")); } -#line 3495 "y.tab.c" - break; - - case 203: /* switch_block: SWITCH '(' argument_list ')' '{' case_list '}' */ -#line 746 "griby.y" - { (grib_yyval.act) = grib_action_create_switch(grib_parser_context,(grib_yyvsp[-4].explist),(grib_yyvsp[-1].case_value),0); } -#line 3501 "y.tab.c" - break; - - case 204: /* concept_value: STRING '=' '{' concept_conditions '}' */ + case 204: /* switch_block: SWITCH '(' argument_list ')' '{' case_list DEFAULT ':' '}' */ #line 749 "griby.y" + { (grib_yyval.act) = grib_action_create_switch(grib_parser_context,(grib_yyvsp[-6].explist),(grib_yyvsp[-3].case_value),grib_action_create_noop(grib_parser_context,"continue")); } +#line 3491 "y.tab.c" + break; + + case 205: /* switch_block: SWITCH '(' argument_list ')' '{' case_list '}' */ +#line 750 "griby.y" + { (grib_yyval.act) = grib_action_create_switch(grib_parser_context,(grib_yyvsp[-4].explist),(grib_yyvsp[-1].case_value),0); } +#line 3497 "y.tab.c" + break; + + case 206: /* concept_value: STRING '=' '{' concept_conditions '}' */ +#line 753 "griby.y" { (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-1].concept_condition)); free((grib_yyvsp[-4].str));} -#line 3508 "y.tab.c" +#line 3504 "y.tab.c" break; - case 205: /* concept_value: IDENT '=' '{' concept_conditions '}' */ -#line 751 "griby.y" - { - (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-1].concept_condition)); free((grib_yyvsp[-4].str));} -#line 3515 "y.tab.c" - break; - - case 206: /* concept_value: INTEGER '=' '{' concept_conditions '}' */ -#line 753 "griby.y" - { - char buf[80]; snprintf(buf, sizeof(buf), "%ld",(long)(grib_yyvsp[-4].lval)); (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,buf,(grib_yyvsp[-1].concept_condition));} -#line 3522 "y.tab.c" - break; - - case 207: /* concept_value: FLOAT '=' '{' concept_conditions '}' */ + case 207: /* concept_value: IDENT '=' '{' concept_conditions '}' */ #line 755 "griby.y" { + (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-1].concept_condition)); free((grib_yyvsp[-4].str));} +#line 3511 "y.tab.c" + break; + + case 208: /* concept_value: INTEGER '=' '{' concept_conditions '}' */ +#line 757 "griby.y" + { + char buf[80]; snprintf(buf, sizeof(buf), "%ld",(long)(grib_yyvsp[-4].lval)); (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,buf,(grib_yyvsp[-1].concept_condition));} +#line 3518 "y.tab.c" + break; + + case 209: /* concept_value: FLOAT '=' '{' concept_conditions '}' */ +#line 759 "griby.y" + { char buf[80]; snprintf(buf, sizeof(buf), "%g", (double)(grib_yyvsp[-4].dval)); (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,buf,(grib_yyvsp[-1].concept_condition));} -#line 3529 "y.tab.c" +#line 3525 "y.tab.c" break; - case 209: /* concept_conditions: concept_condition concept_conditions */ -#line 760 "griby.y" - { (grib_yyvsp[-1].concept_condition)->next = (grib_yyvsp[0].concept_condition); (grib_yyval.concept_condition) = (grib_yyvsp[-1].concept_condition); } -#line 3535 "y.tab.c" - break; - - case 210: /* concept_condition: IDENT '=' expression ';' */ -#line 763 "griby.y" - { (grib_yyval.concept_condition) = grib_concept_condition_new(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].exp),0); free((grib_yyvsp[-3].str)); } -#line 3541 "y.tab.c" - break; - - case 211: /* concept_condition: IDENT '=' '[' integer_array ']' ';' */ + case 211: /* concept_conditions: concept_condition concept_conditions */ #line 764 "griby.y" - { (grib_yyval.concept_condition) = grib_concept_condition_new(grib_parser_context,(grib_yyvsp[-5].str),0,(grib_yyvsp[-2].ivalue)); free((grib_yyvsp[-5].str)); } -#line 3547 "y.tab.c" + { (grib_yyvsp[-1].concept_condition)->next = (grib_yyvsp[0].concept_condition); (grib_yyval.concept_condition) = (grib_yyvsp[-1].concept_condition); } +#line 3531 "y.tab.c" break; - case 212: /* hash_array_value: STRING '=' '[' integer_array ']' */ + case 212: /* concept_condition: IDENT '=' expression ';' */ +#line 767 "griby.y" + { (grib_yyval.concept_condition) = grib_concept_condition_new(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].exp),0); free((grib_yyvsp[-3].str)); } +#line 3537 "y.tab.c" + break; + + case 213: /* concept_condition: IDENT '=' '[' integer_array ']' ';' */ #line 768 "griby.y" + { (grib_yyval.concept_condition) = grib_concept_condition_new(grib_parser_context,(grib_yyvsp[-5].str),0,(grib_yyvsp[-2].ivalue)); free((grib_yyvsp[-5].str)); } +#line 3543 "y.tab.c" + break; + + case 214: /* hash_array_value: STRING '=' '[' integer_array ']' */ +#line 772 "griby.y" { - (grib_yyval.hash_array_value) = grib_integer_hash_array_value_new(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-1].ivalue)); free((grib_yyvsp[-4].str));} -#line 3554 "y.tab.c" + (grib_yyval.hash_array_value) = grib_integer_hash_array_value_new((grib_yyvsp[-4].str),(grib_yyvsp[-1].ivalue)); free((grib_yyvsp[-4].str));} +#line 3550 "y.tab.c" break; - case 213: /* hash_array_value: IDENT '=' '[' integer_array ']' */ -#line 770 "griby.y" - { - (grib_yyval.hash_array_value) = grib_integer_hash_array_value_new(grib_parser_context,(grib_yyvsp[-4].str),(grib_yyvsp[-1].ivalue)); free((grib_yyvsp[-4].str));} -#line 3561 "y.tab.c" - break; - - case 214: /* string_or_ident: SUBSTR '(' IDENT ',' INTEGER ',' INTEGER ')' */ + case 215: /* hash_array_value: IDENT '=' '[' integer_array ']' */ #line 774 "griby.y" + { + (grib_yyval.hash_array_value) = grib_integer_hash_array_value_new((grib_yyvsp[-4].str),(grib_yyvsp[-1].ivalue)); free((grib_yyvsp[-4].str));} +#line 3557 "y.tab.c" + break; + + case 216: /* string_or_ident: SUBSTR '(' IDENT ',' INTEGER ',' INTEGER ')' */ +#line 778 "griby.y" { (grib_yyval.exp) = new_accessor_expression(grib_parser_context,(grib_yyvsp[-5].str),(grib_yyvsp[-3].lval),(grib_yyvsp[-1].lval)); free((grib_yyvsp[-5].str)); } -#line 3567 "y.tab.c" +#line 3563 "y.tab.c" break; - case 215: /* string_or_ident: IDENT */ -#line 775 "griby.y" + case 217: /* string_or_ident: IDENT */ +#line 779 "griby.y" { (grib_yyval.exp) = new_accessor_expression(grib_parser_context,(grib_yyvsp[0].str),0,0); free((grib_yyvsp[0].str)); } -#line 3573 "y.tab.c" +#line 3569 "y.tab.c" break; - case 216: /* string_or_ident: SUBSTR '(' STRING ',' INTEGER ',' INTEGER ')' */ -#line 776 "griby.y" + case 218: /* string_or_ident: SUBSTR '(' STRING ',' INTEGER ',' INTEGER ')' */ +#line 780 "griby.y" { (grib_yyval.exp) = new_sub_string_expression(grib_parser_context,(grib_yyvsp[-5].str),(grib_yyvsp[-3].lval),(grib_yyvsp[-1].lval)); free((grib_yyvsp[-5].str)); } -#line 3579 "y.tab.c" +#line 3575 "y.tab.c" break; - case 217: /* string_or_ident: STRING */ -#line 777 "griby.y" - { (grib_yyval.exp) = new_string_expression(grib_parser_context,(grib_yyvsp[0].str)); free((grib_yyvsp[0].str)); } -#line 3585 "y.tab.c" - break; - - case 219: /* atom: INTEGER */ + case 219: /* string_or_ident: STRING */ #line 781 "griby.y" - { (grib_yyval.exp) = new_long_expression(grib_parser_context,(grib_yyvsp[0].lval)); } -#line 3591 "y.tab.c" + { (grib_yyval.exp) = new_string_expression(grib_parser_context,(grib_yyvsp[0].str)); free((grib_yyvsp[0].str)); } +#line 3581 "y.tab.c" break; - case 220: /* atom: FLOAT */ -#line 782 "griby.y" - { (grib_yyval.exp) = new_double_expression(grib_parser_context,(grib_yyvsp[0].dval)); /* TODO: change to new_float_expression*/} -#line 3597 "y.tab.c" - break; - - case 221: /* atom: NIL */ -#line 784 "griby.y" - { (grib_yyval.exp) = NULL; } -#line 3603 "y.tab.c" - break; - - case 222: /* atom: DUMMY */ + case 221: /* atom: INTEGER */ #line 785 "griby.y" - { (grib_yyval.exp) = new_true_expression(grib_parser_context); } -#line 3609 "y.tab.c" + { (grib_yyval.exp) = new_long_expression(grib_parser_context,(grib_yyvsp[0].lval)); } +#line 3587 "y.tab.c" break; - case 223: /* atom: '(' expression ')' */ + case 222: /* atom: FLOAT */ #line 786 "griby.y" - { (grib_yyval.exp) = (grib_yyvsp[-1].exp); } -#line 3615 "y.tab.c" + { (grib_yyval.exp) = new_double_expression(grib_parser_context,(grib_yyvsp[0].dval)); /* TODO: change to new_float_expression*/} +#line 3593 "y.tab.c" break; - case 224: /* atom: '-' atom */ -#line 787 "griby.y" - { (grib_yyval.exp) = new_unop_expression(grib_parser_context,&grib_op_neg,&grib_op_neg_d,(grib_yyvsp[0].exp)); } -#line 3621 "y.tab.c" - break; - - case 225: /* atom: IDENT '(' ')' */ + case 223: /* atom: NIL */ #line 788 "griby.y" - { (grib_yyval.exp) = new_func_expression(grib_parser_context,(grib_yyvsp[-2].str),NULL); free((grib_yyvsp[-2].str));} -#line 3627 "y.tab.c" + { (grib_yyval.exp) = NULL; } +#line 3599 "y.tab.c" break; - case 226: /* atom: IDENT '(' argument_list ')' */ + case 224: /* atom: DUMMY */ #line 789 "griby.y" - { (grib_yyval.exp) = new_func_expression(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].explist)); free((grib_yyvsp[-3].str));} -#line 3633 "y.tab.c" + { (grib_yyval.exp) = new_true_expression(grib_parser_context); } +#line 3605 "y.tab.c" break; - case 227: /* power: atom '^' power */ + case 225: /* atom: '(' expression ')' */ +#line 790 "griby.y" + { (grib_yyval.exp) = (grib_yyvsp[-1].exp); } +#line 3611 "y.tab.c" + break; + + case 226: /* atom: '-' atom */ +#line 791 "griby.y" + { (grib_yyval.exp) = new_unop_expression(grib_parser_context,&grib_op_neg,&grib_op_neg_d,(grib_yyvsp[0].exp)); } +#line 3617 "y.tab.c" + break; + + case 227: /* atom: IDENT '(' ')' */ +#line 792 "griby.y" + { (grib_yyval.exp) = new_func_expression(grib_parser_context,(grib_yyvsp[-2].str),NULL); free((grib_yyvsp[-2].str));} +#line 3623 "y.tab.c" + break; + + case 228: /* atom: IDENT '(' argument_list ')' */ #line 793 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_pow,NULL,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3639 "y.tab.c" + { (grib_yyval.exp) = new_func_expression(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].explist)); free((grib_yyvsp[-3].str));} +#line 3629 "y.tab.c" break; - case 229: /* factor: factor '*' power */ + case 229: /* power: atom '^' power */ #line 797 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_mul,&grib_op_mul_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3645 "y.tab.c" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_pow,NULL,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3635 "y.tab.c" break; - case 230: /* factor: factor '/' power */ -#line 798 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_div,&grib_op_div_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3651 "y.tab.c" - break; - - case 231: /* factor: factor '%' power */ -#line 799 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_modulo,NULL,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3657 "y.tab.c" - break; - - case 232: /* factor: factor BIT power */ -#line 800 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_bit,NULL,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3663 "y.tab.c" - break; - - case 233: /* factor: factor BITOFF power */ + case 231: /* factor: factor '*' power */ #line 801 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_bitoff,NULL,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3669 "y.tab.c" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_mul,&grib_op_mul_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3641 "y.tab.c" break; - case 235: /* factor: LENGTH '(' IDENT ')' */ + case 232: /* factor: factor '/' power */ +#line 802 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_div,&grib_op_div_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3647 "y.tab.c" + break; + + case 233: /* factor: factor '%' power */ #line 803 "griby.y" - { (grib_yyval.exp) = new_length_expression(grib_parser_context,(grib_yyvsp[-1].str)); free((grib_yyvsp[-1].str));} -#line 3675 "y.tab.c" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_modulo,NULL,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3653 "y.tab.c" break; - case 236: /* factor: IS_IN_LIST '(' IDENT ',' STRING ')' */ + case 234: /* factor: factor BIT power */ #line 804 "griby.y" - { (grib_yyval.exp) = new_is_in_list_expression(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].str)); free((grib_yyvsp[-3].str));free((grib_yyvsp[-1].str));} -#line 3681 "y.tab.c" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_bit,NULL,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3659 "y.tab.c" break; - case 237: /* factor: IS_IN_DICT '(' IDENT ',' STRING ')' */ + case 235: /* factor: factor BITOFF power */ #line 805 "griby.y" - { (grib_yyval.exp) = new_is_in_dict_expression(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].str)); free((grib_yyvsp[-3].str));free((grib_yyvsp[-1].str));} -#line 3687 "y.tab.c" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_bitoff,NULL,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3665 "y.tab.c" break; - case 238: /* factor: IS_INTEGER '(' IDENT ',' INTEGER ')' */ -#line 806 "griby.y" - { (grib_yyval.exp) = new_is_integer_expression(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].lval),0); free((grib_yyvsp[-3].str));} -#line 3693 "y.tab.c" - break; - - case 239: /* factor: IS_INTEGER '(' IDENT ',' INTEGER ',' INTEGER ')' */ + case 237: /* factor: LENGTH '(' IDENT ')' */ #line 807 "griby.y" - { (grib_yyval.exp) = new_is_integer_expression(grib_parser_context,(grib_yyvsp[-5].str),(grib_yyvsp[-3].lval),(grib_yyvsp[-1].lval)); free((grib_yyvsp[-5].str));} -#line 3699 "y.tab.c" + { (grib_yyval.exp) = new_length_expression(grib_parser_context,(grib_yyvsp[-1].str)); free((grib_yyvsp[-1].str));} +#line 3671 "y.tab.c" break; - case 240: /* factor: IS_INTEGER '(' IDENT ')' */ + case 238: /* factor: IS_IN_LIST '(' IDENT ',' STRING ')' */ #line 808 "griby.y" - { (grib_yyval.exp) = new_is_integer_expression(grib_parser_context,(grib_yyvsp[-1].str),0,0); free((grib_yyvsp[-1].str));} -#line 3705 "y.tab.c" + { (grib_yyval.exp) = new_is_in_list_expression(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].str)); free((grib_yyvsp[-3].str));free((grib_yyvsp[-1].str));} +#line 3677 "y.tab.c" break; - case 241: /* term: term '+' factor */ + case 239: /* factor: IS_IN_DICT '(' IDENT ',' STRING ')' */ +#line 809 "griby.y" + { (grib_yyval.exp) = new_is_in_dict_expression(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].str)); free((grib_yyvsp[-3].str));free((grib_yyvsp[-1].str));} +#line 3683 "y.tab.c" + break; + + case 240: /* factor: IS_INTEGER '(' IDENT ',' INTEGER ')' */ +#line 810 "griby.y" + { (grib_yyval.exp) = new_is_integer_expression(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].lval),0); free((grib_yyvsp[-3].str));} +#line 3689 "y.tab.c" + break; + + case 241: /* factor: IS_INTEGER '(' IDENT ',' INTEGER ',' INTEGER ')' */ #line 811 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_add,&grib_op_add_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3711 "y.tab.c" + { (grib_yyval.exp) = new_is_integer_expression(grib_parser_context,(grib_yyvsp[-5].str),(grib_yyvsp[-3].lval),(grib_yyvsp[-1].lval)); free((grib_yyvsp[-5].str));} +#line 3695 "y.tab.c" break; - case 242: /* term: term '-' factor */ + case 242: /* factor: IS_INTEGER '(' IDENT ')' */ #line 812 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_sub,&grib_op_sub_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3717 "y.tab.c" + { (grib_yyval.exp) = new_is_integer_expression(grib_parser_context,(grib_yyvsp[-1].str),0,0); free((grib_yyvsp[-1].str));} +#line 3701 "y.tab.c" break; - case 244: /* condition: condition GT term */ + case 243: /* term: term '+' factor */ +#line 815 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_add,&grib_op_add_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3707 "y.tab.c" + break; + + case 244: /* term: term '-' factor */ #line 816 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_gt,&grib_op_gt_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3723 "y.tab.c" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_sub,&grib_op_sub_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3713 "y.tab.c" break; - case 245: /* condition: condition EQ term */ -#line 818 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_eq,&grib_op_eq_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3729 "y.tab.c" - break; - - case 246: /* condition: condition LT term */ -#line 819 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_lt,&grib_op_lt_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3735 "y.tab.c" - break; - - case 247: /* condition: condition GE term */ + case 246: /* condition: condition GT term */ #line 820 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_ge,&grib_op_ge_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3741 "y.tab.c" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_gt,&grib_op_gt_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3719 "y.tab.c" break; - case 248: /* condition: condition LE term */ -#line 821 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_le,&grib_op_le_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3747 "y.tab.c" - break; - - case 249: /* condition: condition NE term */ + case 247: /* condition: condition EQ term */ #line 822 "griby.y" - { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_ne,&grib_op_ne_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3753 "y.tab.c" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_eq,&grib_op_eq_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3725 "y.tab.c" break; - case 250: /* condition: string_or_ident IS string_or_ident */ + case 248: /* condition: condition LT term */ #line 823 "griby.y" - { (grib_yyval.exp) = new_string_compare_expression(grib_parser_context,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp),1); } -#line 3759 "y.tab.c" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_lt,&grib_op_lt_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3731 "y.tab.c" break; - case 251: /* condition: string_or_ident ISNOT string_or_ident */ + case 249: /* condition: condition GE term */ #line 824 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_ge,&grib_op_ge_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3737 "y.tab.c" + break; + + case 250: /* condition: condition LE term */ +#line 825 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_le,&grib_op_le_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3743 "y.tab.c" + break; + + case 251: /* condition: condition NE term */ +#line 826 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_ne,&grib_op_ne_d,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3749 "y.tab.c" + break; + + case 252: /* condition: string_or_ident IS string_or_ident */ +#line 827 "griby.y" + { (grib_yyval.exp) = new_string_compare_expression(grib_parser_context,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp),1); } +#line 3755 "y.tab.c" + break; + + case 253: /* condition: string_or_ident ISNOT string_or_ident */ +#line 828 "griby.y" { (grib_yyval.exp) = new_string_compare_expression(grib_parser_context,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp),0); } -#line 3765 "y.tab.c" +#line 3761 "y.tab.c" break; - case 252: /* condition: NOT condition */ -#line 829 "griby.y" - { (grib_yyval.exp) = new_unop_expression(grib_parser_context,&grib_op_not,NULL,(grib_yyvsp[0].exp)); } -#line 3771 "y.tab.c" - break; - - case 254: /* conjunction: conjunction AND condition */ + case 254: /* condition: NOT condition */ #line 833 "griby.y" - { (grib_yyval.exp) = new_logical_and_expression(grib_parser_context,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } -#line 3777 "y.tab.c" + { (grib_yyval.exp) = new_unop_expression(grib_parser_context,&grib_op_not,NULL,(grib_yyvsp[0].exp)); } +#line 3767 "y.tab.c" break; - case 256: /* disjunction: disjunction OR conjunction */ + case 256: /* conjunction: conjunction AND condition */ #line 837 "griby.y" + { (grib_yyval.exp) = new_logical_and_expression(grib_parser_context,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp)); } +#line 3773 "y.tab.c" + break; + + case 258: /* disjunction: disjunction OR conjunction */ +#line 841 "griby.y" { (grib_yyval.exp) = new_logical_or_expression(grib_parser_context,(grib_yyvsp[-2].exp),(grib_yyvsp[0].exp));} -#line 3783 "y.tab.c" +#line 3779 "y.tab.c" break; - case 261: /* rule_entry: IDENT '=' expression ';' */ -#line 851 "griby.y" + case 263: /* rule_entry: IDENT '=' expression ';' */ +#line 855 "griby.y" { (grib_yyval.rule_entry) = grib_new_rule_entry(grib_parser_context,(grib_yyvsp[-3].str),(grib_yyvsp[-1].exp)); free((grib_yyvsp[-3].str)); } -#line 3789 "y.tab.c" +#line 3785 "y.tab.c" break; - case 262: /* rule_entry: SKIP ';' */ -#line 852 "griby.y" - { (grib_yyval.rule_entry) = grib_new_rule_entry(grib_parser_context,"skip",0);} -#line 3795 "y.tab.c" - break; - - case 264: /* rule_entries: rule_entry rule_entries */ + case 264: /* rule_entry: SKIP ';' */ #line 856 "griby.y" + { (grib_yyval.rule_entry) = grib_new_rule_entry(grib_parser_context,"skip",0);} +#line 3791 "y.tab.c" + break; + + case 266: /* rule_entries: rule_entry rule_entries */ +#line 860 "griby.y" { (grib_yyvsp[-1].rule_entry)->next = (grib_yyvsp[0].rule_entry); (grib_yyval.rule_entry) = (grib_yyvsp[-1].rule_entry); } -#line 3801 "y.tab.c" +#line 3797 "y.tab.c" break; - case 265: /* fact: rule_entry */ -#line 859 "griby.y" - { (grib_yyval.rules) = grib_new_rule(grib_parser_context,NULL,(grib_yyvsp[0].rule_entry)); } -#line 3807 "y.tab.c" - break; - - case 266: /* conditional_rule: IF '(' expression ')' '{' rule_entries '}' */ + case 267: /* fact: rule_entry */ #line 863 "griby.y" - { (grib_yyval.rules) = grib_new_rule(grib_parser_context,(grib_yyvsp[-4].exp),(grib_yyvsp[-1].rule_entry)); } -#line 3813 "y.tab.c" + { (grib_yyval.rules) = grib_new_rule(grib_parser_context,NULL,(grib_yyvsp[0].rule_entry)); } +#line 3803 "y.tab.c" break; - case 268: /* rules: rule rules */ + case 268: /* conditional_rule: IF '(' expression ')' '{' rule_entries '}' */ #line 867 "griby.y" + { (grib_yyval.rules) = grib_new_rule(grib_parser_context,(grib_yyvsp[-4].exp),(grib_yyvsp[-1].rule_entry)); } +#line 3809 "y.tab.c" + break; + + case 270: /* rules: rule rules */ +#line 871 "griby.y" { (grib_yyvsp[-1].rules)->next = (grib_yyvsp[0].rules); (grib_yyval.rules) = (grib_yyvsp[-1].rules); } -#line 3819 "y.tab.c" +#line 3815 "y.tab.c" break; -#line 3823 "y.tab.c" +#line 3819 "y.tab.c" default: break; } @@ -4012,7 +4008,7 @@ grib_yyreturnlab: return grib_yyresult; } -#line 871 "griby.y" +#line 875 "griby.y" static grib_concept_value *_reverse_concept(grib_concept_value *r,grib_concept_value *s) diff --git a/src/griby.y b/src/griby.y index 213843240..823b24c17 100644 --- a/src/griby.y +++ b/src/griby.y @@ -274,14 +274,14 @@ all: empty { grib_parser_all_actions = 0;grib_parser_concept=0; empty:; -dvalues: FLOAT { $$=grib_darray_push(grib_parser_context,0,$1);} - | dvalues ',' FLOAT { $$=grib_darray_push(grib_parser_context,$1,$3);} - | INTEGER { $$=grib_darray_push(grib_parser_context,0,$1);} - | dvalues ',' INTEGER { $$=grib_darray_push(grib_parser_context,$1,$3);} +dvalues: FLOAT { $$=grib_darray_push(0,$1);} + | dvalues ',' FLOAT { $$=grib_darray_push($1,$3);} + | INTEGER { $$=grib_darray_push(0,$1);} + | dvalues ',' INTEGER { $$=grib_darray_push($1,$3);} ; -svalues: STRING { $$=grib_sarray_push(grib_parser_context,0,$1);} - | svalues ',' STRING { $$=grib_sarray_push(grib_parser_context,$1,$3);} +svalues: STRING { $$=grib_sarray_push(0,$1);} + | svalues ',' STRING { $$=grib_sarray_push($1,$3);} ; @@ -703,13 +703,17 @@ trigger_block: TRIGGER '(' argument_list ')' '{' instructions '}' { $$ = grib_ac concept_block: CONCEPT IDENT '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$2,$4,0,0,0,0,0,0,$6,0); free($2); } | CONCEPT IDENT '(' IDENT ')' '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$2,$7,0,0,$4,0,0,0,$9,0); free($2);free($4); } - | CONCEPT IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$2,0,$6,0,$4,$8,$10,0,$12,0); free($2);free($6);free($4);free($8);free($10); } + | CONCEPT IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$2,0,$6,0,$4,$8,$10,0,$12,0); free($2);free($6);free($4);free($8);free($10); } + | CONCEPT IDENT '(' IDENT ',' IDENT ',' IDENT ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$2,0,$6,0,$4,$8,$10,0,$12,0); free($2);free($6);free($4);free($8);free($10); } | CONCEPT IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$2,0,$6,0,$4,$8,$10,$12,$14,0); free($2);free($6);free($4);free($8);free($10);free($12); } | CONCEPT IDENT '(' IDENT ',' STRING ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$2,0,$6,0,$4,$8,0,0,$10,0); free($2);free($6);free($4);free($8); } + | CONCEPT IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$4,0,$8,$2,$6,$10,$12,0,$14,0); free($4);free($8);free($6);free($10); free($12); free($2);} + | CONCEPT IDENT '.' IDENT '(' IDENT ',' IDENT ',' IDENT ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$4,0,$8,$2,$6,$10,$12,0,$14,0); free($4);free($8);free($6);free($10); free($12); free($2);} | CONCEPT IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$4,0,$8,$2,$6,$10,0,0,$12,0); free($4);free($8);free($6);free($10); free($2);} | CONCEPT IDENT '.' IDENT '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$4,$6,0,$2,0,0,0,0,$8,0); free($2);free($4); } | CONCEPT IDENT '.' IDENT '(' IDENT ')' '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$4,$9,0,$2,$6,0,0,0,$11,0); free($2);free($4);free($6); } + | CONCEPT_NOFAIL IDENT '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$2,$4,0,0,0,0,0,0,$6,1); free($2); } | CONCEPT_NOFAIL IDENT '(' IDENT ')' '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$2,$7,0,0,$4,0,0,0,$9,1); free($2);free($4); } | CONCEPT_NOFAIL IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$2,0,$6,0,$4,$8,$10,0,$12,1); free($2);free($6);free($4);free($8);free($10); } @@ -766,9 +770,9 @@ concept_condition: IDENT '=' expression ';' { $$ = grib_concept_condition_new(gr hash_array_value: STRING '=' '[' integer_array ']' { - $$ = grib_integer_hash_array_value_new(grib_parser_context,$1,$4); free($1);} + $$ = grib_integer_hash_array_value_new($1,$4); free($1);} | IDENT '=' '[' integer_array ']' { - $$ = grib_integer_hash_array_value_new(grib_parser_context,$1,$4); free($1);} + $$ = grib_integer_hash_array_value_new($1,$4); free($1);} ; string_or_ident: SUBSTR '(' IDENT ',' INTEGER ',' INTEGER ')' { $$ = new_accessor_expression(grib_parser_context,$3,$5,$7); free($3); } diff --git a/src/make_accessor_class_hash.sh b/src/make_accessor_class_hash.sh index 72955ae4a..a211fb321 100755 --- a/src/make_accessor_class_hash.sh +++ b/src/make_accessor_class_hash.sh @@ -6,7 +6,7 @@ cat > accessor_class_list.gperf <> accessor_class_list.gp gperf --version echo -gperf -C -W classes -t -G -H grib_accessor_classes_get_id -N grib_accessor_classes_hash -m 1 -j 1 accessor_class_list.gperf |\ +gperf -C -W classes -t -G -H grib_accessor_classes_get_id -N grib_accessor_hash -m 1 -j 1 accessor_class_list.gperf |\ sed s/__inline//g | sed s/inline//g | sed 's/register //g' > grib_accessor_classes_hash.cc rm -f accessor_class_list.gperf diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1ed68cfc6..fa685fd44 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -99,7 +99,6 @@ if( HAVE_BUILD_TOOLS ) grib_calendar grib_md5 grib_cfNames - grib_ifsParam grib_packing_order filter_substr filter_contains @@ -107,7 +106,6 @@ if( HAVE_BUILD_TOOLS ) filter_is_one_of filter_is_in_list filter_transient_darray - grib_uerra grib_ecpoint grib_s2s grib_fire @@ -116,6 +114,7 @@ if( HAVE_BUILD_TOOLS ) grib2_wave_spectra grib_element grib_suppressed + grib_destine_mars_keys grib_2nd_order_numValues grib_ecc-136 grib_ecc-530 @@ -144,9 +143,7 @@ if( HAVE_BUILD_TOOLS ) grib_ecc-1654 grib_ecc-1671 grib_ecc-1708 - grib_ecc-1691 grib_ecc-1766 - grib_ecc-1806 grib_ecc-1829 bufr_ecc-1028 bufr_ecc-1195 @@ -190,9 +187,11 @@ if( HAVE_BUILD_TOOLS ) grib_partial_message grib_true_imagery grib_headers_only + grib_uerra grib_unpack_subarray grib_count grib_clone_headers_only + grib_ifsParam wmo_read_bufr_from_file wmo_read_gts_from_file wmo_read_any_from_file @@ -276,13 +275,19 @@ if( HAVE_BUILD_TOOLS ) grib_ecc-1467 grib_ecc-1764 grib_ecc-1792 + grib_ecc-1806 + #grib_ecc-1898 grib_ecc-1907 + grib_ecc-1941 + grib_ecc-1942 grib_modelName grib_sub_hourly grib_set_bytes grib_set_force bufr_ecc-556 + codes_assert codes_ecc-1698 + codes_ecc-1929 codes_get_string codes_codetable gts_get diff --git a/tests/codes_assert.sh b/tests/codes_assert.sh new file mode 100755 index 000000000..1bd5c878d --- /dev/null +++ b/tests/codes_assert.sh @@ -0,0 +1,39 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# 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. +# + +. ./include.ctest.sh + +label="codes_assert_test" + +tempOut=temp.$label.txt +sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +tempDir=${label}.temp.dir +rm -rf $tempDir +mkdir -p $tempDir/definitions/grib2 +bootfile=$tempDir/definitions/grib2/boot.def +cat $def_dir/grib2/boot.def > $bootfile +echo 'assert( year == 1990 );' >> $bootfile +echo >> $bootfile + +export ECCODES_DEFINITION_PATH=$PWD/$tempDir/definitions +# This will activate the print statement above +${tools_dir}/grib_set -s year=1990 $sample_grib2 /dev/null + +set +e +${tools_dir}/grib_set -s year=1991 $sample_grib2 /dev/null > $tempOut 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "year.*Assertion failure" $tempOut + +# Clean up +rm -rf $tempDir +rm -f $tempOut diff --git a/tests/codes_dump_action_tree.cc b/tests/codes_dump_action_tree.cc index fa895ea97..724b957e2 100644 --- a/tests/codes_dump_action_tree.cc +++ b/tests/codes_dump_action_tree.cc @@ -12,17 +12,29 @@ #include #include "eccodes.h" +static ProductKind get_product_kind(const char* p) +{ + if (strcmp(p, "GRIB") == 0) return PRODUCT_GRIB; + if (strcmp(p, "BUFR") == 0) return PRODUCT_BUFR; + if (strcmp(p, "METAR") == 0) return PRODUCT_METAR; + if (strcmp(p, "GTS") == 0) return PRODUCT_GTS; + return PRODUCT_ANY; +} + int main(int argc, char** argv) { int err = 0; codes_context* c = codes_context_get_default(); - assert(argc == 2); + assert(argc == 3); + + const ProductKind mode = get_product_kind( argv[1] ); + const char* filename = argv[2]; - char* filename = argv[1]; FILE* fp = fopen(filename, "rb"); assert(fp); - codes_handle* h = codes_handle_new_from_file(c, fp, PRODUCT_ANY, &err); + + codes_handle* h = codes_handle_new_from_file(c, fp, mode, &err); assert(h); assert(!err); diff --git a/tests/codes_dump_action_tree.sh b/tests/codes_dump_action_tree.sh index ad562c9e5..fbc2bbf24 100755 --- a/tests/codes_dump_action_tree.sh +++ b/tests/codes_dump_action_tree.sh @@ -10,5 +10,16 @@ . ./include.ctest.sh -input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl -$EXEC ${test_dir}/codes_dump_action_tree "$input" +for f in GRIB1.tmpl GRIB2.tmpl sh_sfc_grib1.tmpl sh_sfc_grib2.tmpl; do + input=$ECCODES_SAMPLES_PATH/$f + $EXEC ${test_dir}/codes_dump_action_tree GRIB "$input" > /dev/null +done + +input=$ECCODES_SAMPLES_PATH/BUFR4.tmpl +$EXEC ${test_dir}/codes_dump_action_tree BUFR "$input" > /dev/null + +input=$data_dir/metar/metar.txt +$EXEC ${test_dir}/codes_dump_action_tree METAR "$input" > /dev/null + +input=$data_dir/gts/EGRR20150317121020_00493212.DAT +$EXEC ${test_dir}/codes_dump_action_tree GTS "$input" > /dev/null diff --git a/tests/codes_ecc-1929.sh b/tests/codes_ecc-1929.sh new file mode 100755 index 000000000..c7ed04d3e --- /dev/null +++ b/tests/codes_ecc-1929.sh @@ -0,0 +1,33 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# 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. +# + +. ./include.ctest.sh + +label="codes_ecc-1929_test" + +tempOut=temp.$label.txt +sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +tempDir=${label}.temp.dir +rm -rf $tempDir +mkdir -p $tempDir/definitions/grib2 +bootfile=$tempDir/definitions/grib2/boot.def +cat $def_dir/grib2/boot.def > $bootfile +echo 'print "DEBUG: [gridType=] [typeOfLevel=]";' >> $bootfile +echo >> $bootfile + +export ECCODES_DEFINITION_PATH=$PWD/$tempDir/definitions +# This will activate the print statement above +${tools_dir}/grib_get -p edition $sample_grib2 > $tempOut +grep -q "DEBUG: gridType=regular_ll typeOfLevel=surface" $tempOut + +# Clean up +rm -rf $tempDir +rm -f $tempOut diff --git a/tests/codes_to_double.sh b/tests/codes_to_double.sh index ceb7c21c5..8914d8049 100755 --- a/tests/codes_to_double.sh +++ b/tests/codes_to_double.sh @@ -19,7 +19,7 @@ sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl cat >$tempFilt<$tempFilt< $tempLog cat >$tempRef< $tempFilt < $tempLog 2>&1 # -G option sample_g1=$ECCODES_SAMPLES_PATH/GRIB1.tmpl @@ -124,3 +137,4 @@ ${tools_dir}/grib_set -G -s edition=2 $sample_g1 $temp2 # Clean up rm -f $output rm -f $temp1 $temp2 +rm -f $tempLog diff --git a/tests/grib2_product_templates.sh b/tests/grib2_product_templates.sh index 29e70a96c..579592462 100755 --- a/tests/grib2_product_templates.sh +++ b/tests/grib2_product_templates.sh @@ -53,6 +53,36 @@ else echo "No duplicates in $def_file" fi +# Automatic PDT selection +# from instantaneous to statistically processed (accum,max,etc) +# ------------------------------------------------------------- +grib_check_key_equals $sample_g2 productDefinitionTemplateNumber,stepType '0 instant' +$tools_dir/grib_set -s shortName=tp $sample_g2 $tempGribA +grib_check_key_equals $tempGribA productDefinitionTemplateNumber 8 +grib_check_key_equals $tempGribA typeOfStatisticalProcessing,stepType '1 accum' +grib_check_key_equals $tempGribA shortName,name 'tp Total precipitation' + +$tools_dir/grib_set -s productDefinitionTemplateNumber=1,shortName=tp,perturbationNumber=32 $sample_g2 $tempGribA +grib_check_key_equals $tempGribA productDefinitionTemplateNumber 11 +grib_check_key_equals $tempGribA number 32 +grib_check_key_equals $tempGribA typeOfStatisticalProcessing,stepType '1 accum' +grib_check_key_equals $tempGribA shortName,name 'tp Total precipitation' + +$tools_dir/grib_set -s paramId=237382 $sample_g2 $tempGribA +$tools_dir/grib_ls -jn parameter $tempGribA +grib_check_key_equals $tempGribA productDefinitionTemplateNumber 8 +grib_check_key_equals $tempGribA typeOfStatisticalProcessing,stepType '2 max' +grib_check_key_equals $tempGribA shortName,name 'max_visp Time-maximum visibility through precipitation' + +# Test an expected failure. paramId=140114 contains wave keys +set +e +$tools_dir/grib_set -s paramId=140114 $sample_g2 $tempGribA 2>$tempText +status=$? +set -e +[ $status -ne 0 ] +grep -q "typeOfWavePeriodInterval .* failed: Key/value not found" $tempText +grep -q "scaleFactorOfLowerWavePeriodLimit .* failed: Key/value not found" $tempText + # Clean up rm -f $tempText $tempGribA $tempGribB diff --git a/tests/grib2_templates.sh b/tests/grib2_templates.sh index bb295b73a..800a5aca9 100755 --- a/tests/grib2_templates.sh +++ b/tests/grib2_templates.sh @@ -8,7 +8,6 @@ # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. # . ./include.ctest.sh -set -u label="grib2_templates_test" @@ -32,6 +31,25 @@ awk '$1 !~ /#/ && $1 < 65000 {print $1}' $latest_codetable_file | while read pdt fi done +rm -f $tempText +pdtns=$( awk '!/^#/ && $1 < 65000 {print $1}' $latest_codetable_file ) +for p in $pdtns; do + $tools_dir/grib_set -s tablesVersion=$latestOfficial,productDefinitionTemplateNumber=$p $sample2 $temp + $tools_dir/grib_dump -O -p section_4 $temp >> $tempText + # Expect the grep to fail and not find 'unknown' in the dump output + set +e + grep -q -i unknown $tempText + status=$? + set -e + if [ $status -ne 1 ]; then + echo "GRIB2 PDTN $p produced a dump with unknown!" + grep -i unknown $tempText + exit 1 + fi +done +rm -f $tempText + + # ECC-1746 # ------------- $tools_dir/grib_set -s tablesVersion=31,productDefinitionTemplateNumber=34 $sample2 $temp diff --git a/tests/grib_cfNames.sh b/tests/grib_cfNames.sh index 882d38139..7ffe2cbf1 100755 --- a/tests/grib_cfNames.sh +++ b/tests/grib_cfNames.sh @@ -24,7 +24,7 @@ ${tools_dir}/grib_set -s stepType=accum,discipline=0,parameterNumber=20,paramete grib_check_key_equals $temp cfName kinetic_energy_dissipation_in_atmosphere_boundary_layer ${tools_dir}/grib_set -s productDefinitionTemplateNumber=8,paramId=145 $sample2 $temp grib_check_key_equals $temp cfName kinetic_energy_dissipation_in_atmosphere_boundary_layer -${tools_dir}/grib_set -s stepType=accum,paramId=145 $sample2 $temp +${tools_dir}/grib_set -s paramId=145 $sample2 $temp grib_check_key_equals $temp cfName kinetic_energy_dissipation_in_atmosphere_boundary_layer ${tools_dir}/grib_set -s paramId=137 $sample2 $temp @@ -51,7 +51,7 @@ grib_check_key_equals $temp cfName depth_of_isosurface_of_sea_water_potential_te ${tools_dir}/grib_set -s paramId=181 $sample1 $temp grib_check_key_equals $temp cfName surface_downward_northward_stress -${tools_dir}/grib_set -s stepType=accum,paramId=181 $sample2 $temp +${tools_dir}/grib_set -s paramId=181 $sample2 $temp grib_check_key_equals $temp cfName surface_downward_northward_stress ${tools_dir}/grib_set -s discipline=192,parameterCategory=151,parameterNumber=153 $sample2 $temp grib_check_key_equals $temp cfName surface_downward_eastward_stress diff --git a/tests/grib_check_param_concepts.sh b/tests/grib_check_param_concepts.sh index cc1bd6a01..fd112b4d3 100755 --- a/tests/grib_check_param_concepts.sh +++ b/tests/grib_check_param_concepts.sh @@ -11,6 +11,8 @@ . ./include.ctest.sh label="grib_check_param_concepts_test" +tempText=temp.$label.txt +tempGrib=temp.$label.grib if [ $ECCODES_ON_WINDOWS -eq 1 ]; then @@ -18,11 +20,39 @@ if [ $ECCODES_ON_WINDOWS -eq 1 ]; then exit 0 fi +check_grib_defs() +{ + CHECK_DEFS=$proj_dir/definitions/check_grib_defs.pl + if [ -x "$CHECK_DEFS" ]; then + # Now check the name.def, paramId.def, shortName.def... files + # in the current directory + $CHECK_DEFS + fi +} # # Do various checks on the concepts files # +# ----------------------------------- +echo "Check for duplicate encodings" +# ----------------------------------- +paramIdFiles="$ECCODES_DEFINITION_PATH/grib2/paramId.def $ECCODES_DEFINITION_PATH/grib2/localConcepts/ecmf/paramId.def" + +# Flatten the file so we get just the encoding part. +# uniq -d outputs a single copy of each line that is repeated in the input +for paramIdFile in $paramIdFiles; do + cat $paramIdFile | tr '\n' ' ' | tr '\t' ' ' | tr '#' '\n' | sed "s/^.* '//" | sed "s/'//" | awk '{$1="";print}' | sort |uniq -d > $tempText + if [ -s "$tempText" ]; then + # File exists and has a size greater than zero + echo "ERROR: Duplicate parameter encoding(s) found in $paramIdFile" >&2 + cat $tempText | sed -e 's/ ;/;/g' + exit 1 + else + echo "No duplicates in $paramIdFile" + fi +done + # First check the GRIB2 paramId.def and shortName.def # ---------------------------------------------------- $EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/grib2/paramId.def @@ -55,8 +85,6 @@ if [ $status -ne 0 ]; then exit 0 fi -CHECK_DEFS=$ECCODES_DEFINITION_PATH/check_grib_defs.pl - defs_dirs=" $ECCODES_DEFINITION_PATH/grib1 $ECCODES_DEFINITION_PATH/grib2 @@ -86,7 +114,7 @@ defs_dirs=" for dir in $defs_dirs; do cd $dir - $CHECK_DEFS + check_grib_defs done cd $test_dir @@ -108,7 +136,7 @@ cp $ECMF_DIR/name.legacy.def name.def cp $ECMF_DIR/paramId.legacy.def paramId.def cp $ECMF_DIR/shortName.legacy.def shortName.def cp $ECMF_DIR/units.legacy.def units.def -$CHECK_DEFS +check_grib_defs cd $test_dir rm -fr $tempDir @@ -127,7 +155,7 @@ cp $ECMF_DIR/name.legacy.def name.def cp $ECMF_DIR/paramId.legacy.def paramId.def cp $ECMF_DIR/shortName.legacy.def shortName.def cp $ECMF_DIR/units.legacy.def units.def -$CHECK_DEFS +check_grib_defs cd $test_dir rm -fr $tempDir @@ -149,5 +177,16 @@ done set -e +# ------------------------------- +echo "ECC-1932" +# ------------------------------- +sample1=$ECCODES_SAMPLES_PATH/GRIB1.tmpl +${tools_dir}/grib_set -s centre=egrr,indicatorOfParameter=167 $sample1 $tempGrib +grib_check_key_equals $tempGrib cfVarName t2m +rm -f $tempGrib + + +rm -f $tempText $tempGrib + cd $test_dir rm -fr $tempDir diff --git a/tests/grib_count.sh b/tests/grib_count.sh index c10ae8b90..507e2c38c 100755 --- a/tests/grib_count.sh +++ b/tests/grib_count.sh @@ -41,5 +41,12 @@ count=`${tools_dir}/grib_count ${data_dir}/mixed.grib` count=`${tools_dir}/grib_count ${data_dir}/tigge_ecmwf.grib2` [ $count -eq 248 ] +# Bad input +set +e +${tools_dir}/grib_count non-existent-file 2>/dev/null +status=$? +set -e +[ $status -ne 0 ] + # Clean up rm -f $tempText diff --git a/tests/grib_ecc-1691.sh b/tests/grib_destine_mars_keys.sh similarity index 99% rename from tests/grib_ecc-1691.sh rename to tests/grib_destine_mars_keys.sh index d64bae087..dc24677a8 100755 --- a/tests/grib_ecc-1691.sh +++ b/tests/grib_destine_mars_keys.sh @@ -14,7 +14,7 @@ REDIRECT=/dev/null # ECC-1691: Destination Earth ClimateDT metadata support -label="grib_ecc-1691_test" +label="grib_destine_mars_keys_test" temp_grib_a=temp.$label.a.grib temp_grib_b=temp.$label.b.grib destine_sample=temp.$label.destine.grib diff --git a/tests/grib_dump.sh b/tests/grib_dump.sh index dca701ff2..fe4a2a251 100755 --- a/tests/grib_dump.sh +++ b/tests/grib_dump.sh @@ -169,6 +169,13 @@ file=$data_dir/sample.grib2 ${tools_dir}/grib_dump -p nonexist $file > $temp 2>&1 grep -q "Key/value not found" $temp +# Invalid options +set +e +${tools_dir}/grib_dump -jOD $file > $temp 2>&1 +status=$? +set -e +[ $status -ne 0 ] + # Unreadable message #----------------------------------------------------------- diff --git a/tests/grib_dump_debug.sh b/tests/grib_dump_debug.sh index 56ceb40d0..f220cea10 100755 --- a/tests/grib_dump_debug.sh +++ b/tests/grib_dump_debug.sh @@ -106,5 +106,11 @@ grep -q "unsigned iDirectionIncrement = 2000000 (can be missing)" $temp grep -q "constant zero = 0 (read-only)" $temp grep -q "unsigned reserved = MISSING (can be missing) (read-only)" $temp +# Debug dump a BUFR using -TB switch +infile=${data_dir}/bufr/pgps_110.bufr +${tools_dir}/grib_dump -Da -TB $infile > $temp +# ${tools_dir}/grib_dump -Da -TB -s unpack=1 $infile > $temp + + # Clean up rm -f $temp diff --git a/tests/grib_ecc-1806.sh b/tests/grib_ecc-1806.sh index f512ff5c4..aa5bd9ef4 100755 --- a/tests/grib_ecc-1806.sh +++ b/tests/grib_ecc-1806.sh @@ -43,16 +43,16 @@ test_conversion 174098 262000 sithick test_conversion 151163 262104 t20d test_conversion 151145 262124 zos test_conversion 130232 235135 avg_w -test_conversion 172146 235033 msshf -test_conversion 172147 235034 mslhf -test_conversion 55 228004 mean2t +test_conversion 172146 235033 avg_ishf +test_conversion 172147 235034 avg_slhtf +test_conversion 55 228004 avg_2t test_conversion 56 235168 avg_2d -test_conversion 172169 235035 msdwswrf -test_conversion 172175 235036 msdwlwrf -test_conversion 172176 235037 msnswrf -test_conversion 172177 235038 msnlwrf -test_conversion 172178 235039 mtnswrf -test_conversion 172179 235040 mtnlwrf +test_conversion 172169 235035 avg_sdswrf +test_conversion 172175 235036 avg_sdlwrf +test_conversion 172176 235037 avg_snswrf +test_conversion 172177 235038 avg_snlwrf +test_conversion 172178 235039 avg_tnswrf +test_conversion 172179 235040 avg_tnlwrf test_conversion 151175 262118 sc300m test_conversion 72 260087 sdswrf diff --git a/tests/grib_ecc-1898.sh b/tests/grib_ecc-1898.sh new file mode 100755 index 000000000..6718dc868 --- /dev/null +++ b/tests/grib_ecc-1898.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# 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. +# + +. ./include.ctest.sh + +label="grib_ecc-1898_test" + +tempGrib=temp.$label.grib +tempOut=temp.${label}.txt + +$tools_dir/grib_dump -Da $samp_dir/reduced_gg_pl_32_grib2.tmpl > $tempOut +grep -q '288-288 g2level level = 1000 \[vertical.level, mars.levelist\]' $tempOut + +# For given MARS stream/types, we unalias the mars.levelist key +$tools_dir/grib_set -s stream=gfas,type=gsd $samp_dir/reduced_gg_pl_32_grib2.tmpl $tempGrib + +# Check that the key is unaliased +$tools_dir/grib_dump -Da $tempGrib > $tempOut +grep -q '288-288 g2level level = 1000 \[vertical.level\]' $tempOut + +$tools_dir/grib_dump -p levelist -Da $tempGrib 2> $tempOut +grep -q 'levelist: Key/value not found' $tempOut + +result=$($tools_dir/grib_get -fp levelist $tempGrib) +[ "$result" = "not_found" ] + +result=$($tools_dir/grib_get -fp mars.levelist $tempGrib) +[ "$result" = "not_found" ] + +# Clean up +rm -f $tempGrib $tempOut diff --git a/tests/grib_ecc-1941.sh b/tests/grib_ecc-1941.sh new file mode 100755 index 000000000..e4fd8d417 --- /dev/null +++ b/tests/grib_ecc-1941.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# 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. +# + +. ./include.ctest.sh + +# ------------------------------------------------------------ +# This is the test for the JIRA issue ECC-1941 +# Setting paramId=131060 fails if typeOfFirstFixedSurface=255 +# ------------------------------------------------------------ + +label="grib_ecc-1941_test" +tempGribA=temp.$label.A.grib +tempGribB=temp.$label.B.grib + +sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +${tools_dir}/grib_set -s paramId=131060 $sample_grib2 $tempGribA +grib_check_key_equals $tempGribA paramId,shortName '131060 tpg1' + +${tools_dir}/grib_set -s typeOfFirstFixedSurface=255 $sample_grib2 $tempGribA +grib_check_key_equals $tempGribA typeOfLevel unknown + +${tools_dir}/grib_set -s paramId=131060 $tempGribA $tempGribB +grib_check_key_equals $tempGribB paramId,shortName '131060 tpg1' + +# Clean up +rm -f $tempGribA $tempGribB diff --git a/tests/grib_ecc-1942.sh b/tests/grib_ecc-1942.sh new file mode 100755 index 000000000..2b00b3f81 --- /dev/null +++ b/tests/grib_ecc-1942.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# 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. +# + +. ./include.ctest.sh + +# ------------------------------------------------------------ +# This is the test for the JIRA issue ECC-1942 +# Reorganise template.4.horizontal.def to avoid unaliasing mars.levelist +# ------------------------------------------------------------ + +REDIRECT=/dev/null + +label="grib_ecc-1942_test" +tempGrib=temp.$label.grib + +sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +${tools_dir}/grib_set -s \ + typeOfFirstFixedSurface=102,typeOfSecondFixedSurface=255,gridDefinitionTemplateNumber=101,numberOfGridUsed=1,level=44 \ + $sample_grib2 $tempGrib +grib_check_key_equals $tempGrib levtype o2d +grib_check_key_equals $tempGrib mars.levtype o2d + +result=$( ${tools_dir}/grib_get -fp mars.levelist $tempGrib ) +[ "$result" = "not_found" ] + +result=$( ${tools_dir}/grib_get -fp levelist $tempGrib ) +[ "$result" = "not_found" ] + +# Clean up +rm -f $tempGrib diff --git a/tests/grib_ecc-806.sh b/tests/grib_ecc-806.sh index 95707b812..11c375c56 100755 --- a/tests/grib_ecc-806.sh +++ b/tests/grib_ecc-806.sh @@ -17,7 +17,6 @@ label="grib_ecc-806_test" tempGrb=temp.${label}.grb tempOut=temp.${label}.txt -tempErr=temp.${label}.err # This NCEP grib2 file has the keys # discipline = 0 @@ -36,5 +35,17 @@ res=`${tools_dir}/grib_get -p paramId,shortName,units,name $input` res=`${tools_dir}/grib_get -s preferLocalConcepts=1 -p paramId,shortName,units,name $input` [ "$res" = "260056 sdwe kg m**-2 Water equivalent of accumulated snow depth (deprecated)" ] +# Test the environment variable too +export ECCODES_GRIB_PREFER_LOCAL_CONCEPTS=1 +grib_check_key_equals $input preferLocalConceptsEnvVar,preferLocalConcepts '1 1' +res=`${tools_dir}/grib_get -p paramId,shortName,units,name $input` +[ "$res" = "260056 sdwe kg m**-2 Water equivalent of accumulated snow depth (deprecated)" ] + +export ECCODES_GRIB_PREFER_LOCAL_CONCEPTS=0 +grib_check_key_equals $input preferLocalConceptsEnvVar,preferLocalConcepts '0 0' +unset ECCODES_GRIB_PREFER_LOCAL_CONCEPTS +grib_check_key_equals $input preferLocalConceptsEnvVar,preferLocalConcepts '0 0' + + # Clean up -rm -f $tempGrb $tempOut $tempErr +rm -f $tempGrb $tempOut diff --git a/tests/grib_filter_fail.sh b/tests/grib_filter_fail.sh index 3f77cf436..dd5aec1f6 100755 --- a/tests/grib_filter_fail.sh +++ b/tests/grib_filter_fail.sh @@ -85,6 +85,17 @@ set -e [ $status -ne 0 ] grep -q "Unable to open file" $tempOut + +# Bad print +# ---------- +set +e +echo 'print ("/") "should fail";' | ${tools_dir}/grib_filter - $input > $tempOut 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "IO ERROR" $tempOut + + # Signed bits # ----------- cat >$tempFilt < status=$? set -e [ $status -ne 0 ] +cat $tempText grep -q "Key Ni cannot be 'missing' for a regular grid" $tempText grep -q "latlonvalues: Unable to create iterator" $tempText diff --git a/tests/grib_set_fail.sh b/tests/grib_set_fail.sh index e3fd7acd9..2ced80e06 100755 --- a/tests/grib_set_fail.sh +++ b/tests/grib_set_fail.sh @@ -77,7 +77,7 @@ if [ $ECCODES_ON_WINDOWS -eq 0 ]; then status=$? set -e [ $status -ne 0 ] - grep -q "Trying to encode value of 2147483648 but the allowable range is -2147483647 to 2147483647" $temp + grep -q "Trying to encode value of 2147483648 but the allowable range is -2147483648 to 2147483647" $temp set +e ${tools_dir}/grib_set -s forecastTime=-2147483650 $input $outfile 2>$temp diff --git a/tests/grib_statistics.sh b/tests/grib_statistics.sh index 9a71f7082..b2e68356c 100755 --- a/tests/grib_statistics.sh +++ b/tests/grib_statistics.sh @@ -75,6 +75,33 @@ input=${data_dir}/gfs.complex.mvmu.grib2 stats=`${tools_dir}/grib_get -F%.2f -p max,min,avg $input` [ "$stats" = "2.81 0.00 0.30" ] +# ECC-1926 +# grid_complex_spatial_differencing with bpv=0 +# Create a data section similar to the attached file dswrf-1.grib2 +cat >$tempFilt<$tempFilt<gts_header_on == 0); } +static void test_data_quality_checks() +{ + grib_context* c = grib_context_get_default(); + printf("Running %s ...\n", __func__); + + grib_context_set_data_quality_checks(c, 1);//warning + grib_context_set_data_quality_checks(c, 2);//error + grib_context_set_data_quality_checks(c, 0);//no checks +} + static void test_bufr_multi_element_constant_arrays() { grib_context* c = grib_context_get_default(); @@ -475,7 +486,7 @@ static void test_parse_keyval_string() values_required, GRIB_TYPE_UNDEFINED, values1, &count); Assert( !err ); Assert( count == 2 ); - grib_print_values("print values test: values1", values1, stdout); + grib_print_values("print values test: values1", values1, stdout, count); Assert( strcmp(values1[0].name, "key1")==0 ); Assert( strcmp(values1[0].string_value, "value1")==0 ); @@ -495,7 +506,7 @@ static void test_parse_keyval_string() values_required, GRIB_TYPE_LONG, values2, &count); Assert( !err ); Assert( count == 1 ); - grib_print_values("print values test: values2", values2, stdout); + grib_print_values("print values test: values2", values2, stdout, count); Assert( strcmp(values2[0].name, "x")==0 ); Assert( values2[0].long_value == 14 ); Assert( values2[0].equal == 1 ); @@ -506,11 +517,18 @@ static void test_parse_keyval_string() values_required, GRIB_TYPE_DOUBLE, values3, &count); Assert( !err ); Assert( count == 1 ); - grib_print_values("print values test: values3", values3, stdout); + grib_print_values("print values test: values3", values3, stdout, count); Assert( strcmp(values3[0].name, "mars.level")==0 ); free( (void*)values3[0].name ); } +static void test_time_conversions() +{ + printf("Running %s ...\n", __func__); + long result = convert_to_minutes(120, 13); // 120s = 2mins + Assert(result == 2); +} + static void test_dates() { printf("Running %s ...\n", __func__); @@ -593,69 +611,69 @@ void test_scale_factor_scaled_values() void test_iarray() { printf("Running %s ...\n", __func__); - grib_context* c = grib_context_get_default(); - grib_iarray* a = grib_iarray_new(c, 10, 10); + + grib_iarray* a = grib_iarray_new(10, 10); grib_iarray_push(a, 42); grib_iarray_push(a, 10000); grib_iarray_print("iarray", a); - grib_iarray* b = grib_iarray_new(c, 1, 1); + grib_iarray* b = grib_iarray_new(1, 1); grib_iarray_push(b, 0); grib_iarray_push(b, -1); grib_iarray_push(b, +1); - grib_viarray* va = grib_viarray_new(c, 1, 1); - grib_viarray_push(c, va, a); - grib_viarray_push(c, va, b); + grib_viarray* va = grib_viarray_new(1, 1); + grib_viarray_push(va, a); + grib_viarray_push(va, b); grib_viarray_print("viarray", va); grib_iarray_delete(a); grib_iarray_delete(b); - grib_viarray_delete(c, va); + grib_viarray_delete(va); } void test_darray() { printf("Running %s ...\n", __func__); - grib_context* c = grib_context_get_default(); - grib_darray* a = grib_darray_new(c, 10, 10); - grib_darray_push(c, a, 42.009); - grib_darray_push(c, a, -1.11); - grib_darray_push(c, a, 5099); + + grib_darray* a = grib_darray_new(10, 10); + grib_darray_push(a, 42.009); + grib_darray_push(a, -1.11); + grib_darray_push(a, 5099); grib_darray_print("darray", a); - grib_darray* b = grib_darray_new(c, 5, 1); - grib_darray_push(c, b, 8); - grib_darray_push(c, b, 12); + grib_darray* b = grib_darray_new(5, 1); + grib_darray_push(b, 8); + grib_darray_push(b, 12); - grib_vdarray* va = grib_vdarray_new(c, 1, 1); - grib_vdarray_push(c, va, a); - grib_vdarray_push(c, va, b); + grib_vdarray* va = grib_vdarray_new(1, 1); + grib_vdarray_push(va, a); + grib_vdarray_push(va, b); grib_vdarray_print("vdarray", va); - grib_darray_delete(c, a); - grib_darray_delete(c, b); - grib_vdarray_delete(c, va); + grib_darray_delete(a); + grib_darray_delete(b); + grib_vdarray_delete(va); } void test_sarray() { printf("Running %s ...\n", __func__); - grib_context* c = grib_context_get_default(); - grib_sarray* a = grib_sarray_new(c, 10, 10); + + grib_sarray* a = grib_sarray_new(10, 10); char ants_s[] = "ants"; char bugs_s[] = "bugs"; - grib_sarray_push(c, a, ants_s); - grib_sarray_push(c, a, bugs_s); + grib_sarray_push(a, ants_s); + grib_sarray_push(a, bugs_s); grib_sarray_print("sarray", a); - grib_vsarray* va = grib_vsarray_new(c, 1, 1); - grib_vsarray_push(c, va, a); + grib_vsarray* va = grib_vsarray_new(1, 1); + grib_vsarray_push(va, a); grib_vsarray_print("vsarray", va); - grib_sarray_delete(c, a); - grib_vsarray_delete(c, va); + grib_sarray_delete(a); + grib_vsarray_delete(va); } void test_codes_get_product_name() @@ -762,6 +780,7 @@ void test_codes_context_set_debug() grib_context_set_debug(context, -1); grib_handle* h = grib_handle_new_from_samples(context, "GRIB2"); + if (!h) return; err = grib_set_long(h, "paramId", 167); Assert(!err); @@ -777,6 +796,71 @@ void test_codes_context_set_debug() grib_context_set_debug(context, 0); } +void test_codes_is_feature_enabled() +{ + printf("Running %s ...\n", __func__); + const char* features[] = { + "AEC", + "MEMFS", + "JPG", + "PNG", + "ECCODES_THREADS", + "ECCODES_OMP_THREADS", + "NETCDF", + "FORTRAN", + "GEOGRAPHY", + NULL}; + for (int i = 0; features[i]; ++i) { + const char* f = features[i]; + printf("\tFeature %s enabled?\t%d\n", f, codes_is_feature_enabled(f)); + } + Assert( 0 == codes_is_feature_enabled("total rubbish") ); +} + +void test_codes_get_features() +{ + printf("Running %s ...\n", __func__); + + size_t len = 512; + char* features = (char*)calloc(len, sizeof(char)); + int err = codes_get_features(features, &len, CODES_FEATURES_ALL); + Assert(!err); + printf("\tFeatures are: '%s'\n", features); + + len = 512; + err = codes_get_features(features, &len, CODES_FEATURES_ENABLED); + printf("\tEnabled features are: '%s'\n", features); + + len = 512; + err = codes_get_features(features, &len, CODES_FEATURES_DISABLED); + printf("\tDisabled features are: '%s'\n", features); + + free(features); +} + +static void test_grib_get_binary_scale_fact() +{ + printf("Running %s ...\n", __func__); + int err = 0; + long result = grib_get_binary_scale_fact(INFINITY, 0, 0, &err); + Assert( err == GRIB_OUT_OF_RANGE); + Assert( result == 0 ); + + result = grib_get_binary_scale_fact(100, 0, 65, &err); // bpv too big + Assert( err == GRIB_OUT_OF_RANGE); + Assert( result == 0 ); + + result = grib_get_binary_scale_fact(100, 0, 0, &err); // bpv 0 + Assert( err == GRIB_ENCODING_ERROR); + Assert( result == 0 ); +} + +static void test_filepool() +{ + printf("Running %s ...\n", __func__); + grib_file_pool_print("file_pool contents", stdout); +} + int main(int argc, char** argv) { printf("Doing unit tests. ecCodes version = %ld\n", grib_get_api_version()); @@ -786,6 +870,7 @@ int main(int argc, char** argv) test_codes_context_set_debug(); test_codes_get_error_message(); + test_grib_get_binary_scale_fact(); test_iarray(); test_darray(); @@ -796,6 +881,7 @@ int main(int argc, char** argv) test_scale_factor_scaled_values(); test_dates(); + test_time_conversions(); test_logging_proc(); test_print_proc(); test_grib_binary_search(); @@ -807,6 +893,7 @@ int main(int argc, char** argv) test_gribex_mode(); test_gts_header_mode(); test_bufr_multi_element_constant_arrays(); + test_data_quality_checks(); test_concept_condition_strings(); @@ -841,6 +928,9 @@ int main(int argc, char** argv) test_grib2_select_PDTN(); test_grib2_choose_PDTN(); + test_codes_is_feature_enabled(); + test_codes_get_features(); + test_filepool(); return 0; } diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index d4b256770..9cb1eec4e 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -27,7 +27,7 @@ ecbuild_add_library( TARGET ecc_tools # tools binaries list( APPEND ecc_tools_binaries - codes_info codes_count codes_split_file + codes_info codes_count codes_split_file codes_export_resource grib_histogram grib_filter grib_ls grib_dump grib2ppm grib_set grib_get grib_get_data grib_copy grib_compare codes_parser grib_index_build bufr_index_build @@ -39,7 +39,6 @@ list( APPEND ecc_tools_binaries list( APPEND ecc_tools_binaries_extra grib_repair grib_to_json - codes_export_resource grib_check_gaussian_grid bufr_split_by_rdbSubtype ) @@ -96,6 +95,19 @@ else() endif() ######################################## +configure_file( codes_config.in ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/codes_config @ONLY ) +file(COPY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/codes_config + DESTINATION ${CMAKE_BINARY_DIR}/bin + FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ + GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + +install( FILES ${CMAKE_BINARY_DIR}/bin/codes_config + DESTINATION ${INSTALL_BIN_DIR} + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ + WORLD_EXECUTE WORLD_READ ) + + # BUFR compare script install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/bufr_compare_dir DESTINATION ${INSTALL_BIN_DIR} diff --git a/tools/bufr_compare.cc b/tools/bufr_compare.cc index 327020a9d..26ebad36a 100644 --- a/tools/bufr_compare.cc +++ b/tools/bufr_compare.cc @@ -337,7 +337,7 @@ int grib_tool_init(grib_runtime_options* options) if (path_is_directory(infile->name)) { /* Take the filename of the 1st file and append to dir */ char bufr[2048] = {0,}; - /* options->infile_extra->name is the 1st file */ + /* options->infile_extra->name_ is the 1st file */ snprintf(bufr, sizeof(bufr), "%s%c%s", infile->name, get_dir_separator_char(), @@ -1078,22 +1078,22 @@ static int compare_attributes(grib_handle* handle1, grib_handle* handle2, grib_r grib_accessor* a, const char* prefix, int* err) { int i = 0, ret = 0; - while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { + while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes_[i]) { /*long native_type = 0;*/ grib_accessor* aa = NULL; - if ((a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { + if ((a->attributes_[i]->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) { ++i; /* next attribute if accessor is not for dumping */ continue; } - if ((a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { + if ((a->attributes_[i]->flags_ & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) { ++i; /* next attribute if accessor is read-only */ continue; } - aa = a->attributes[i]; + aa = a->attributes_[i]; /*native_type = grib_accessor_get_native_type(aa); TODO: read only check? */ - isLeafKey = aa->attributes[0] == NULL ? 1 : 0; /* update global variable */ + isLeafKey = aa->attributes_[0] == NULL ? 1 : 0; /* update global variable */ if (compare_attribute(handle1, handle2, options, aa, prefix, err)) { (*err)++; @@ -1111,9 +1111,9 @@ static int compare_attribute(grib_handle* handle1, grib_handle* handle2, grib_ru { int ret = 0; grib_context* c = handle1->context; - const size_t fullnameMaxLen = strlen(a->name) + strlen(prefix) + 5; + const size_t fullnameMaxLen = strlen(a->name_) + strlen(prefix) + 5; char* fullname = (char*)grib_context_malloc_clear(c, sizeof(char) * fullnameMaxLen); - snprintf(fullname, fullnameMaxLen, "%s->%s", prefix, a->name); + snprintf(fullname, fullnameMaxLen, "%s->%s", prefix, a->name_); if (compare_values(options, handle1, handle2, fullname, GRIB_TYPE_UNDEFINED)) { (*err)++; ret = 1; @@ -1170,19 +1170,19 @@ static int compare_all_dump_keys(grib_handle* handle1, grib_handle* handle2, gri name = grib_keys_iterator_get_name(iter); if (blocklisted(name)) continue; - if (xa == NULL || (xa->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if (xa == NULL || (xa->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) continue; /* Get full name of key, e.g. '#2#windSpeed' or 'blockNumber' */ - rank = compute_bufr_key_rank(handle1, keys_list, xa->name); + rank = compute_bufr_key_rank(handle1, keys_list, xa->name_); if (rank != 0) { - const size_t prefixMaxLen = strlen(xa->name) + 10; + const size_t prefixMaxLen = strlen(xa->name_) + 10; prefix = (char*)grib_context_malloc_clear(context, sizeof(char) * prefixMaxLen); dofree = 1; - snprintf(prefix, prefixMaxLen, "#%d#%s", rank, xa->name); + snprintf(prefix, prefixMaxLen, "#%d#%s", rank, xa->name_); } else { - prefix = (char*)xa->name; + prefix = (char*)xa->name_; } if (blocklisted(prefix)) { diff --git a/tools/bufr_dump.cc b/tools/bufr_dump.cc index 6c31ce76e..bc11a8e8f 100644 --- a/tools/bufr_dump.cc +++ b/tools/bufr_dump.cc @@ -397,9 +397,9 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { long length = 0; int i, err = 0; - grib_handle* hclone = NULL; - grib_accessor* a = NULL; - grib_accessors_list* al = NULL; + grib_handle* hclone = NULL; + grib_accessor_bufr_data_array_t* data = NULL; + grib_accessors_list* al = NULL; if (grib_get_long(h, "totalLength", &length) != GRIB_SUCCESS) length = -9999; @@ -475,8 +475,8 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) /*return err; See ECC-723*/ } } - a = grib_find_accessor(h, "numericValues"); - al = accessor_bufr_data_array_get_dataAccessors(a); + data = dynamic_cast(grib_find_accessor(h, "numericValues")); + al = data->accessor_bufr_data_array_get_dataAccessors(); options->dump_flags = GRIB_DUMP_FLAG_ALL_ATTRIBUTES; codes_dump_bufr_flat(al, h, stdout, options->dump_mode, options->dump_flags, 0); break; diff --git a/tools/bufr_set.cc b/tools/bufr_set.cc index 7b6c62a4e..a304b7dc3 100644 --- a/tools/bufr_set.cc +++ b/tools/bufr_set.cc @@ -18,9 +18,10 @@ grib_option grib_options[] = { { "w:", "key[:{s|d|i}]=value,key[:{s|d|i}]=value,...", "\n\t\tWhere clause.\n\t\tSet is only executed for BUFR messages matching all the " "key/value constraints.\n\t\tIf a BUFR message does not match the constraints it is" - " copied unchanged\n\t\tto the output_file. This behaviour can be changed " + " copied unchanged\n\t\tto the output_bufr_file. This behaviour can be changed " "setting the option -S.\n\t\tFor each key a string (key:s), a double (key:d) or" " an integer (key:i)\n\t\ttype can be defined. Default type is string." + "\n\t\tIn the value you can also use the forward-slash character '/' to specify an OR condition (i.e. a logical disjunction)" "\n\t\tNote: only one -w clause is allowed.\n", 0, 1, 0 }, { "q", 0, 0, 1, 0, 0 }, @@ -36,12 +37,12 @@ grib_option grib_options[] = { }; const char* tool_description = - "Sets key/value pairs in the input BUFR file and writes" - "\n\teach message to the output_file." + "Sets key/value pairs in the input BUFR file(s) and writes" + "\n\teach message to the output_bufr_file." "\n\tIt fails when an error occurs (e.g. key not found)."; const char* tool_name = "bufr_set"; const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/bufr_set"; -const char* tool_usage = "[options] file file ... output_file"; +const char* tool_usage = "[options] bufr_file bufr_file ... output_bufr_file"; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); diff --git a/tools/codes_config.in b/tools/codes_config.in new file mode 100755 index 000000000..017c4715c --- /dev/null +++ b/tools/codes_config.in @@ -0,0 +1,142 @@ +#!/usr/bin/env bash + +ECCODES_VERSION_STR="@eccodes_VERSION_STR@" +ECCODES_MAJOR_VERSION=@eccodes_VERSION_MAJOR@ +ECCODES_MINOR_VERSION=@eccodes_VERSION_MINOR@ +ECCODES_PATCH_VERSION=@eccodes_VERSION_PATCH@ +# ECCODES_VERSION="$ECCODES_MAJOR_VERSION.$ECCODES_MINOR_VERSION.$ECCODES_PATCH_VERSION" + +ECCODES_GIT_SHA1="@eccodes_GIT_SHA1@" +if [ "x$ECCODES_GIT_SHA1" = "x" ]; then + ECCODES_GIT_SHA1="unknown" +fi + +################################################################# +# Commands +################################################################# +usage() +{ + echo "Usage: $0 [--version] [--info] [--git]" + exit $1 +} + +version() +{ + echo "${ECCODES_VERSION_STR}" +} + +print_feature() +{ + if [ -z "$1" ]; then + echo "OFF" + elif [[ $1 =~ (true|TRUE|ON|1) ]]; then + echo "ON" + else + echo "OFF" + fi +} + +build_type="@CMAKE_BUILD_TYPE@" +info() +{ + echo "ecCodes version ${ECCODES_VERSION_STR}, git-sha1 ${ECCODES_GIT_SHA1}" + echo "" + echo "Build:" + echo " build type : @CMAKE_BUILD_TYPE@" + echo " timestamp : @EC_BUILD_TIMESTAMP@" + echo " op. system : @CMAKE_SYSTEM@ (@EC_OS_NAME@.@EC_OS_BITS@)" + echo " processor : @CMAKE_SYSTEM_PROCESSOR@" + echo " sources : @PROJECT_SOURCE_DIR@" + echo " c++ compiler : @CMAKE_CXX_COMPILER_ID@ @CMAKE_CXX_COMPILER_VERSION@" + # Add the most common build type + if [ $build_type = "RelWithDebInfo" ]; then + echo " flags : @CMAKE_CXX_FLAGS_RELWITHDEBINFO@" + else + echo " flags : @CMAKE_CXX_FLAGS@" + fi +# echo " fortran compiler: @CMAKE_Fortran_COMPILER_ID@ @CMAKE_Fortran_COMPILER_VERSION@" +# echo " flags : @ECCODES_Fortran_FLAGS@" + echo "" + echo "Features:" + echo " FORTRAN : $(print_feature @HAVE_FORTRAN@)" + echo " AEC : $(print_feature @HAVE_AEC@)" + echo " MEMFS : $(print_feature @HAVE_MEMFS@)" + echo " ECCODES_THREADS : $(print_feature @GRIB_PTHREADS@)" + echo " ECCODES_OMP_THREADS : $(print_feature @GRIB_OMP_THREADS@)" + echo " JPG : $(print_feature @HAVE_JPEG@)" + echo " PNG : $(print_feature @HAVE_PNG@)" + echo " NETCDF : $(print_feature @HAVE_NETCDF@)" + echo "" + # echo "Dependencies: " + # if [ -n "@ECCODES_HAVE_ECKIT@" ]; then + # echo " eckit version (@eckit_VERSION@), git-sha1 $(short_gitsha1 @eckit_GIT_SHA1@)" + # else + # echo " None" + # fi +} + +gitsha1() +{ + echo "${ECCODES_GIT_SHA1}" +} + +short_gitsha1() +{ + if [ -z "$1" ]; then + echo "unknown" + else + echo $1 | head -c 13 + fi +} + +################################################################# +# Parse command-line +################################################################# + +if test $# -eq 0; then + info + # usage 1 +fi + +while test $# -gt 0; do + + # Split --option=value in $opt="--option" and $val="value" + + opt="" + val="" + + case "$1" in + --*=*) + opt=`echo "$1" | sed 's/=.*//'` + val=`echo "$1" | sed 's/--[_a-zA-Z0-9]*=//'` + ;; + --*) + opt=$1 + ;; + *) + break + ;; + esac + + # Parse options + case "$opt" in + --version) + version + ;; + --git) + gitsha1 + ;; + --info) + info + ;; + --) + shift + break + ;; + *) + echo "unknown option: $opt" + usage 1 + ;; + esac + shift +done diff --git a/tools/grib_compare.cc b/tools/grib_compare.cc index 911b1b0a5..4e984ac1c 100644 --- a/tools/grib_compare.cc +++ b/tools/grib_compare.cc @@ -647,9 +647,9 @@ static int test_bit(long a, long b) /* If the accessor represents a codeflag key, then return its binary rep in 'result' */ static int codeflag_to_bitstr(grib_accessor* a, long val, char* result) { - if (a && grib_inline_strcmp(a->cclass->name, "codeflag") == 0) { + if (a && grib_inline_strcmp(a->class_name_, "codeflag") == 0) { long i; - const long bytelen = a->length * 8; + const long bytelen = a->length_ * 8; for (i = 0; i < bytelen; i++) { if (test_bit(val, bytelen - i - 1)) *result = '1'; diff --git a/tools/grib_get.cc b/tools/grib_get.cc index b80272763..1b867dd62 100644 --- a/tools/grib_get.cc +++ b/tools/grib_get.cc @@ -101,7 +101,6 @@ int grib_tool_init(grib_runtime_options* options) exit(1); } } - Assert(p); if (p && *p == ',') { p++; options->latlon_mask = strdup(p); diff --git a/tools/grib_ls.cc b/tools/grib_ls.cc index c5d06df01..7e6e3e296 100644 --- a/tools/grib_ls.cc +++ b/tools/grib_ls.cc @@ -122,7 +122,6 @@ int grib_tool_init(grib_runtime_options* options) exit(1); } } - Assert(p); if (p && *p == ',') { p++; options->latlon_mask = strdup(p); @@ -371,10 +370,6 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) } if (!json_latlon && options->json_output) { - if (options->current_infile && options->current_infile->name) { - size_t len = strlen(options->current_infile->name); - grib_set_string(h, "file", options->current_infile->name, &len); - } if (!first_handle && options->handle_count > 1) { fprintf(stdout, ",\n"); } @@ -383,6 +378,12 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) first_handle = 0; } } + + if (options->current_infile && options->current_infile->name) { + size = strlen(options->current_infile->name); + grib_set_string(h, "file", options->current_infile->name, &size); + } + new_handle = "\n,"; return 0; } diff --git a/tools/grib_set.cc b/tools/grib_set.cc index 70adef8e3..5b2e5758b 100644 --- a/tools/grib_set.cc +++ b/tools/grib_set.cc @@ -44,7 +44,7 @@ grib_option grib_options[] = { }; const char* tool_description = - "Sets key/value pairs in the input GRIB file and writes" + "Sets key/value pairs in the input GRIB file(s) and writes" "\n\teach message to the output_grib_file." "\n\tIt fails when an error occurs (e.g. key not found)."; const char* tool_name = "grib_set"; diff --git a/tools/grib_to_netcdf.cc b/tools/grib_to_netcdf.cc index ffe0b50de..14c07790f 100644 --- a/tools/grib_to_netcdf.cc +++ b/tools/grib_to_netcdf.cc @@ -144,7 +144,7 @@ static bool eq_time(const char* l, const char* r) static value* new_value(const char* name) { - value* v = (value*)calloc(sizeof(value), 1); + value* v = (value*)calloc(1, sizeof(value)); Assert(v); v->name = grib_context_strdup(ctx, name); return v; @@ -286,7 +286,7 @@ static bool is_number(const char* name) } static parameter* new_parameter(char* name, value* v) { - parameter* p = (parameter*)calloc(sizeof(parameter), 1); + parameter* p = (parameter*)calloc(1, sizeof(parameter)); Assert(p); p->name = grib_context_strdup(ctx, name); p->values = v; @@ -708,7 +708,7 @@ typedef struct fieldset #define MISSING_FIELD(f) ((f)->missing) #define FIELD_HAS_BITMAP(f) ((f)->bitmap) - #define FASTNEW(type) (type*)calloc(sizeof(type),1) + #define FASTNEW(type) (type*)calloc(1, sizeof(type)) #define grib_context_free(ctx,x) grib_context_free(ctx,x) */ @@ -724,7 +724,7 @@ static int ecc_cube_position(const hypercube* h, const request* r, bool remove_h static value* clone_one_value(const value* p) { - value* q = (value*)calloc(sizeof(value), 1); + value* q = (value*)calloc(1, sizeof(value)); Assert(q); q->next = NULL; q->name = grib_context_strdup(ctx, p->name); @@ -744,7 +744,7 @@ static value* clone_all_values(const value* p) static parameter* clone_one_parameter(const parameter* p) { - parameter* q = (parameter*)calloc(sizeof(parameter), 1); + parameter* q = (parameter*)calloc(1, sizeof(parameter)); Assert(q); q->next = NULL; q->name = grib_context_strdup(ctx, p->name); @@ -765,7 +765,7 @@ static parameter* clone_all_parameters(const parameter* p) static request* clone_one_request(const request* r) { if (r) { - request* p = (request*)calloc(sizeof(request), 1); + request* p = (request*)calloc(1, sizeof(request)); Assert(p); p->name = grib_context_strdup(ctx, r->name); @@ -778,7 +778,7 @@ static request* clone_one_request(const request* r) static request* new_request(const char* name, parameter* p) { - request* r = (request*)calloc(sizeof(request), 1); + request* r = (request*)calloc(1, sizeof(request)); Assert(r); r->name = grib_context_strdup(ctx, name); r->params = p; @@ -884,7 +884,7 @@ static void grow_fieldset(fieldset* v, int n) static fieldset* new_fieldset(int n) { - fieldset* f = (fieldset*)calloc(sizeof(fieldset), 1); + fieldset* f = (fieldset*)calloc(1, sizeof(fieldset)); Assert(f); grow_fieldset(f, n); return f; @@ -1551,7 +1551,7 @@ static void reserve_index_cache(hypercube* h, int size) if (h->index_cache != 0) grib_context_free(ctx, h->index_cache); grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: Allocating hypercube index_cache: %d entries", size); - h->index_cache = (int*)calloc(sizeof(int), size); + h->index_cache = (int*)calloc(size, sizeof(int)); Assert(h->index_cache); h->index_cache_size = size; } @@ -1668,7 +1668,7 @@ static void cube_indexes( static hypercube* new_hypercube(const request* r) { - hypercube* h = (hypercube*)calloc(sizeof(hypercube), 1); + hypercube* h = (hypercube*)calloc(1, sizeof(hypercube)); int total = 0, count = 0; size_t n = 0; const char* val = 0; @@ -1775,7 +1775,7 @@ static hypercube* new_hypercube_from_mars_request(const request* r) n = count_values(s.c->cube, "axis"); if (n) { - s.c->compare = (namecmp*)calloc(sizeof(namecmp), n); + s.c->compare = (namecmp*)calloc(n, sizeof(namecmp)); Assert(s.c->compare); } @@ -1802,7 +1802,7 @@ static hypercube* new_simple_hypercube_from_mars_request(const request* r) free_one_request(s.r); n = count_values(s.c->cube, "axis"); if (n) { - s.c->compare = (namecmp*)calloc(sizeof(namecmp), n); + s.c->compare = (namecmp*)calloc(n, sizeof(namecmp)); Assert(s.c->compare); } @@ -2904,7 +2904,7 @@ static void set_always_a_time(hypercube* h, request* data_r) int i = 0; int n = count_values(h->cube, "axis"); if (n) { - h->compare = (namecmp*)calloc(sizeof(namecmp), n); + h->compare = (namecmp*)calloc(n, sizeof(namecmp)); Assert(h->compare); } @@ -3628,7 +3628,7 @@ static int split_fieldset(fieldset* fs, request* data_r, dataset_t** subsets, co free_all_requests(s); - filters = (dataset_t*)calloc(sizeof(dataset_t), count); + filters = (dataset_t*)calloc(count, sizeof(dataset_t)); Assert(filters); s = u; diff --git a/tools/grib_tools.cc b/tools/grib_tools.cc index b5c9f8697..2c0598b0b 100644 --- a/tools/grib_tools.cc +++ b/tools/grib_tools.cc @@ -800,7 +800,7 @@ static void grib_tools_set_print_keys(grib_runtime_options* options, grib_handle grib_accessor* anAccessor = h->accessors[i]; if (anAccessor) { for (j = 0; j < MAX_ACCESSOR_NAMES; j++) { - const char* a_namespace = anAccessor->all_name_spaces[j]; + const char* a_namespace = anAccessor->all_name_spaces_[j]; if (a_namespace) { all_namespace_vals[k++] = a_namespace; ns_count++; diff --git a/tools/gts_compare.cc b/tools/gts_compare.cc index dad70feac..4ceab0f9f 100644 --- a/tools/gts_compare.cc +++ b/tools/gts_compare.cc @@ -563,7 +563,7 @@ static int compare_all_dump_keys(grib_handle* h1, grib_handle* h2, grib_runtime_ if (blocklisted(name)) continue; - if (xa == NULL || (xa->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if (xa == NULL || (xa->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) continue; if (compare_values(options, h1, h2, name, GRIB_TYPE_UNDEFINED)) { (*pErr)++; diff --git a/tools/metar_compare.cc b/tools/metar_compare.cc index 6ffc5db5a..127ed56c5 100644 --- a/tools/metar_compare.cc +++ b/tools/metar_compare.cc @@ -730,7 +730,7 @@ static int compare_all_dump_keys(grib_handle* h1, grib_handle* h2, grib_runtime_ if (blocklisted(name)) continue; - if (xa == NULL || (xa->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + if (xa == NULL || (xa->flags_ & GRIB_ACCESSOR_FLAG_DUMP) == 0) continue; if (compare_values(options, h1, h2, name, GRIB_TYPE_UNDEFINED)) { (*pErr)++;