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