                    =======================================
                    Lunar Gravitational Maps 2026 (LGM2026)
                    =======================================


                                1. Introduction
                                ===============

LGM2026 is a suite of maps showing the lunar gravitational field at the lunar 
topography and on its circumscribing sphere.  Depicted are the gravitational 
potential, the gravitational vector and the gravitational tensor at a spatial 
resolution of 128 pixels per degree (~250 m at the equator).  LGM2026 relies on 
observed GRAIL gravity (harmonic degrees up to 500, wavelengths up to 11 km at 
the equator) and gravity modeled from topography using a 3D crustal density 
model (harmonic degrees beyond 500, wavelengths shorter than 11 km at the 
equator).  The maps on the circumscribing sphere have been transformed into 
a spherical-harmonic expansion of the lunar gravitational field up to degree 
11519.


1.1 Recommendation
------------------

Before working with LGM2026, read at least Section 3.2.


1.2 Data points
---------------

The resolution of LGM2026 is 1/128 degree.  Each map thus consists of 23040 by 
46080 pixels that are organized in a 2D grid.  The grids are stored in the 
pixel registration (in the jargon of Generic Mapping Tools); that is, all data 
refer to the pixel centers.

Vertically, the points of the lunar surface gravitational maps reside 
0.1 m above the lunar topography as represented by the LDEM128_PA_pixel_202405  
model (Neumann, 2024).  The points on the circumscribing sphere have a constant 
spherical radius of 1749 km.

Neumann, G. (2024). LOLA MOON_PA gridded dataset [Data set].  NASA Goddard 
    Space Flight Center Planetary Geodesy Data Archive.  doi: 
    https://doi.org/10.60903/LOLA_PA


1.3 Coordinate system of the maps
---------------------------------

All maps use the Moon's principal axes coordinate system.


1.4 Coordinate system of the gravitational vector and tensor
------------------------------------------------------------

The gravitational vector and the gravitational tensor are expressed in the 
local north-oriented reference frame, which has the origin at the data point, 
the x-axis points to the north, the y-axis points to the west and the z-axis 
points radially outwards.


1.5 Gravitational field
-----------------------

LGM2026 shows quantities of the gravitational field.  Neither the centrifugal 
field nor the normal gravity field is accounted for in LGM2026.  Given that the 
position of all LGM2026 points is published along with the maps, these 
contributions can be easily evaluated whenever necessary.


1.6 Accuracy
------------

The accuracy of the LGM2026 surface maps is estimated as follows:

    * 13 m**2 * s**-2 for the gravitational potential; once the normal 
      gravitational potential is subtracted, the accuracy improves by three to 
      four orders of magnitude,

    * 2 mGal for the gravitational vector (1 mGal = 10**-5 m * s**-2),

    * 250 E for the diagonal elements of the gravitational tensor and a few 
      tens of E for the off-diagonal elements (1 E = 10**-9 s**-2).

The maps on the circumscribing sphere should be more accurate than the surface 
maps at least by two orders of magnitude for the gravitational potential, one 
order of magnitude for the gravitational vector and three orders of magnitude 
for the gravitational tensor.


1.7 Limitations
---------------

* Beyond degree 500, that is, at wavelengths shorter than ~11 km at the 
  equator, LGM2026 does not incorporate any observed gravitational data and 
  therefore it must not be geophysically or geologically interpreted at these 
  scales.

* Noise is present in the grids on the circumscribing sphere at scales shorter 
  than ~9 km for the gravitational potential, ~2 km for the gravitational 
  vector and ~650 meters for the gravitational tensor.  The surface maps are 
  not affected by this issue.

* The LDEM128_PA_pixel_202405 topography model contains artifacts which 
  propagated into LGM2026.  The artifacts are found mostly (but not only) at 
  latitudes beyond +-60 degrees towards the poles.


1.8 Citation
------------

Bucha, B. (2026).  Lunar gravitational maps from GRAIL gravity, LRO and Kaguya 
    topography and 3D crustal density.  Submitted to Icarus.


