# Copyright 2005-2018 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.
#

# TEMPLATE 3.10, Mercator

include "grib2/template.3.shape_of_the_earth.def";

unsigned[4] Ni : dump;
alias numberOfPointsAlongAParallel=Ni;
alias Nx = Ni;
alias geography.Ni=Ni;

unsigned[4] Nj : dump;
alias numberOfPointsAlongAMeridian=Nj;
alias Ny = Nj ;
alias geography.Nj=Nj;

# La1 - latitude of first grid point
signed[4] latitudeOfFirstGridPoint: edition_specific,no_copy ;
alias La1 =  latitudeOfFirstGridPoint;
meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump;

# Lo1 - longitude of first grid point
signed[4] longitudeOfFirstGridPoint : edition_specific,no_copy;
alias Lo1 =  longitudeOfFirstGridPoint;
meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump;

include "grib2/template.3.resolution_flags.def";

# LaD - Latitude(s) at which the Mercator projection intersects the Earth
# (Latitude(s) where Di and Dj are specified)
signed[4] LaD : edition_specific,no_copy;
meta geography.LaDInDegrees scale(LaD,oneConstant,grib2divider,truncateDegrees) : dump;

# La2 - latitude of last grid point
signed[4] latitudeOfLastGridPoint : edition_specific,no_copy;
alias La2 =  latitudeOfLastGridPoint;
meta geography.latitudeOfLastGridPointInDegrees scale(latitudeOfLastGridPoint,oneConstant,grib2divider,truncateDegrees) : dump;

# Lo2 - longitude of last grid point
signed[4] longitudeOfLastGridPoint: edition_specific,no_copy ;
alias Lo2 =  longitudeOfLastGridPoint;
meta geography.longitudeOfLastGridPointInDegrees scale(longitudeOfLastGridPoint,oneConstant,grib2divider,truncateDegrees) : dump;

include "grib2/template.3.scanning_mode.def";

# Orientation of the grid, angle between i direction on the map and the equator
# NOTE 1: Limited to the range of 0 to 90 degrees; if the angle of orientation of the grid is neither 0 nor 90 degrees,
#         Di and Dj must be equal to each other
unsigned[4] orientationOfTheGrid : dump ;
meta geography.orientationOfTheGridInDegrees
    scale(orientationOfTheGrid,oneConstant,grib2divider,truncateDegrees) : dump;
    
# Di - longitudinal direction grid length
# NOTE 2: Grid lengths are in units of 10**-3 m, at the latitude specified by LaD
unsigned[4] Di  : edition_specific,no_copy ;
alias longitudinalDirectionGridLength = Di   ;
meta geography.DiInMetres
    scale(Di,oneConstant,thousand,truncateDegrees) : dump;
    
# Dj - latitudinal direction grid length
# NOTE 2: Grid lengths are in units of 10**-3 m, at the latitude specified by LaD
unsigned[4] Dj  : edition_specific,no_copy ;
alias latitudinalDirectionGridLength =  Dj;
meta geography.DjInMetres
    scale(Dj,oneConstant,thousand,truncateDegrees) : dump;


# END   2/template.3.10 ----------------------------------------------------------------------
