mirror of https://github.com/ecmwf/eccodes.git
107 lines
4.0 KiB
Modula-2
Executable File
107 lines
4.0 KiB
Modula-2
Executable File
# (C) Copyright 2005- ECMWF.
|
|
|
|
codetable[1] shapeOfTheEarth ('3.2.table',masterDir,localDir) : dump;
|
|
|
|
# Scale factor of radius of spherical earth
|
|
unsigned[1] scaleFactorOfRadiusOfSphericalEarth = missing() : can_be_missing, edition_specific;
|
|
|
|
# Scaled value of radius of spherical earth (in metres)
|
|
unsigned[4] scaledValueOfRadiusOfSphericalEarth = missing(): can_be_missing, edition_specific;
|
|
|
|
# Scale factor of major axis of oblate spheroid earth
|
|
unsigned[1] scaleFactorOfEarthMajorAxis = missing(): can_be_missing, edition_specific;
|
|
alias scaleFactorOfMajorAxisOfOblateSpheroidEarth=scaleFactorOfEarthMajorAxis;
|
|
|
|
# Scaled value of major axis of oblate spheroid earth
|
|
unsigned[4] scaledValueOfEarthMajorAxis = missing(): can_be_missing, edition_specific;
|
|
alias scaledValueOfMajorAxisOfOblateSpheroidEarth=scaledValueOfEarthMajorAxis;
|
|
|
|
# Scale factor of minor axis of oblate spheroid earth
|
|
unsigned[1] scaleFactorOfEarthMinorAxis = missing(): can_be_missing, edition_specific;
|
|
alias scaleFactorOfMinorAxisOfOblateSpheroidEarth=scaleFactorOfEarthMinorAxis ;
|
|
|
|
# Scaled value of minor axis of oblate spheroid earth
|
|
unsigned[4] scaledValueOfEarthMinorAxis = missing(): can_be_missing, edition_specific;
|
|
alias scaledValueOfMinorAxisOfOblateSpheroidEarth=scaledValueOfEarthMinorAxis;
|
|
|
|
alias earthIsOblate=one;
|
|
|
|
_if (shapeOfTheEarth == 0) {
|
|
transient radius=6367470;
|
|
alias radiusOfTheEarth=radius;
|
|
alias radiusInMetres=radius;
|
|
alias earthIsOblate=zero;
|
|
}
|
|
_if (shapeOfTheEarth == 1){
|
|
meta radius from_scale_factor_scaled_value(
|
|
scaleFactorOfRadiusOfSphericalEarth,
|
|
scaledValueOfRadiusOfSphericalEarth);
|
|
alias radiusOfTheEarth=radius;
|
|
alias radiusInMetres=radius;
|
|
alias earthIsOblate=zero;
|
|
}
|
|
_if (shapeOfTheEarth == 6){
|
|
transient radius=6371229;
|
|
alias radiusOfTheEarth=radius;
|
|
alias radiusInMetres=radius;
|
|
alias earthIsOblate=zero;
|
|
}
|
|
|
|
_if (shapeOfTheEarth == 8){
|
|
transient radius=6371200;
|
|
alias radiusOfTheEarth=radius;
|
|
alias radiusInMetres=radius;
|
|
alias earthIsOblate=zero;
|
|
}
|
|
|
|
|
|
# Oblate spheroid cases
|
|
_if (shapeOfTheEarth == 2){
|
|
# IAU in 1965
|
|
transient earthMajorAxis = 6378160.0;
|
|
transient earthMinorAxis = 6356775.0;
|
|
alias earthMajorAxisInMetres=earthMajorAxis;
|
|
alias earthMinorAxisInMetres=earthMinorAxis;
|
|
}
|
|
_if (shapeOfTheEarth == 3){
|
|
# Major and minor axes specified (in km) by data producer
|
|
meta earthMajorAxis from_scale_factor_scaled_value(
|
|
scaleFactorOfEarthMajorAxis, scaledValueOfEarthMajorAxis);
|
|
meta earthMinorAxis from_scale_factor_scaled_value(
|
|
scaleFactorOfEarthMinorAxis, scaledValueOfEarthMinorAxis);
|
|
|
|
# ECC-979
|
|
# The 'scale' accessor works with integers so rounds its first argument
|
|
# which is not what we want because the inputs are doubles with decimal
|
|
# expansions. So use the trick of dividing by 0.001 to multiply by 1000
|
|
#
|
|
# meta earthMajorAxisInMetres scale(earthMajorAxis, thousand, one, zero);
|
|
# meta earthMinorAxisInMetres scale(earthMinorAxis, thousand, one, zero);
|
|
meta earthMajorAxisInMetres divdouble(earthMajorAxis, 0.001);
|
|
meta earthMinorAxisInMetres divdouble(earthMinorAxis, 0.001);
|
|
}
|
|
_if (shapeOfTheEarth == 7){
|
|
# Major and minor axes specified (in m) by data producer
|
|
meta earthMajorAxis from_scale_factor_scaled_value(
|
|
scaleFactorOfEarthMajorAxis, scaledValueOfEarthMajorAxis);
|
|
meta earthMinorAxis from_scale_factor_scaled_value(
|
|
scaleFactorOfEarthMinorAxis, scaledValueOfEarthMinorAxis);
|
|
alias earthMajorAxisInMetres=earthMajorAxis;
|
|
alias earthMinorAxisInMetres=earthMinorAxis;
|
|
}
|
|
_if (shapeOfTheEarth == 4 || shapeOfTheEarth == 5){
|
|
# 4 -> IAG-GRS80 model
|
|
# 5 -> WGS84
|
|
transient earthMajorAxis = 6378137.0;
|
|
transient earthMinorAxis = 6356752.314;
|
|
alias earthMajorAxisInMetres=earthMajorAxis;
|
|
alias earthMinorAxisInMetres=earthMinorAxis;
|
|
}
|
|
_if (shapeOfTheEarth == 9){
|
|
# Airy 1830
|
|
transient earthMajorAxis = 6377563.396;
|
|
transient earthMinorAxis = 6356256.909;
|
|
alias earthMajorAxisInMetres=earthMajorAxis;
|
|
alias earthMinorAxisInMetres=earthMinorAxis;
|
|
}
|