1.9 Contact
-----------

Blazej Bucha, blazej.bucha@stuba.sk


                           2. Input Data and Methods
                           =========================

LGM2026 has two main constituents.

    * Long wavelengths are derived from the Kaula-constrained GRGM1200B 
      (Goossens et al., 2020) up to degree 500 (~11 km at the equator).  
      GRGM1200B is a spherical-harmonic model of the lunar gravitational field 
      derived from GRAIL observations.

    * Short-scale gravitational signals were obtained by gravity-forward 
      modeling of lunar topography using a 3D crustal density model.  The 
      topography was represented by the LDEM128_PA_pixel_202405 model (Neumann, 
      2024) and the crustal density model was due to Goossens et al. (2020) 
      (the 3D linear density variant with the cap radius of 15 deg and the 
      degree range 250--650).

The long wavelength component of LGM2026 was obtained by spherical-harmonic 
synthesis of GRGM1200B up to degree 500.

The short-scale signals were obtained by residual terrain modeling (RTM) using 
3D variable density.  Near-zone gravitational effects (up to 10 deg from data 
points) were forward-modeled using tesseroids with radially variable density.  
Far-zone gravitational effects (beyond 10 deg) were obtained by 
a spherical-harmonic gravity-forward modeling modified to spherical caps and 3D 
densities.  The low-frequency RTM correction was applied to all LGM2026 
quantities.  The high-frequency RTM correction was not relevant due to the use 
of the spherical-harmonic spectral gravity-forward modeling.

Goossens S., Sabaka T. J., Wieczorek M. A., Neumann G. A., Mazarico E., Lemoine 
    F. G., Nicholas J. B., Smith D. E., Zuber M. T. (2020). High-resolution 
    gravity field models from GRAIL data and implications for models of the 
    density structure of the Moon's crust. Journal of Geophysical Research: 
    Planets 125:e2019JE006086, https://doi.org/10.1029/2019JE006086


                        3. Structure of the repository
                        ==============================

