# (C) Copyright 2005- ECMWF.
# Ocean model data

constant GRIBEXSection1Problem = 0 ;

template mars_labeling "grib1/mars_labeling.def";
transient localFlag=1 : hidden ;

constant oceanStream = 1090;

if(marsStream == oceanStream) {
  unsigned[2] perturbationNumber : dump ;
}

if(marsStream != oceanStream) {
  unsigned[1] perturbationNumber : dump ;
  pad padding_loc4_2(1);
}

unsigned[1] flagShowingPostAuxiliaryArrayInUse;

unsigned[1] systemNumber : dump ;
alias system=systemNumber;

unsigned[1] methodNumber : dump ;

#
# Coordinate structure definition
#
unsigned[1] spaceUnitFlag : dump ;

unsigned[1] verticalCoordinateDefinition : dump ;

unsigned[1] horizontalCoordinateDefinition : dump ;

unsigned[1] timeUnitFlag : dump ;

unsigned[1] timeCoordinateDefinition : dump ;

#
# Position definition: mixed coordinates
#
unsigned[1] mixedCoordinateFieldFlag : dump ;

unsigned[1] coordinate1Flag : dump ;

unsigned[1] averaging1Flag : dump ;

signed[4] coordinate1Start : dump ;

signed[4] coordinate1End  : dump ;

unsigned[1] coordinate2Flag : dump ;

unsigned[1] averaging2Flag : dump ;

signed[4] coordinate2Start : dump ;

signed[4] coordinate2End : dump ;

#
# Data grid definitions
#
unsigned[1] coordinate3Flag : dump ;

unsigned[1] coordinate4Flag : dump ;

signed[4] coordinate4OfFirstGridPoint  : dump;

signed[4] coordinate3OfFirstGridPoint : dump ;

signed[4] coordinate4OfLastGridPoint  : dump;

signed[4] coordinate3OfLastGridPoint : dump ;

signed[4] iIncrement : dump ;

signed[4] jIncrement  : dump;

flags[1] flagForIrregularGridCoordinateList 'grib1/ocean.1.table' : dump;

flags[1] flagForNormalOrStaggeredGrid 'grib1/ocean.1.table' : dump;

#
# Auxiliary information
#
flags[1] flagForAnyFurtherInformation 'grib1/ocean.1.table' : dump;

unsigned[1] numberInHorizontalCoordinates  : dump;

unsigned[2] numberInMixedCoordinateDefinition  : dump;

unsigned[2] numberInTheGridCoordinateList  : dump;

unsigned[2] numberInTheAuxiliaryArray : dump ;

#
# Horizontal coordinate definition
#
unsigned[4] horizontalCoordinateSupplement[numberInHorizontalCoordinates] : dump;

#
# Mixed coordinate definition
#
unsigned[4] mixedCoordinateDefinition[numberInMixedCoordinateDefinition] : dump;

#
# Grid coordinate list
#
if (numberInTheGridCoordinateList>0) {
  signed[4] gridCoordinate[numberInTheGridCoordinateList] : dump;
}

#
# Auxiliary array
#
unsigned[4] auxiliary[numberInTheAuxiliaryArray] : dump;

#
# Post-auxiliary array
#
constant postAuxiliaryArrayPresent = 1;

if (flagShowingPostAuxiliaryArrayInUse == postAuxiliaryArrayPresent) {
  unsigned[4] sizeOfPostAuxiliaryArrayPlusOne : dump;
  meta sizeOfPostAuxiliaryArray evaluate(sizeOfPostAuxiliaryArrayPlusOne - 1);
  if (sizeOfPostAuxiliaryArray>0) {
    unsigned[4] postAuxiliary[sizeOfPostAuxiliaryArray] : dump;

    if (sizeOfPostAuxiliaryArray>3) {
      meta referenceDate element(postAuxiliary,3);
    }
  } else {
    transient referenceDate=0;
  }
}
alias hdate = dataDate;

template local_use "grib1/mars_labeling.4.def";
