Skip to content

v1.2.0 (rerelease)

Latest
Compare
Choose a tag to compare
@attipaci attipaci released this 16 Jan 05:20
· 86 commits to main since this release
45073a6

Feature release. New easy to use adapter modules for CALCEPH or the NAIF CSPICE Toolkit to provide precise positions for Solar-system sources. Also, added support for Keplerian orbitals, such as the ones published by the IAU Minor Planet Center (MPC) for asteroids, comets, and Near-Earth-Objects (NEOs). And, many more fixes and improvements.

This is a replacement for the somewhat botched release from the day before, which contained an unfortunate build oops. The replacement does not change the source code or the API, so the version stays at 1.2.0.

Fixed

  • Fixes to GCC version checking for macros.

  • Fixed dummy readeph() implementation in readeph0.c, and the use of DEFAULT_READEPH in config.mk. readeph0.c is not linked by default, and was not linked in prior releases either.

  • Cure LLVM clang compiler warnings, in tests and examples also.

Added

  • #57: New generic redshift-handling functions novas_v2z(), novas_z2v().

  • #57, #102: New make_redshifted_cat_entry() and make_redshifted_object() to simplify the creation of distant catalog sources that are characterized with a redshift measure rather than a radial velocity value.

  • #58: New functions to calculate and apply additional gravitational redshift corrections for light that originates near massive gravitating bodies (other than major planets, or Sun or Moon), or for observers located near massive gravitating bodies (other than the Sun and Earth). The added functions are grav_redshift(), redhift_vrad(), unredshift_vrad(), novas_z_add(), and novas_z_inv().

  • #83: CALCEPH integration: novas_use_calceph() and/or novas_use_calceph_planets() to specify and use ephemeris data via CALCEPH for Solar-system sources in general, and for major planets specifically; and novas_calceph_use_ids() to specify whether object.number in NOVAS_EPHEM_OBJECT type objects is a NAIF ID (default) or else a CALCEPH ID number of the Solar-system body. These functions are provided by the libsolsys-calceph.so[.1] and/or .a plugin libraries, which are built contingent on the CALCEPH_SUPPORT variable being set to 1 prior to the build. The build of the plugin module requires an accessible installation of the CALCEPH development files (C headers and unversioned static or shared libraries depending on the needs of the build).

  • #86: NAIF CSPICE integration: novas_use_cspice(), novas_use_cspice_planets(), novas_use_cspice_ephem() to use the NAIF CSPICE library for all Solar-system sources, major planets only, or for other bodies only. NOVAS_EPHEM_OBJECTS should use NAIF IDs with CSPICE (or else -1 for name-based lookup). Also provides cspice_add_kernel() and cspice_remove_kernel() functions for convenience to manage the set of active kernels (#89). These functions are provided by the libsolsys-cspice.so[.1] and/or .a plugin libraries, which are built contingent on the CSPICE_SUPPORT variable being set to 1 prior to the build. The build of the plugin module requires an accessible installation of the CSPICE development files (C headers and unversioned static or shared libraries depending on the needs of the build).

  • #87: Added novas_planet_for_name() function to return the NOVAS planet ID for a given (case insensitive) name.

  • NOVAS-NAIF conversions for major planets (and Sun, Moon, SSB): novas_to_naif_planet() (planet centers), novas_to_dexxx_planet() (mixed planet center/barycenter for DExxx ephemeris files), and the inverse naif_to_novas_planet().

  • Added get_planet_provider() and get_planet_provider_hp() functions for convenience to return the solarsystem() / solarsystem_hp() type custom planet ephemeris provider functions currently configured, so they may be used directly, outside of ephemeris() calls.

  • #93: Now supporting make install with prefix and DESTDIR support (e.g. make prefix="/opt" install to install under /opt, and/or make DESTDIR="/tmp/stage" install to stage install under /tmp/stage). You can also set other standard directory variables, as prescribed by the GNU standard to further customize the install locations.

  • #95, #98: Added support for using orbital elements. object.type can now be set to NOVAS_ORBITAL_OBJECT, whose orbit can be defined by the set of novas_orbital, relative to a novas_orbital_system. You can initialize an object with a set of orbital elements using make_orbital_object(), and for planetary satellite orbits you might use novas_set_orbsys_pole(). For orbital objects, ephemeris() will call on the new novas_orbit_posvel() to calculate positions. While orbital elements do not always yield precise positions, they can for shorter periods, provided that the orbital elements are up-to-date. For example, the Minor Planer Center (MPC) publishes accurate orbital elements for all known asteroids and comets regularly. For newly discovered objects, this may be the only and/or most accurate information available anywhere.

  • #97: Added NOVAS_EMB (Earth-Moon Barycenter) and NOVAS_PLUTO_BARYCENTER to enum novas_planets to distinguish from the planet center in calculations.

  • #98: Added gcrs_to_tod() / tod_to_gcrs() and gcrs_to_mod() / mod_to_gcrs() vector conversion functions for convenience.

  • #106: New example files under examples/ demonstrating the recommended approach for using SuperNOVAS to calculate positions for various types of object.

  • Added various object initializer macros in novas.h for the major planets, Sun, Moon, and barycenters, e.g. NOVAS_EARTH_INIT or NOVAS_SSB_INIT. These wrap the parametric NOVAS_PLANET_INIT(num, name) macro, and can be used to simplify the initialization of NOVAS objects.

  • Added more physical unit constants to novas.h and a corresponding section in the README on how these may be used to convert to/from NOVAS conventional quantities.

  • SuperNOVAS headers now include each other as system-headers, not local headers. This is unlikely to affect anything really but it is more proper for an installation of the library, and works with our own Makefile too.

  • Added 'Coordinate Systems and Conversions' flowchart to README.

  • Added a GNU standard documentation targets to Makefile.

  • Added infer make target for running Facebook's infer static analysis tool.

  • Added missing error tracing in nutation().

  • Added README.md Figure 1, to clarify relation of coordinate systems and (Super)NOVAS function to convert vectors among them.

Changed

  • #96: Changed object structure to include novas_orbital for NOVAS_ORBITAL_OBJECT types. To keep ABI compatibility to earlier SuperNOVAS releases, make_object() will not initialize the new .orbit field unless type is set to NOVAS_ORBITAL_OBJECT (which was not available before).

  • #97: Updated NOVAS_PLANETS, NOVAS_PLANET_NAMES_INIT, and NOVAS_RMASS_INIT macros to include the added planet constants.

  • #106: The old (legacy) NOVAS C example has been removed. Instead a new set of examples are provided, which are better suited for SuperNOVAS.

  • make check now runs both static analysis by cppcheck (new analysis target) and regression tests (test target), in closer conformance to GNU Makefile standards.

  • Added -g to default CFLAGS as a matter of GNU best practice.

  • Static library is now named ibsupernovas.a, which is symlinked to libnovas.a for back compatibility.

  • readeph0.c moved to examples/. It's a dummy legacy NOVAS C implementation that is not really needed in SuperNOVAS.

  • Various small tweaks to Makefiles.

  • Updated README.md and API documentation.