The structure of the LGM2026 repository is as follows:

    .
    |-- lgm2026-grd-checksums.zip       -- Checksums for all "h5" files
    |-- lgm2026-grd-example-read.py     -- Example reading of an "h5" file in
    |                                      Python
    |-- lgm2026-grd-figures.zip         -- Simple plots of data from the "h5"
    |                                      files
    |-- lgm2026-grd-N00E000.h5          -- 36 HDF5 files with LGM2026 grids
    |-- lgm2026-grd-N00E060.h5
    |-- ...
    |-- lgm2026-grd-S90E300.h5
    |-- lgm2026-manuscript.pdf          -- Manuscript on LGM2026
    |-- lgm2026-shcs-checksums.zip      -- Checksums for "lgm2026-shcs.gfc"
    |-- lgm2026-shcs-figures.zip        -- Plot of degree amplitudes of LGM2026
    |-- lgm2026-shcs.gfc                -- Spherical-harmonic coefficients of 
    |                                      the gravitational field up to degree 
    |                                      11519
    |-- lgm2026-visualization.mp4       -- Video visualization of LGM2026
    |-- LICENSE                         -- CC BY 4.0 license, under which
    |                                      LGM2026 data are published
    `-- README                          -- This file

The size of the entire LGM2026 repository is about 167 GB.

LGM2026 grids are stored in the "./lgm2026-grd-*.h5" files using the HDF5 file 
format (suffix "h5"; see Section 3.1).  Each "h5" data file (4.6 GB) contains 
all LGM2026 maps within a range of 30 degrees in latitude and 60 degrees in 
longitude (3840 by 7680 pixels).  The files are named by the coordinates of the 
south-westernmost pixel corner.  The pattern is

    lgm2026-grd-[N|S]xxEyyy.h5

where

    "N" and "S" denote the northern and southern hemisphere, respectively,

    "xx" is the latitude of the southernmost pixel grid line,

    "E" denotes longitudes measured positively to the east and

    "yyy" is the longitude of the westernmost pixel grid line.

For instance, the latitude and the longitude of the south-westernmost (bottom 
left) pixel corner of the region in "./lgm2026-grd-N60E180.h5" are 60 degrees 
and 180 degrees, respectively.  For this tile, the latitude and the longitude 
of the south-westernmost pixel center are thus "60 + 1 / (2 * 128)" degrees and 
"180 + 1 / (2 * 128)" degrees, respectively.

The spherical-harmonic coefficients of the lunar external gravitational field 
up to degree 11519 are stored in "./lgm2026-shcs.gfc".  The file format is 
defined by International Center for Global Earth Models (ICGEM; 
https://icgem.gfz.de/home).


3.1 Structure of HDF5 files
---------------------------

HDF5 is an open format to store and organize large datasets 
(https://www.hdfgroup.org/).  It organizes "datasets" into containers called 
"groups".  Datasets and groups may have attached small objects to them called 
"attributes".  HDF5 can be read by all commonly used programming languages.

All "h5" files share the same structure.  The first-level groups are:

    "/position"                     -- 3D position of data points

    "/gravitational-field"          -- Full-scale gravitational maps
                                       (the main product)

    "/residual-gravitational-field" -- Residual gravitational maps from RTM
                                       (a by-product)

Each first-level group contains two second-level groups:

    "topography" -- Data associated with the maps residing at the lunar 
                    topography

    "sphere" -- Data associated with the maps residing on the circumscribing
                sphere

The second-level groups:

    "/position/topography"

    "/position/sphere"

contain three datasets:

    "latitude"  -- Spherical latitude of LGM2026 points
                   (centers of the pixels)

    "longitude" -- Spherical longitude of LGM2026 points
                   (centers of the pixels)

    "radius"    -- Spherical radius of LGM2026 points
                   (the vertical offset of 0.1 m mentioned in Section 1.2 is 
                   already accounted for in this dataset; do not add the
                   0.1 m offset)

The second-level groups:

    "/gravitational-field/topography"

    "/gravitational-field/sphere"

    "/residual-gravitational-field/topography"

    "/residual-gravitational-field/sphere"

contain 10 datasets (all in single precision):

    "v"   -- The gravitational potential

    "vx"  -- The x-element of the gravitational vector

    "vy"  -- The y-element of the gravitational vector

    "vz"  -- The z-element of the gravitational vector

    "vxx" -- The xx-element of the gravitational tensor

    "vxy" -- The xy-element of the gravitational tensor

    "vxz" -- The xz-element of the gravitational tensor

    "vyy" -- The yy-element of the gravitational tensor

    "vyz" -- The yz-element of the gravitational tensor

    "vzz" -- The zz-element of the gravitational tensor

Each dataset (including those in the "/position" group) has two attributes:

    "unit"   -- Physical unit of the dataset as a string

    "offset" -- Value that must be added to the associated dataset.  It may or 
                may not be zero.  The offset value of the same dataset (e.g., 
                "/gravitational-field/topography/vz") may vary between the 
                tiles.

                A simple rule that ensures proper data reading is to *always* 
                add the offset value to the dataset, be the offset zero or not, 
                and to always use only that offset, which is found in the same 
                tile as the dataset.

All floating points in the datasets and attributes are stored in single 
precision except for the "latitude" and "longitude" datasets and their "offset" 
attributes, which are stored in double precision.

A brief listing of the groups and datasets of each "h5" file reads:

    /                                            Group
    /gravitational-field                         Group
    /gravitational-field/sphere                  Group
    /gravitational-field/sphere/v                Dataset {3840, 7680}
    /gravitational-field/sphere/vx               Dataset {3840, 7680}
    /gravitational-field/sphere/vxx              Dataset {3840, 7680}
    /gravitational-field/sphere/vxy              Dataset {3840, 7680}
    /gravitational-field/sphere/vxz              Dataset {3840, 7680}
    /gravitational-field/sphere/vy               Dataset {3840, 7680}
    /gravitational-field/sphere/vyy              Dataset {3840, 7680}
    /gravitational-field/sphere/vyz              Dataset {3840, 7680}
    /gravitational-field/sphere/vz               Dataset {3840, 7680}
    /gravitational-field/sphere/vzz              Dataset {3840, 7680}
    /gravitational-field/topography              Group
    /gravitational-field/topography/v            Dataset {3840, 7680}
    /gravitational-field/topography/vx           Dataset {3840, 7680}
    /gravitational-field/topography/vxx          Dataset {3840, 7680}
    /gravitational-field/topography/vxy          Dataset {3840, 7680}
    /gravitational-field/topography/vxz          Dataset {3840, 7680}
    /gravitational-field/topography/vy           Dataset {3840, 7680}
    /gravitational-field/topography/vyy          Dataset {3840, 7680}
    /gravitational-field/topography/vyz          Dataset {3840, 7680}
    /gravitational-field/topography/vz           Dataset {3840, 7680}
    /gravitational-field/topography/vzz          Dataset {3840, 7680}
    /position                                    Group
    /position/sphere                             Group
    /position/sphere/latitude                    Dataset {3840}
    /position/sphere/longitude                   Dataset {7680}
    /position/sphere/radius                      Dataset {SCALAR}
    /position/topography                         Group
    /position/topography/latitude                Dataset {3840}
    /position/topography/longitude               Dataset {7680}
    /position/topography/radius                  Dataset {3840, 7680}
    /residual-gravitational-field                Group
    /residual-gravitational-field/sphere         Group
    /residual-gravitational-field/sphere/v       Dataset {3840, 7680}
    /residual-gravitational-field/sphere/vx      Dataset {3840, 7680}
    /residual-gravitational-field/sphere/vxx     Dataset {3840, 7680}
    /residual-gravitational-field/sphere/vxy     Dataset {3840, 7680}
    /residual-gravitational-field/sphere/vxz     Dataset {3840, 7680}
    /residual-gravitational-field/sphere/vy      Dataset {3840, 7680}
    /residual-gravitational-field/sphere/vyy     Dataset {3840, 7680}
    /residual-gravitational-field/sphere/vyz     Dataset {3840, 7680}
    /residual-gravitational-field/sphere/vz      Dataset {3840, 7680}
    /residual-gravitational-field/sphere/vzz     Dataset {3840, 7680}
    /residual-gravitational-field/topography     Group
    /residual-gravitational-field/topography/v   Dataset {3840, 7680}
    /residual-gravitational-field/topography/vx  Dataset {3840, 7680}
    /residual-gravitational-field/topography/vxx Dataset {3840, 7680}
    /residual-gravitational-field/topography/vxy Dataset {3840, 7680}
    /residual-gravitational-field/topography/vxz Dataset {3840, 7680}
    /residual-gravitational-field/topography/vy  Dataset {3840, 7680}
    /residual-gravitational-field/topography/vyy Dataset {3840, 7680}
    /residual-gravitational-field/topography/vyz Dataset {3840, 7680}
    /residual-gravitational-field/topography/vz  Dataset {3840, 7680}
    /residual-gravitational-field/topography/vzz Dataset {3840, 7680}

A more lengthy list that shows not only the groups and datasets but also the 
attributes and the data types reads (for "./lgm2026-grd-N60E000.h5" as an 
example):

    HDF5 "./lgm2026-grd-N60E000.h5" {
    GROUP "/" {
       GROUP "gravitational-field" {
          GROUP "sphere" {
             DATASET "v" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vx" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vxx" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vxy" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vxz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vy" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vyy" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vyz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vzz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
          }
          GROUP "topography" {
             DATASET "v" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vx" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vxx" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vxy" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vxz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vy" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vyy" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vyz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vzz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
          }
       }
       GROUP "position" {
          GROUP "sphere" {
             DATASET "latitude" {
                DATATYPE  H5T_IEEE_F64LE
                DATASPACE  SIMPLE { ( 3840 ) / ( 3840 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F64LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "longitude" {
                DATATYPE  H5T_IEEE_F64LE
                DATASPACE  SIMPLE { ( 7680 ) / ( 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F64LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "radius" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SCALAR
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
          }
          GROUP "topography" {
             DATASET "latitude" {
                DATATYPE  H5T_IEEE_F64LE
                DATASPACE  SIMPLE { ( 3840 ) / ( 3840 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F64LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "longitude" {
                DATATYPE  H5T_IEEE_F64LE
                DATASPACE  SIMPLE { ( 7680 ) / ( 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F64LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "radius" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
          }
       }
       GROUP "residual-gravitational-field" {
          GROUP "sphere" {
             DATASET "v" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vx" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vxx" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vxy" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vxz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vy" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vyy" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vyz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vzz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
          }
          GROUP "topography" {
             DATASET "v" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vx" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vxx" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vxy" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vxz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vy" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vyy" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vyz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
             DATASET "vzz" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SIMPLE { ( 3840, 7680 ) / ( 3840, 7680 ) }
                ATTRIBUTE "offset" {
                   DATATYPE  H5T_IEEE_F32LE
                   DATASPACE  SCALAR
                }
                ATTRIBUTE "unit" {
                   DATATYPE  H5T_STRING {
                      STRSIZE H5T_VARIABLE;
                      STRPAD H5T_STR_NULLTERM;
                      CSET H5T_CSET_UTF8;
                      CTYPE H5T_C_S1;
                   }
                   DATASPACE  SCALAR
                }
             }
          }
       }
    }
    }

All array elements in the 2D datasets are stored first along latitude parallels 
(west to east) and then along meridians (north to south).  The first record is 
for the north-westernmost pixel.  If you read the files in programming 
languages that store arrays in the column-major format (Fortran, Julia, GNU 
Octave, MATLAB, etc.), you may need to transpose the arrays after the reading 
to get the shape of 3840 by 7680 as shown above.  Programming languages 
following the row-major data storing method (C, C++, NumPy in Python, etc.) 
should load the arrays in the 3840 by 7680 shape by default.


3.2 Data processing
-------------------

Except for the "latitude" and "longitude" datasets and their "offset" 
attributes, all floating points are stored in single precision (32 bits, see 
Section 3.1).  In order not to lose precision when adding offsets to datasets, 
the following approach is recommended for the single precision datasets.

    1) Read your dataset in single precision.

    2) Cast your dataset to double precision.

       Naturally, this will almost certainly create garbage digits beyond the 
       7th digit or so, because the datasets cannot be represented exactly in 
       single precision.  But this is okay because, as long as the offsets have 
       not been applied, the single precision datasets are not accurate to that 
       many digits anyway.

    3) Read your offset in single precision.

    4) Cast your offset to double precision.

       This can be done exactly without any artificial digits (unlike in the 
       step 2), because all offsets take values that can be represented in 
       single precision exactly.

    5) Add your double precision offset to your double precision dataset.

    6) From now on, use only the double precision output from step 5) in your 
       code.

Without the casts, you may lose precision.  For instance, the gravitational 
potential may be rounded to integer values if not explicitly cast to double 
precision, simply because there are not enough bits in single precision to 
store all digits after the decimal point.


3.3 Example read in Python
--------------------------

See "./lgm2026-grd-example-read.py".


                                    Funding
                                    =======

Funded by the EU NextGenerationEU through the Recovery and Resilience Plan for 
Slovakia under the project No. 09I03-03-V04-00273.


                                  Disclaimer
                                  ==========

The dataset provided here is offered "as-is" and without any warranties of any 
kind, either express or implied, including but not limited to the accuracy, 
completeness, reliability, or fitness for a particular purpose.  By using this 
dataset, you agree to assume all risks associated with its use.  Neither the 
dataset creator nor Slovak University of Technology in Bratislava take any 
responsibility for any damages, losses, or legal issues arising from the use of 
these data.
