SkillAgentSearch skills...

SuperNOVAS

The Naval Observatory NOVAS C astrometry library, made better

Install / Use

/learn @Sigmyne/SuperNOVAS

README

Build Status Test <a href="https://sigmyne.github.io/SuperNOVAS/doc/html/files.html"> API documentation </a> <a href="https://codecov.io/gh/Sigmyne/SuperNOVAS"> Coverage Status </a> <br clear="all">

<picture> <source srcset="resources/logo-light-300x113.png" alt="SuperNOVAS logo" media="(prefers-color-scheme: dark)"/> <source srcset="resources/logo-dark-300x113.png" alt="SuperNOVAS logo" media="(prefers-color-scheme: light)"/> <img src="resources/logo-300x113.png" alt="SuperNOVAS logo" width="300" height="113" align="right"/> </picture> <br clear="all">

SuperNOVAS

DOI: 10.5281/zenodo.14584983

The NOVAS C astrometry library, made better.

SuperNOVAS is a C/C++ astronomy software library, providing high-precision astrometry such as one might need for running an observatory, a precise planetarium program, or for analyzing astronomical datasets. It started as a fork of the Naval Observatory Vector Astrometry Software (NOVAS) C version 3.1, but since then it has grown into its own, providing bug fixes, tons of new features, and a much improved API compared to the original NOVAS.

SuperNOVAS is easy to use and it is very fast, with 3--5 orders of magnitude faster position calculations than astropy 7.0.0 in a single thread (see the benchmarks), and its performance will scale further with the number of CPUs when calculations are performed in parallel threads.

SuperNOVAS is and it is available through the Sigmyne/SuperNOVAS repository on GitHub, without licensing restrictions. Its source code is compatible with the C99 and C++11 standards, and hence should be suitable for old and new platforms alike. And, despite it being a light-weight library, it fully supports the IAU 2000/2006 conventions for microarcsecond-level position calculations.

This document has been updated for the v1.6 and later releases.

Table of Contents


<a name="introduction"></a>

Introduction

SuperNOVAS is a fork of the The Naval Observatory Vector Astrometry Software (NOVAS). (It is not related to the separate NOVA / libnova library.)

The primary goal of SuperNOVAS is to improve on the original NOVAS C library via:

At the same time, SuperNOVAS aims to be fully backward compatible with the intended functionality of the upstream NOVAS C library, such that it can be used as a build-time replacement for NOVAS in your application without having to change existing (functional) code you may have written for NOVAS C.

SuperNOVAS is really quite easy to use. Its new API is just as simple and intuitive as that of astropy (or so we strive for it to be), and it is similarly well documented also (see the documentation for the C99) and/or C++ APIs. You can typically achieve the same results with similar lines of code on C or C++ with SuperNOVAS as with astropy, notwithstanding a little more involved error handling (due to the lack of try / except style constructs in C/C++).

SuperNOVAS is currently based on NOVAS C version 3.1. We plan to rebase SuperNOVAS to the latest upstream release of the NOVAS C library, if possible when new releases become available.

SuperNOVAS is maintained by Attila Kovács (Sigmyne, LLC),

Outside contributions are very welcome. See how you can contribute on how you can make SuperNOVAS even better.

Related links


<a name="fixed-issues"></a>

Fixed NOVAS C 3.1 issues

SuperNOVAS fixes a number of outstanding issues with NOVAS C 3.1:

<details>
  • Fixes the sidereal_time bug, whereby the sidereal_time() function had an incorrect unit cast. This was a documented issue of NOVAS C 3.1.

  • Fixes the ephem_close bug, whereby ephem_close() in eph_manager.c did not reset the EPHFILE pointer to NULL. This was a documented issue of NOVAS C 3.1.

  • Fixes antedating velocities and distances for light travel time in ephemeris(). When getting positions and velocities for Solar-system sources, it is important to use the values from the time light originated from the observed body rather than at the time that light arrives to the observer. This correction was done properly for positions, but not for velocities or distances, resulting in incorrect observed radial velocities or apparent distances being reported for spectroscopic observations or for angular-physical size conversions.

  • Fixes bug in ira_equinox() which may return the result for the wrong type of equinox (mean vs. true) if the equinox argument was changing from 1 to 0, and back to 1 again with the date being held the same. This affected routines downstream also, such as sidereal_time().

  • Fixes accuracy switching bug in cio_basis(), cio_location(), ecl2equ(), equ2ecl_vec(), ecl2equ_vec(), geo_posvel(), place(), and sidereal_time(). All these functions returned a cached value for the other accuracy if the other input parameters are the same as a prior call, except the accuracy.

  • Fixes multiple bugs related to using cached values in cio_basis() with alternating CIO location reference systems. This affected many CIRS-based position calculations downstream.

  • Fixes bug in equ2ecl_vec() and ecl2equ_vec() whereby a query with coord_sys = 2 (GCRS) has overwritten the cached mean obliquity value for coord_sys = 0 (mean equinox of date). As a result, a subsequent call with coord_sys = 0 and the same date as before would return the results in GCRS coordinates instead of the requested mean equinox of date coordinates.

  • Some remainder calculations in NOVAS C 3.1 used the result from fmod() unchecked, which resulted in angles outside of the expected [0:2π] range and was also the reason why cal_date() did not work for negative JD values.

  • Fixes aberration() returning NaN vectors if the ve argument is 0. It now returns the unmodified input vector appropriately instead.

  • Fixes unpopulated az output value in equ2hor() at zenith. While any azimuth is acceptable really, it results in unpredictable behavior. Hence, we set az to 0.0 for zenith to be consistent.

  • Fixes potential string overflows and eliminates associated compiler warnings.

  • Nutation series used truncated expressions for the fundamental arguments, resulting in μas-level errors in when

View on GitHub
GitHub Stars50
CategoryDevelopment
Updated1h ago
Forks14

Languages

C

Security Score

100/100

Audited on Apr 1, 2026

No findings