Releases: Sigmyne/SuperNOVAS
v1.6.0
Feature release, introducing a proper C++ API for the first time, adding the self-contained semi-analytic ELP2000 / MPP02 model of the Moon, and bringing various other improvements.
Fixed
-
#293:
geo_posvel()applied TOD to ICRS conversions twice for airborne observers, resulting in imprecise observer coordinates relative to the geocenter. -
#296: Possible buffer overflow in
novas_print_dms(). (thanks to @aleberti) -
#305:
novas_geom_posvel()returned velocities referenced to SSB, not to the observer.
Added
-
#256: New C++11 API to wrap the C99 functions into a higher-level, easier to use, and object-oriented interface. (thanks to @aleberti for helping with testing and debugging).
-
#256: New
novas_time_leap()to simplify back calculating the leap seconds from anovas_timespecstructure. -
#281: Added a truncated version of semi-analytic ELP/MPP02 model of the Moon's position relative to the geocenter by Chapront & Francou (2003), using up to about 3400 terms, and reaching accuracies to the 1 arcsec / 1km level (or better for the present era).
-
#298: Added
cspice_clear_kernels()to CSPICE plugin to close all kernels and free up the resources they use (thanks to @aleberti) -
#306: Added
novas_site_gcrs_posvel()as a more precise alternative togeo_posvel()for Earth-bound observers, when polar wobble offsets are known. -
Added
novas_enu_to_itrs()andnovas_itrs_to_enu()functions to help convert between local East-North-Up (ENU) coordinates and ITRS. ENU is a natural local Cartesian coordinate system of an observer at or near the Earth's surface. -
Added
novas_diff_time_scale()for obtaining time difference between two astrometric times in the specified timescale of choice. -
Added
novas_timescale_offset()for returning the time offset in two different timescale representations of a time instance. -
Added
novas_icrs_to_sys()andnovas_sys_to_icrs()for more flexible conversion of equatorial vectors between ICRS/GCRS and other coordinate reference systems.
Changed
-
#256: Changes to repo layout to accommodate C++ API in addition to the base C99 API.
-
#306:
novas_make_frame()now uses the newnovas_site_gcrs_posvel()when calculating SSB-based observer location and velocity, in the GCRS, for Earth-based observers. -
#306:
geo_posvel()changed to return an error (-1) if used for a geodetic observer and debug mode is set toNOVAS_DEBUG_EXTRA, to warn that polar offsets are not included in the calculation. -
#310: Change how CMake detects the need for linking against
libm. -
Use more precise matrix from Liu et al. (2011) for equatorial / galactic conversions.
-
Consolidated equatorial vector transformations, eliminating duplicated code.
-
CMake config updated to link libraries against dependent libraries with
PUBLICscope, and other configuration tweaks. -
Improved and updated documentation.
v1.5.1
Bug fix release.
Fixed
-
#270:
novas_print_dms()gave incorrect representations of negative angles, whereby the negative sign was repeated in the minutes and seconds components also. -
#272:
CMakeLists.txtexported thecoretarget by another name ofsupernovas, which messed up the CMake package dependencies and also vcpkg. Fixed by not renamingcoretarget. -
#276: Wrong eccentricity value in
novas_make_moon_orbit(), resulting in errors up to a few degrees in the Moon's orbital modeling. (thanks to @prookyon)
Changed
-
#273: Removed
CLEAN_DIRECT_OUTPUTfromCMakeLists.txt. It's an option that is no longer needed or used (since 2009). -
#273: Removed unnecessary
POSITION_INDEPENDENT_CODEfromCMakeLists.txt. (It's automatic for shared libraries.) -
#273: Updated
README.mdCMake snippet for building against thesupernovaspackage. -
#276, #280: Improved Lunar orbital modeling in
novas_make_moon_orbit(), by using the leading terms from the ELP/MPP02 model, for a typical accuracy at the 10 arcmin level for a day or so around the reference epoch of the orbital parameters. -
#284: Changed
strcpy()calls to the saferstrncpy(). (thanks to @ChooseAfferoGPL) -
novas_sep()now uses the Vincenty formula for calculating distances on a sphere, which is accurate for all locations, unlike the law of cosines or the haversine formula used previously. -
CMake:
cmake_minimum_required()now includes current version upper bound of 4.2, in preparation to CMake 4.0 (see https://fedoraproject.org/wiki/Changes/CMake4.0 for more explanation). -
Fix unclosed code blocks in Doxygen markup (causes errors in latest Doxygen).
-
CMake libraries (targets) built with transitive dependencies.
v1.5.0
Feature release. Some new functions, enhanced precision, improved portability (including Windows and Android), C++ compatibility, and documentation.
Fixed
-
#259: Fix
novas_track_pos()tracking across / near the poles. -
NOVAS_JD_B1900definition was MJD date instead of JD date. -
Fix the length of a Besselian year (used for parsing Besselian epochs).
-
gcrs2equ(): propagate error if converting to TOD and theaccuracyis invalid. -
NOVAS_VERSION_STRINGdefinition innovas.h. -
Pedantic
enumtype casting for function parameters and enums, to improve C++ compatibility. -
Small fixes to error tracing in
frames.c.
Added
-
#209: Added
novas_gmst()andnovas_gast()functions to calculate Greenwich Mean and Apparent (respectively) Sidereal Times for a given UT1 date. The new functions are meant to provide a cleaner, simpler alternative the old NOVAS Csidereal_time(). -
#215: New functions
novas_diurnal_eop(),novas_diurnal_ocean_tides()andnovas_diurnal_libration()to calculate corrections to the Earth orientation parameters published by IERS, to include the effect of libration and ocean tides. Such corrections are necessary if needing or using ITRS / TIRS coordinates with accuracy below the milli-arcsecond (mas) level. -
#217: New functions
novas_itrf_transform()andnovas_itrf_transform_eop()to enable transforming gecocentric xyz station coordinates, or Earth orientation parameters (EOP), between different ITRF realizations (e.g. ITRF2000 to ITRF2014). The implementation is based on Chapter 4 of the IERS Conventions 2010. -
#217: New functions
novas_geodetic_to_cartesian()andnovas_cartesian_to_geodetic()to convert between geocentric xyz station coordinates and geodetic (longitude, latitude, altitude) coordinates on the reference ellipsoid of choice, and vice versa. The latter function is adapted from the IERSGCONV2.Froutine. -
#221: Now supporting Mac OS X builds, which are different from the standard UNIX build, via GNU
makealso (in collaboration with @kiranshila). -
#222: CMake build support, e.g for Mac OS X or Windows builds also, with further tweaks in #228, #229, #230, #234, #235... (in collaboration with @kiranshila).
-
#223: New functions
novas_clock_skew()/novas_mean_clock_skew()to calculate the instantaneous or averaged (for Earth-bound observers) incremental rate, respectively, at which an observer's clock ticks faster than an astronomical timescale. All reference timescales, except UT1, are supported (see also #232 and #233). -
#239: New step-by-step approach to populate astrometric data for catalog sources, complementing the one-step
make_cat_entry(). Start withnovas_init_cat_entry()specifying the name and the R.A. / Dec coordinates, and then add more information as needed: set radial velocities withnovas_set_ssb_vel()/novas_set_lsr_vel()/novas_set_redshift(); set parallax or distance (if any) withnovas_set_parallax()ornovas_set_distance(); set proper motion (if any) withnovas_set_proper_motion(); or add catalog information withnovas_set_catalog(). -
#243: Added
novas_set_current_time()to set astrometric time based on the current system clock UNIX time. The new function makes a common use case more accessible, but you should make sure the system clock is well synchronized to a time reference (preferably a local one) for accuracy. -
#244: Added
novas_set_str_time()for convenience. It is the same as usingnovas_parse_date()followed bynovas_set_time()with error propagation in-between. -
#245: New
make_itrf_site(),make_gps_site(),make_xyz_site(),make_itrf_observer(),make_gps_observer(),make_observer_at_site()to facilitate the creation of sites / observers with GPS, ITRF or geocentric Cartesian (xyz) site coordinates. All of the above will also initialize default weather parameters for the location, based on simple global models of pressure scale height, annualized mean temperatures, and typical humidity values for the altitude. -
#245: New
novas_set_default_weather()to initialize default weather parameters for the location, based on simple global models of pressure scale height, annualized mean temperatures, and typical humidity values for the altitude. -
#246: New
novas_geodetic_transform_site()andnovas_itrf_transform_site()convenience functions to make it simpler to change the reference ellipsoid or the ITRF realization of anon_surfacedata structure, respectively.
Removed
-
#250: No longer including
CIO_RA.TXT(now unused) in the distribution. -
#252: Some build configuration options have been removed, such as the GNU make
BUILTIN_SOLSYS1,BUILTIN_SOLSYS2,BUILTIN_SOLSYS3,BUILTIN_SOLSYS_EPHEM,DEFAULT_SOLSYS, andDEFAULT_READEPHconfiguration options, or the CMakeBUILD_SOLSYS1/BUILD_SOLSYS2options.
Changed
-
#208:
cio_location()now always returns the CIO's right ascension relative to the true equinox of date (on the same true equator of date). -
#209:
novas_make_frame()calculatesgstandgcrs_to_cirsfields faster, using the already available frame quantities and thus eliminating duplicate calculations. -
#210: Speed up
iau2000a()andiau2000b()nutations by restricting the range of multiples that are iterated over. -
#212: Speed up
ee_ct()by restricting the range of multiples that are iterated over. Also reduced accuracy now uses the same series, only with fewer terms. -
#213: Rename a couple of source modules (
system.ctotransform.c, andcoords.ctosystem.c). -
#214: Reworked GCRS-CIRS transforms without
cio_basis()(IERS method 2). -
#217: Changed
terra()to use GRS80 reference ellipsoid insread of the IERS 2003 ellipsoid. ITRF uses the GRS80 ellipsoid. The change restores the original NOVAS C behaviour. -
#221: GitHub Actions CI now includes
Makefilebuilds and tests for Mac OS X. (by @kiranshila) -
#222: GitHub Actions CI now checks CMake build, for Linux, Mac OS X, FreeBSD, and Windows. (by @kiranshila)
-
#225: GNU
Makefilefixes for non-Linux builds, and FreeBSD build check in GitHub Actions CI. -
#231: The source code (including tests and examples) now uses platform-dependent file separator for improved portability to Windows.
-
#231: Changed documentation build to wean off the likes of
sedortail, thus allowing to build documentation in a more platform-independent way. -
#237: Both CMake and GNU make now install more developer docs into
$(docdir)/supernovas, such asexamples/,legacy/, source code, and markdown files. -
#241: Overhauled document generation. Non-GitHub markdown files are now in
doc/, which has its ownMakefileand CMake sub-configuration. -
#242: README edits and collapsible sections, as well as Github style highlighting of notes, warnings etc.
-
#249: Option to exclude deprecated API from
novas.hdefinitions for your application. Simply compile your application with-D_EXCLUDE_DEPRECATEDor else define_EXCLUDE_DEPRECATEDin your source before includingnovas.h. -
#250:
cio_array()is changed to calculate CIO locations vs GCRS on the fly. With the change SuperNOVAS does not use a CIO locator data file any more, for any purpose. The change also ensures complete internal consistency with the implemented standards, such as the precession-nutation model. -
#251: Added further CI checks via Github Actions.
-
#252: Overhauled how legacy
solarsystem()/solarsystem_hp()andreadeph()functions can be added to the build if needed, e.g. via externally provided sources at build time. If asolarsystem()/solarsystem_hp()module is not explicitly defined for the build,solsys3.cwill provide a default implementation for these. (No more undefined symbols that need to be resolved at runtime.) -
#255: More platform-independent code, by eliminating some UNIX specific calls. Windows builds with the Microsoft Visual C compiler are now possible also (with CMake).
-
#263: Use pthread mutexes instead of POSIX semaphores to provide thread-safe access to CALCEPH / CSPICE ephemeris data. POSIX semaphores are not supported on Windows and MacOS, whereas pthread is available on all (via wrapper library on Windows -- something that CMake is aware of).
-
#264: The likes of
novas_set_time()and full accuracynovas_make_frame()will automatically apply diurnal corrections for libration and ocean tides to the input EOP values. As such, users should supply mean (interpolated) UT1-UTC time differences and xp, yp pole offsets, e.g. directly from the IERS Bulletins. -
#264:
novas_timespecnow stores the TT-TDB conversion to the full (100 ns) precision. It's slightly slower than the less precise original NOVAStdb2tt(), but it's worth it not having to worry about the precision. -
#265: CALCEPH and CSPICE plugins to use portable mutex code.
-
#266: Add caching to
tt2tdb_hp()andnovas_moon_phase()functions. -
Both CMake and GNU make now install only the headers for the components that were built. E.g.
novas-calceph.his installed only if the library is built with the CALCEPH support option enabled. -
Renamed
equinox.ctoequator.c, since the functions therein concern the equator of date more than the equinox of date specifically. -
Moved a few functions around among the source modules to make the organization more consistent. It also helps when browsing the HTML documentation topically by source modules.
-
solarsystem.his moved tolegacywith non-legacy definitions and prototypes migrated tonovas.h. This has no downstream effect as all content ofsolarsystem.hwas already included innovas.h, and it relied on definitions innovas.h, s.t. i...
v1.4.2
Bug fix release with updated nutation models.
Fixed
-
#201: By default expect to find the CIO locator file (
CIO_RA.TXTorcio_ra.bin) in its install location, e.g. in/usr/share/supernovasor as set via thedatadirorprefixinstall locations. -
#202: The P03 recommended rescaling of the original IAU2000A nutation model to IAU2006 (see Coppola, Seago, and Vallado 2009) was not correctly implemented in the prior 1.4 releases. The resulting errors are around or below 40 μas for the present era, and slightly larger than the model discrepancies (~10 μas) that the rescaling was meant to address.
Changed
-
#206: Updated nutation models:
iau2000a()now uses IAU2000A R06 model coefficients (see https://hpiers.obspm.fr/eop-pc/models/nutations/nut.html), making it dynamically consistent with the IAU2006 (P03) precession model, which was already implemented by NOVAS and SuperNOVAS.iau2000b()is now a truncated version of the above, keeping terms with amplitude <100 μas, resulting in similar number of terms and precision as the original IAU2000B model. And,nu2000k()has been rescaled according to Coppola, Seago, & Vallado (2009) to also bring it in line with the IAU2006 (P03) precession model. -
make benchmarknow uses any user-definedCPPFLAGS, automatically adding theinclude/directory to it.
v1.4.1
Bug fix release.
Fixed
- #197: Fix reverse target order builds via
make --shuffle=reverse, which could also fail parallel builds in some cases. See also Debian Bug Tracker #1105702.
Changed
-
#199: Fixed typos in
README.md.(by @Asininite) -
Various improvements to documentation.
v1.4.0
Feature release, with critical bug fixes.
Fixed
-
#188: Critical bug in
novas_make_transform()since inception in v1.1. Compound transforms were calculated using matrix products in the wrong commutation order (successive transforms were multiplied from the right instead of from the left). Very embarrasing indeed, and somehow it went unnoticed with the testing suite also (even more embarrassing...). -
#183: IERS Earth orientation corrections set via
cel_pole()were not taken into account for true obliquity and the equation of equinoxes ine_tilt(). This was a bug since v1.0. The bug only affected the old (pre IAU 2006) ways of incorporating polar offsets into TOD coordinates, at the sub-arcsec level. Note, than even with the old method, it is now preferrable to apply such offsets withwobble()for the PEF / TIRS to ITRS (and reverse) conversions instead. -
#184: The frame based approach introduced in v1.1 has ommitted applying polar wobble corrections for transforming between the TIRS / PEF and ITRS, and vice versa. This resulted in an error at the sub-arcsec level for celestial to ITRS / horizontal (or reverse) calculations, when IERS Earth orientation parameters were explicitly set.
-
#187: The NOVAS C 3.1 implementation of
cel2ter()/ter2cel()was such that if bothxpandypparameters were zero, then no wobble correction was applied, not even for the TIO location (s') when converting between CIRS and ITRS. The error from this omission is very small, at just a few μas (micro-acrseconds) within a couple of centuries of J2000. -
#190: Reverse
wobble()(ITRS to TIRS/PEF) had wrong 2nd order corrections, resulting in negligible errors below 0.1 μas (micro-arcseconds) typically. -
#193: C++ namespace conflict in
novas_framedeclaration. Fixed by declaring and using named structure types instead of the conflictingtypedefaliases.
Added
-
#172: Added
novas_time_gst()andnovas_time_lst()convenience functions to calculate the Greenwich (apparent) Sidereal Time (GST / GaST) and Local (apparent) Sidereal Time (LST / LaST) for a given astrometric time (and observer location) more easily. -
#173: Added our own implementation of the wavelength-dependent IAU refraction model as
novas_wave_refraction(), which is based on the SOFAiauRefco()function. The wavelength for which the refraction is calculated can be set bynovas_refract_wavelength(). By default 550 nm (0.55 μm) is assumed. -
#176:
novas_make_planet_orbit()to generate Keplerian orbital elements for the major planets (sans Earth), and the Earth-Moon Barycenter (EMB), based on Standish & Williams 1992. In most cases such orbitals can provide arcmin-level precisions, especially for current dates. -
#176:
novas_make_moon_orbit()to generate geocentric Keplerian orbital elements for the Moon using the Chapront et al. 2002 model. -
#176:
novas_approx_heliocentric()andnovas_approx_sky_pos()to calculate approximate heliocentric ICRS and observable apparent positions, respectively, for the major planets (including Earth), and Moon and the Earth-Moon Barycenter, using the orbital models mentioned above. -
#176:
novas_moon_phase()andnovas_next_moon_phase()to calculate the Moon's apparent phase or the date/time when it reaches a specific phase, respectively, using the Keplerian orbitals for the E-M Barycenter by Standish & Williams 1992, and the geocentric orbitals of the Moon by Chapront et al. 2002. -
#176:
novas_orbital_native_posvel()to calculate orbital positions in the native system, in which the orbital is defined (e.g. ecliptic coordinates for planetary orbits). -
#177: Added
novas_day_of_week()andnovas_day_of_year()functions to convert JD dates to a 1-based day of week index, or to a day of the year in the calendar of choice. -
#185: Added
NOVAS_TIRSandNOVAS_ITRStoenum novas_reference_systems. All frame-based functions now support these. Legacyplace()and its variants support TIRS but not ITRS (because of the lack of information available to the legacy calls), while Keplerian orbitals may not be be defined in either TIRS or ITRS since these Earth co-rotating systems are not inertial systems. -
#186: Added
NOVAS_RADIO_REFRACTIONandNOVAS_WAVE_REFRACTIONtoenum novas_refraction_model, for referencing the Berman & Rockwell 1976 radio-wave model, or the IAU / SOFA wavelength-dependent model, respectively. -
#191: Added
tt2tdb_hp()(high-precision) andtt2tdb_fp()(flexible-precision) functions for calculating the TDB-TT time difference (in seconds), with up to 0.1 μs accuracy based on Fairhead & Bretagnon 1990. -
#194: Added documentation under
resources/for a side-by-side example comparison with astropy.
Changed
-
#173: Added parameter range checking to
refract()function andnovas_radio_refraction()model. If called with weather parameters or an elevation angle outside of reasonable values,NaNwill be returned anderrnowill be set toEINVAL. -
#181: Changed
nutation_angles()to apply P03 model rescaling to IAU2000 nutation angles to provide 'IAU2006' values (see Capitaine et al. 2005). The same rescaling has been adopted by SOFA also. (Correction: the implementation was botched, and the rescaling is also undesired for other reasons. Will fix for v1.4.2.) -
#186: Tweaked error handling in atmospheric refraction functions (in
refract.c). -
NOVAS_RMASS_INIT(innovas.h) and LG (intimescale.c) values updated with DE440 data (Park et al. 2021). -
Moved some functions around between source files.
Deprecated
- Deprecated
cel_pole()function andEPS_COR/PSI_CORglobal variables, which provided support for the old (now disfavored) way of incorporating Earth orientation parameters as corrections into the true equator and equinox of date. The preferred way to incorpotate Earth orientation corrections is to use dx,dy offsets relative to the IAU2006 precession-nutation model only when transforming between the Terrestrial Intermediate Reference System (TIRS) or Pseudo Earth-Fixed (PEF) system and the International Terrestrial Reference System (ITRS), and vice versa.
v1.3.1
Bug fix release with minor enhancements.
Fixed
-
#167: Fixes for Debian i386 cross builds.
-
#174:
accum_prec()had linear and quadratic time evolution coefficients swapped since v1.0. The bug affected
the IAU2000 precession-nutation calculations, and the calculation of the complementary terms in the equation of
equinoxes inee_ct()/e_tilt(). The effect however is small, typically just a few micro-arcseconds (μas),
for dates within a century of J2000.
Changed
-
#166: Improved detection of invalid seconds in
parse_degrees(). -
#169:
novas_parse_degrees()to support parsing values in exponential notation also, e.g.1.23E2,1.23E2Wetc. -
#170:
make_on_surface()to validate temperature and pressure values, and return -1 (witherrnoset toEINVAL)
if the supplied values are outside of the sensible range. -
#171: Cache
nutation_angles()instead ofe_tilt()to improve performance in more usage scenarios. (See updated
benchmarks). -
#171: Moved
precession(),nutation(), andnutation_angles()toequinox.c. -
#178:
novas_jd_to_date()to check if input calendar is valid and return -1 witherrnoset toEINVALif it is
not. -
#179:
novas_jd_from_date()to check if input calendar is valid and return NaN witherrnoset toEINVALif it
is not. -
Corrected benchmarks for individual frames.
-
Corrections and edits to API documentation.
Deprecated
-
Deprecated
ee_ct()andira_equinox()functions. Both are meant for internal use only, and need not be exposed to
users in general. -
Deprecated
solarsystem(),solarsystem_hp(), andreadeph()functions. These were prototypes for user-defined
implementations that had to be linked together with NOVAS. In SuperNOVAS, the same functionality can be (should be)
set dynamically, during runtime. Thus, these functions are provided to support building legacy NOVAS applications
only, and should be avoided in new application code going forward.
v1.3.0
Feature release with many new convenience functions, such as for handling times and angles as strings; calculating rise, set, transit times; and other common astrometric calculations. In addition, the release brings various changes to improve performance.
Fixed
-
#116:
transform_cat()to update parallax to the recalculated value when precessing or changing epochs. This was a SuperNOVAS bug since v.1.0. -
#128:
transform_cat()had insufficient string length checking ofout_idparameter. Prior to the fix it checked for the longer object name size instead of the catalog name size. However, even if longer than expected input names were left uncaught, only the appropriatre number of characters were used -- hence it broke nothing, only failed to remind the caller (with an error) when the supplied name was too long. -
#139: Legacy linking of external
solarsystem()/solarsystem_hp()provider modules was blocked bysolsys-ephem.cinadvertently definining these functions whenBUILTIN_SOLSYS_EPHEMwas set to 1 (default) during the build, even though it was not supposed to. -
#156:
obs_posvel()calledgeo_posvel()with TDB instead of TT. It less than a 2 ms difference, so not typically signifficant, unless <10-m level poitioning is required for Earth-orbiting satellites.
Added
-
#113: New
novas_frame_lst()convenience function to readily return the Local (apparent) Sidereal Time for a given Earth-based observing frame. -
#113: New
novas_hms_hours()andnovas_dms_degrees()convenience functions to make it easier to parse HMS or DMS based time or angle values, returning the result in units of hours or degrees, appropriately for use in SuperNOVAS. -
#113: New
novas_rises_above()andnovas_sets_below()functions to return the date/time a source rises above or sets below a specific elevation on a given date, andnovas_transit_time()to calculate the time a source transits over the local meridian. (For Earth-based observers only). #140, #146: Further fixes to these calculations after the v1.3.0-rc5 release candidate [thanks to @valeriy-sokoloff]. -
#113: New
novas_helio_dist()function to calculate the heliocentric distance of a Solar-system body on a given date. Thenovas_solar_power()function can be used to estimate the incident Solar power on a Solar-system body, whilenovas_solar_illum()can be used to calculate the fraction of a spherical body that is illuminated by the Sun seen from the observer location. -
#113: New
novas_hpa()andnovas_epa()functions to calculate the parallactic angle (a.k.a. vertical position angle) for a given location on sky, using the local horizontal coordinates, or else the equatorial position, respectively. The parallactic angle (PA) can be useful to convert local Cartesian offsets (e.g. from a flat image or detector array) between the local horizontal and equatorial orientations, e.g. via the newly addednovas_h2e_offset()ornovas_e2h_offset()functions. The conversion between offsets and absolute coordinates usually requires a WCS projections, such as described in Calabretta & Greisen 2002. -
#113: New
novas_sep(),novas_equ_sep(), andnovas_object_sep()functions can be used to calculate the precise apparent distance between to spherical or equatorial locations, or between two sources, respectively.novas_sun_angle()andnovas_moon_angle()can be used to calculate the apparent angular distance of sources from the Sun and Moon, respectively. -
#113: New
novas_observableandnovas_trackdata structures to provide second order Taylor series expansion of the apparent horizontal or equatorial positions, distances, and redshifts for sources. They can be calculated with the newly addednovas_hor_track()ornovas_equ_track()functions. Such tracking values, including rates and accelerations, can be directly useful for controlling telescope drives in horizontal or equatorial mounts to track sources (hence the name). You can also obtain instantaneous projected (extrapolated) positions from the tracking parameters vianovas_track_pos()at low computational cost. -
#113: New
novas_los_to_xyz()andnovas_xyz_to_los()functions to convert between line-of-sight (δφ, δθ, δr) vectors and rectangular equatorial (δx, δy, δz) vectors. -
#113: New
novas_xyz_to_uvw()andnovas_uvw_to_xzy()functions to convert between ITRS Earth locations (absolute or differential) to equatorial projections along a line of sight in the direction of a source. Such projections are oft used in interferometry. -
#114: New
novas_lsr_to_ssb_vel()can be used to convert velocity vectors referenced to the LSR to Solar-System Barycentric velocities. And,novas_ssb_to_lsr_vel()to provide the inverse conversion. -
#117: Added benchmarks under the
benchmark/folder, for SuperNOVAS as well as equivalent benchmarks for astropy. To run the SuperNOVAS benchmarks, simplymake benchmarkin the distribution directory. -
#118: New
novas_parse_date()/novas_parse_date_format()to parse date/time specifications,novas_parse_dms()andnovas_parse_hms()to return hours and degrees for HMS and DMS specifications, as well as the updated parse position. -
#118: New
novas_timescale_for_string()to match timescale constants to string representations, such as "UTC", or "TAI", andnovas_print_timescale()to convert to string representation. -
#118: New
novas_iso_timestamp()to print UTC timestamps in ISO date format with millisecond precision, andnovas_timestamp()to print timestamps in specific timescales. #151: Various fixes to new timestamping afterrc7. [thanks to @valeriy-sokoloff] -
#122: New
novas_jd_to_date(), andnovas_jd_from_date()which convert between JD day and calendar dates using the specific type of calendar: Gregorian, Roman/Julian, or the conventional calendar of date. -
#131: New
novas_date()andnovas_date_scale()for the simplest conversion of string times to Julian days, and in case of the latter also to a corresponding timescale (without returning a parse position). -
#133: New
novas_parse_timescale()to parse a timescale from a string specification, and return the updated parse position after also. -
#134: New
novas_parse_hours()andnovas_parse_degrees()to convert strings in decimal or HMS/DMS formats to floating point values for SuperNOVAS, and return the parse position after the time/angle specification. -
#135: New
novas_str_hours()andnovas_str_degrees()for the simplest conversion of strings in decimal or HMS/DMS formats to floating point values for SuperNOVAS (without retruning a parse position). -
#137: New
novas_epoch()to convert string coordinate system specifications to the Julian date of the corresponding epoch, and newmake_cat_object_sys()andmake_redshifted_object_sys()to make it simpler to define ICRS catalog sources in the coordinate system of choice. -
#143: Added
FORTIFYbuild configuration setting to enable gcc source code fortification checking by setting the_FORTIFY_SOURCEmacro to the specified value. It is now used with a value of 3 in the build and test CIs. -
#150: Further initializers for SuperNOVAS structures that can be used to empty initialize data.
-
#154: Added
novas_print_hms()andnovas_print_dms()functions to convert time / angles to their HMS/DMS string representations, with the chosen separators, and the desired decimal places on the seconds. -
#155: Added
novas_parse_iso_date()for pasing ISO 8601 timestamps, including those expressed in the proleptic Gregorian calendar prior to the Gregorian calendar reform of 1582, for which the ISO 8601 timestamp differs from the astronomical calendar date assumed bynovas_parse_timestamp(). -
Added
example-time.candexample-rise-set.cunderexamples/, for demonstrating date/time handling functions and rise, set, and transit time calculations.
Changed
-
#130 Use C99
restrictkeyword to prevent pointer argument aliasing. Modern compilers will warn if restricted pointer arguments are aliased. At the least, it is a hint to users that pointer arguments marked as such should be distinct from (not overlapping with) the other pointer arguments. -
#139 Reorganized code into more manageably sized modules. It also makes the API documentation by source file more logically organized.
-
#139: Legacy source code moved to
legacy/folder. -
#150: Use standard C initializers instead of the non-standard empty backets
{}. While the empty brackets have been OK withgccfor quite a while, they only became standard in C23. Other compilers might barf at their use. -
#152: For C++ compatibility do not use
classas a parameter name. [thanks to @valeriy-sokoloff] -
#156: Omit TDB-TT time difference, a maximum of 2 ms, in Earth tilt calculations, where it really does not make any difference. As a result some calculations are now faster than before.
-
#156: Higher precision time match requirement for re-using cached ephemeris calculations.
-
#156:
tt2tdb()now caches last calculation also. -
#156: Eliminate redundant caching of calculations. (Also in #158).
-
#156: Tighten
precession()time checking. -
#157: Switch to
iau2000b()as the low-precision nutation series. It is good to about 1 arcsec, which is the promised precision in reduced accuracy, but a lot faster than thenu2000k()series, which in turn is barely faster than the fulliau2000a()nutation series. -
#157:
fund_args()to always calculate full polynomial expansion. There is little performance to gain from the truncation we used in the vicinity of J2000. No real change in the results. -
#159: Add caching to
ee_ct(). Just in case someone wants to call...
v1.2.0 (rerelease)
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 inreadeph0.c, and the use ofDEFAULT_READEPHinconfig.mk.readeph0.cis not linked by default, and was not linked in prior releases either. -
Cure LLVM
clangcompiler warnings, in tests and examples also.
Added
-
#57: New generic redshift-handling functions
novas_v2z(),novas_z2v(). -
#57, #102: New
make_redshifted_cat_entry()andmake_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(), andnovas_z_inv(). -
#83: CALCEPH integration:
novas_use_calceph()and/ornovas_use_calceph_planets()to specify and use ephemeris data via CALCEPH for Solar-system sources in general, and for major planets specifically; andnovas_calceph_use_ids()to specify whetherobject.numberinNOVAS_EPHEM_OBJECTtype objects is a NAIF ID (default) or else a CALCEPH ID number of the Solar-system body. These functions are provided by thelibsolsys-calceph.so[.1]and/or.aplugin libraries, which are built contingent on theCALCEPH_SUPPORTvariable 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_OBJECTSshould use NAIF IDs with CSPICE (or else -1 for name-based lookup). Also providescspice_add_kernel()andcspice_remove_kernel()functions for convenience to manage the set of active kernels (#89). These functions are provided by thelibsolsys-cspice.so[.1]and/or.aplugin libraries, which are built contingent on theCSPICE_SUPPORTvariable 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 inversenaif_to_novas_planet(). -
Added
get_planet_provider()andget_planet_provider_hp()functions for convenience to return thesolarsystem()/solarsystem_hp()type custom planet ephemeris provider functions currently configured, so they may be used directly, outside ofephemeris()calls. -
#93: Now supporting
make installwithprefixandDESTDIRsupport (e.g.make prefix="/opt" installto install under/opt, and/ormake DESTDIR="/tmp/stage" installto 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.typecan now be set toNOVAS_ORBITAL_OBJECT, whose orbit can be defined by the set ofnovas_orbital, relative to anovas_orbital_system. You can initialize anobjectwith a set of orbital elements usingmake_orbital_object(), and for planetary satellite orbits you might usenovas_set_orbsys_pole(). For orbital objects,ephemeris()will call on the newnovas_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) andNOVAS_PLUTO_BARYCENTERtoenum novas_planetsto distinguish from the planet center in calculations. -
#98: Added
gcrs_to_tod()/tod_to_gcrs()andgcrs_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
objectinitializer macros innovas.hfor the major planets, Sun, Moon, and barycenters, e.g.NOVAS_EARTH_INITorNOVAS_SSB_INIT. These wrap the parametricNOVAS_PLANET_INIT(num, name)macro, and can be used to simplify the initialization of NOVASobjects. -
Added more physical unit constants to
novas.hand 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
Makefiletoo. -
Added 'Coordinate Systems and Conversions' flowchart to
README. -
Added a GNU standard documentation targets to
Makefile. -
Added
infermake target for running Facebook'sinferstatic analysis tool. -
Added missing error tracing in
nutation(). -
Added
README.mdFigure 1, to clarify relation of coordinate systems and (Super)NOVAS function to convert vectors among them.
Changed
-
#96: Changed
objectstructure to includenovas_orbitalforNOVAS_ORBITAL_OBJECTtypes. To keep ABI compatibility to earlier SuperNOVAS releases,make_object()will not initialize the new.orbitfield unlesstypeis set toNOVAS_ORBITAL_OBJECT(which was not available before). -
#97: Updated
NOVAS_PLANETS,NOVAS_PLANET_NAMES_INIT, andNOVAS_RMASS_INITmacros 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 checknow runs both static analysis by cppcheck (newanalysistarget) and regression tests (testtarget), in closer conformance to GNU Makefile standards. -
Added
-gto defaultCFLAGSas a matter of GNU best practice. -
Static library is now named
ibsupernovas.a, which is symlinked tolibnovas.afor back compatibility. -
readeph0.cmoved toexamples/. It's a dummy legacy NOVAS C implementation that is not really needed in SuperNOVAS. -
Various small tweaks to Makefiles.
-
Updated
README.mdand API documentation.
v1.1.1 (re-release)
Bug fix release. Nothing too scary, mainly just a collection of smaller fixes and improvements. The re-release addresses the excessive precision in tests, which caused testing failure on some platforms for the original #82 release. Otherwise, the library itself is identical to the earlier v1.1.1 release.
Fixed
-
#55: Relativistic corrections to radial velocity were still not applied correctly. The revised calculation now uses the actual relativistic velocity differential between the source and observer to apply the appropriate time dilation factor, and applies gravitational corrections for Sun and Earth consistently at source and observer alike.
-
#64:
NOVAS_TAI_TO_TTdefinition had wrong decimal in last place, thus was 3 ms off from what it should have been. (thanks to @kiranshila) -
#68:
readeph_dummy()dummy implementation inreadeph0.ccalled non existing error handler function.
Changed
-
#59: For observing major planets (and Sun and Moon)
rad_vel(),rad_vel2(),place(), andnovas_sky_pos()will include gravitational corrections to radial velocity for light originating at the surface, and observed near Earth or else at a large distance away. These corrections, along with those for the Solar potential at the source, may be skipped forrad_vel()/rad_vel2()by settingd_src_sunnegative. -
#55: Use relativistic formulae to add/difference velocities (i.e. change velocity reference frame).
-
#60: Moved SuperNOVAS-only functions to a separate
super.cmodule to alleviate the bloating ofnovas.c, which can still be used as a self-contained, standalone, NOVAS C replacement for legacy applications if need be. -
#62: Improve debug mode error tracing when NAN values are returned, so the trace indicates NAN rather than a bogus integer return value before.
-
#66: Various tweaks for C/C++ best practices (by @kiranshila)
-
#67: Use accuracy argument in
tod_to_cirs(). (thanks to @kiranshila) -
#68: Various improvements to debug error tracing.
-
#73: Initializer macros (primarily for internal use), forced 'use' of unused variables after declarations, and no order-only-dependencies in Makefiles -- in order to cure warnings and to conform with older compilers and make.
-
Slight tweaks to
Makefile, and.mksnippets, with addedmakeconfigurability.