G-Nut (software library)


The G-Nut project was initiated in 2011 at Geodetic Observatory Pecny, RIGTC for implementing core software library in order to support developments of various end-user applications. The motivations for the project could be summarized as follows:

  • to stimulate exploitation of highly efficient and autonomous PPP technique in various domains,
  • to stimulate up-to-date and deep expertise and development in GOP towards a multi-GNSS constellation and real-time analyzes,
  • to update GOP analysis center products contributing to various service (EUREF, IGS, E-GVAP etc.) with new or advanced solutions,
  • to support an easy development of end-user applications targeted for geodesy, seismology, meteorology, climatology and other scientific areas either for GNSS experts or for other GNSS users,
  • to contribute to a robust production of precise products for supporting PPP (in near future).

The G-Nut library is written in C++ taking advantages of object-oriented design and multi-thread processing. It is designed primarily for Linux operating systems and providing command-line applications since it is usually well suitable for scientific purposes. Some other platforms including Windows will be supported in near future. The library implementation is independent of any large software framework needed for the developing Graphical User Interface (GUI). However, the G-Nut initially exploited the Boost library Boost for a platform independent multi-thread implementation, which dependence has been removed for specific applications. Matrix representation and factorization methods are handled using New-Mat 09 matrix library developed by Davis (2009) within the G-Nut library. The pugixml light-weight C++ XML processing library by Kapoulkine (2012) is used for parsing XML configurations. The XML mark-up language was selected for the library classes as well as for end-user application settings due to its high flexibility, ease extension and support by various other editing and viewing user-tools.

Main characteristics are summarized as follows:

  • object-oriented C++ design,
  • support for multi-thread applications,
  • flexible design supporting various end-user applications,
  • adaptable internal structures for easy extensions in future,
  • flexible data and product containers of self-contained elements,
  • multi-GNSS data and processing support,
  • integrated IO for various protocols (files, streams),
  • integrated IO for various data/product formats (decoders and encoders),
  • different adjustment models (LSQ, Kalman, Kalman/srcf, back-smoothing),
  • dual-layer (library/application) configuration in XML format,
  • GUI to be developed independently for prominent applications only.