Commit Graph

2245 Commits

Author SHA1 Message Date
Don Cross
32eac849da Minor tweaks to the gravsim_test program. 2021-11-12 19:32:09 -05:00
Don Cross
ae73f20788 Removed test code to create gravsim.log file. 2021-11-12 19:21:11 -05:00
Don Cross
4e6cb282f5 Use original Pluto gravsim with finer time steps.
I'm getting much better accuracy sticking with my original
gravity simulator, just with smaller time increments, than
I was with the Runge-Kutta 4 method. The PlutoStateTable
gets a bit larger (51 state vectors instead of 41), but the
accuracy is so much higher.

Removed the Runge-Kutta code because I won't be going back to it.
2021-11-12 16:22:14 -05:00
Don Cross
a5fd814ba1 Finished single-source-of-truth for Pluto constants.
The Pluto gravity simulator constants now come from
a single source: pluto_gravsim.h. This will allow me
to experiment with the Pluto state table to get a better
compromise between size and accuracy.
2021-11-12 15:30:56 -05:00
Don Cross
813bbf1c8e Pluto gravity sim: refactor constants for sharing.
Reworked the Pluto gravity sim constants so they are defined
in one place: a new header file gravsim/pluto_gravsim.h.
Then the code generator writes the #defines to the C code, instead
of having two independent versions of the same constants.
I will continue down the road of having a single-source-of-truth
for these constants across all 4 supported languages.

Also, confusingly, I had one constant called PLUTO_DT in codegen.c
that was called PLUTO_TIME_STEP in astronomy.c. Also, astronomy.c
had a different constant PLUTO_DT that didn't mean the same thing.
I reworked the naming to be consistent in all places.

I already had a TopPosition() function that knows how to calculate
exact equatorial coordinates, so I eliminated the redundant logic
from gravsim_test.c
2021-11-12 15:14:56 -05:00
Don Cross
dec8fd6f24 Hacked ctest to ignore Pluto calculation differences for now.
While I'm tinkering with Pluto gravsim algorithms in C,
I don't want to fail the unit tests that compare it against
the original gravsim algorithm in JavaScript, C#, and Python.
So I turned that part off for now. I will have to take this
back out when they are all unified again.
2021-11-11 21:46:05 -05:00
Don Cross
564d8d08b1 Improved GravSim accuracy using Runge-Kutta 4.
Significantly decreased the calculation error:
0.20 arcmin to 0.12 arcmin in my test metric.
However, the amount of extra work may not be
worth the accuracy, compared to just stepping more
increments between the segments, or simply making
more segments in the first place.

As they say in government-funded academia,
"more research is needed."
2021-11-11 21:05:33 -05:00
Don Cross
cc6a32bb98 Include the gravsim check in the unit tests.
I have gravsim_test.c to the point where it calculates a
standard deviation of error between TOP2013 and Astronomy Engine
for calculating the position of Pluto over 10 worst-case samples.
My baseline is now 0.205303 arcminutes of heliocentric position error.

For Runge-Kutta (or some other method) to be an improvement, it
has to beat that score without incurring significant extra work
or larger memory consumption.
2021-11-10 21:00:38 -05:00
Don Cross
1bebad6602 Compare Pluto calculations against original TOP2013 model.
I updated gravsim_test.c to calculate the Pluto model
at every (exact) state table entry, and every halfway point.
I compare it against (exact) TOP2013 calculations.
As expected, the errors alternate between 0 and nonzero.
2021-11-10 20:21:44 -05:00
Don Cross
3cbfada508 More concise gravsim debug output.
I'm interested in understanding drift error calculation
between the known-correct state waypoints for Pluto's orbit.
I'm trying to figure out whether there is some unintended
asymmetry between the forward calculation and the reverse
calculation. I will likely have to compare against TOP2013
data for the major planets, because I am using truncated
VSOP87, which also introduces position errors.

I should also validate TOP2013 versus VSOP87, both
untruncated, for Jupiter..Neptune, which they both cover.
2021-11-10 08:05:19 -05:00
Don Cross
52c7edb2b5 gravim: added more tests, fixed mistake in speed error calculation. 2021-11-10 06:16:51 -05:00
Don Cross
09d417bdee Added optional logging of Pluto state vectors and errors.
I'm trying to get a better feel for the amount of error
in my gravity simulator calculations for the movement of Pluto.
Added conditionally-compiled code to log state vectors calculated
in the forward and reverse time directions, along with the
exact endpoints that frame the interpolated values.
Also log errors measured between both directions.
There is a curious asymmetry in the first case I tried
(roughly the years 2000..2100), where the forward calculation
seems less accurate than the reverse calculation.
2021-11-10 05:56:54 -05:00
Don Cross
251f064a57 C Astronomy_Illumination: added missing error check.
For bodies other than the Sun, Moon, or Saturn, the
C function Astronomy_Illumination calls an internal function
VisualMagnitude. If VisualMagnitude is passed an invalid body,
it returns an error code. Astronomy_Illumination was not checking
for an error code.  In the case of being passed a pseudo-body
like BODY_SSB (the Solar System Barycenter) or BODY_EMB
(the Earth/Moon Barycenter), VisualMagnitude is called and
returns the error ASTRO_INVALID_BODY. Astronomy_Illumination was
ignoring the error and returning ASTRO_SUCCESS to the caller,
even though the magnitude was NAN (the "not a number" value).

Note that other invalid bodies than EMB and SSB would not
cause this problem, because the earlier call to HelioVector
would fail and be noticed.

I added unit tests that confirmed this bug, then made fixes
to the code so that the unit tests pass.

I confirmed this same problem does NOT exist in the Python,
JavaScript, or C# versions of Astronomy Engine. In all
the other languages, this case causes VisualMagnitude to
throw an exception, so no error checking is needed in the
Illumination functions.
2021-11-09 19:33:46 -05:00
Don Cross
a9b9652c5d Added sample Python program stars_near_moon.py.
Tonight as I was walking outside, I saw a fairly bright
star about half a degree away from the edge of the Moon.
I wondered what it was, so I decided to write a quick
program to find out.

This Python demo program scans the HYG Database
(https://github.com/astronexus/HYG-Database)
to find which bright stars are within a small angular
distance of the Moon, as seen at a given time, latitude, and longitude.

It turns out the star I saw was Nunki (Sigma Sagittarii).

It was handy to do vector subtraction to implement this program,
and it was trivial to do in the Python code's Vector class,
so I went ahead and added that.
2021-11-08 21:44:36 -05:00
Don Cross
3d899ab4f1 npm package 2.0.9 : security updates
These security updates do not affect users of Astronomy Engine.
They were flagged by Dependabot on GitHub to the steps
I use for building the TypeScript/JavaScript versions of
Astronomy Engine. The resulting code does not have any
external dependencies that need to be maintained.
npm_2.0.9
2021-11-05 22:07:26 -04:00
Don Cross
a341f1f14c Merge branch 'dependabot/npm_and_yarn/website/tar-6.1.11' 2021-11-05 21:58:32 -04:00
Don Cross
bffe119b76 Merge branch 'master' into dependabot/npm_and_yarn/website/tar-6.1.11 2021-11-05 21:49:07 -04:00
Don Cross
9d6dc441a5 Merge branch 'dependabot/npm_and_yarn/website/prismjs-1.25.0' 2021-11-05 21:47:04 -04:00
Don Cross
7da3b6cb8f Merge branch 'master' into dependabot/npm_and_yarn/website/prismjs-1.25.0 2021-11-05 21:37:47 -04:00
Don Cross
0d1d5c8626 Merge branch 'dependabot/npm_and_yarn/website/path-parse-1.0.7' 2021-11-05 21:36:42 -04:00
Don Cross
6ec07b146f Merge branch 'master' into dependabot/npm_and_yarn/website/path-parse-1.0.7 2021-11-05 21:27:34 -04:00
Don Cross
592fd6e48f Fixed lingering merge conflict markers in README.md. 2021-11-05 21:22:04 -04:00
dependabot[bot]
a3a5ea3df9 Bump tar from 6.1.0 to 6.1.11 in /website
Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.11.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.11)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-06 01:10:56 +00:00
dependabot[bot]
c3bac850bb Bump prismjs from 1.23.0 to 1.25.0 in /website
Bumps [prismjs](https://github.com/PrismJS/prism) from 1.23.0 to 1.25.0.
- [Release notes](https://github.com/PrismJS/prism/releases)
- [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PrismJS/prism/compare/v1.23.0...v1.25.0)

---
updated-dependencies:
- dependency-name: prismjs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-06 01:10:56 +00:00
dependabot[bot]
8f5128deb4 Bump path-parse from 1.0.6 to 1.0.7 in /website
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-06 01:10:51 +00:00
Don Cross
c667fcf336 npm package version 2.0.8 npm_2.0.8 2021-11-05 21:07:24 -04:00
Don Cross
45ea0ea113 Fixed #131 - Added phase_fraction in C, C#.
The C and C# Illumination functions now return
a `phase_fraction` result to complement `phase_angle`.
This makes them consistent with the Python and JavaScript
versions.
2021-11-05 20:27:58 -04:00
Don Cross
3f788aaaee Fixed #126 - Added support for lunar libration.
There is now a Libration function in all 4 supported languages.
The returned structure contains libration angles in
ecliptic latitude and ecliptic longitude, along with
the Moon's ecliptic position and distance.
Also included is the Moon's apparent angular diameter.
2021-11-05 19:14:46 -04:00
Don Cross
296f23af76 Libration functions now calculate apparent angular diameter of the Moon.
All 4 languages have added a `diam_deg` field to the
structure returned by the Libration function.
It is the apparent angular diameter of the Moon as
seen from the center of the Earth, expressed in degrees.
2021-11-05 16:02:14 -04:00
Don Cross
eab9c275b9 Implemented lunar libration function for JavaScript. 2021-11-05 14:46:56 -04:00
Don Cross
f1e9313054 Implemented libration in Python. 2021-11-04 15:44:03 -04:00
Don Cross
c72dd30ada C# Libration implemented
C# Libration(../../libration/mooninfo_2020.txt): PASS (8785 test cases, max_diff_elon = 0.12984487564674296 arcmin, max_diff_elat = 1.665274961400911 arcmin, max_diff_distance = 52.860241484013386)
C# Libration(../../libration/mooninfo_2021.txt): PASS (8760 test cases, max_diff_elon = 0.10404742496932684 arcmin, max_diff_elat = 1.6466732189634214 arcmin, max_diff_distance = 53.88185173016973)

C Libration(libration/mooninfo_2020.txt): PASS (8785 test cases, max_diff_elon = 0.1298 arcmin, max_diff_elat = 1.6653 arcmin, max_diff_distance = 52.860 km)
C Libration(libration/mooninfo_2021.txt): PASS (8760 test cases, max_diff_elon = 0.1040 arcmin, max_diff_elat = 1.6467 arcmin, max_diff_distance = 53.882 km)
2021-11-03 20:28:39 -04:00
Don Cross
395a6bb786 C Libration: Include Moon's position in the return value.
Because I have to perform the expensive calculation to find
the Moon's ecliptic coordinates, I might as well return them
to the caller. This could help reduce calculation overhead
for some uses, and doesn't add any significant cost.
2021-11-03 19:12:04 -04:00
Don Cross
308cb8899b C Libration: eliminated earth tilt calculation.
I could not measure a significant difference in calculation
accuracy from doing the expensive earth-tilt step.
I removed it to significantly speed up the calculation.
2021-11-03 16:21:38 -04:00
Don Cross
405a89fdf3 C Libration functions appear to be working.
Based on PJ Naughter's formulas at:
http://www.naughter.com/aa.html
2021-11-02 21:28:18 -04:00
Don Cross
6156be38ca Verify that astronomy.c can be built as C++.
I discovered that when I tried to build astronomy.c as C++ code,
I got several errors and warnings. So I fixed those issues and
added a C++ build-check to the unit tests.
2021-10-31 18:48:00 -04:00
Don Cross
d68dc629aa Verify that astronomy.c can be built as C++.
I discovered that when I tried to build astronomy.c as C++ code,
I got several errors and warnings. So I fixed those issues and
added the C++ build-check to the unit tests.
2021-10-31 16:19:07 -04:00
Don Cross
e268637828 Fixed warnings reported by gcc 11.2.0.
The newer gcc generates warnings when a function
is declared to take a sized array parameter, but the caller
passes an array of smaller dimension. In these cases, the
intention was to pass arrays of variable size, so I deleted
the specific array sizes.
2021-10-16 20:30:47 -04:00
Don Cross
adf65e1f1f Throw an exception for invalid refraction option.
In JavaScript and Python, throw an exception if provided
an invalid refraction option. Especially in JavaScript,
it was too easy to pass in a value like 'true', which did
not calculate refraction as expected.
2021-10-12 14:31:13 -04:00
Don Cross
d4890dba59 C LibrationTest: starting to implement unit test.
I don't have a libration function working yet, but this
is the beginning of the unit test for it. It just parses
an input file created by NASA.
2021-10-06 17:18:57 -04:00
Don Cross
9c4b6e9f87 Fixed pylint problems on Raspberry Pi.
The current Raspbian uses an older version of pylint
that suffers from a recursion overflow. Hacked a deeper
recursion limit to work around this issue.
Also directly calling 'pylint' does not work in Raspbian.
Instead of trying to figure out why, I just use 'python3 -m'
to invoke pylint.
2021-09-26 19:30:55 -04:00
Don Cross
25cba04356 Added pylint to unit tests. Fixed warnings. 2021-09-25 19:51:48 -04:00
Don Cross
6d4cb068c5 Implemented C# function SearchAltitude. npm_2.0.7 2021-09-23 15:44:06 -04:00
Don Cross
d3621e7206 Implemented Python function SearchAltitude. 2021-09-23 14:27:56 -04:00
Don Cross
4b64ceeb0d Implemented C function Astronomy_SearchAltitude. 2021-09-23 11:57:44 -04:00
Don Cross
42240288b0 JS SearchAltitude: improved documentation and parameter checking. 2021-09-23 10:43:20 -04:00
Don Cross
24571444d9 JS SearchAltitude implemented.
Refactored SearchRiseSet to create a new function
InternalSearchAltitude. SearchRiseSet calls InternalSearchAltitude,
and the new function SearchAltitude also cals InternalSearchAltitude.
This causes the code to be only a tiny big larger.
2021-09-22 19:45:33 -04:00
Don Cross
0038bbbc39 Started JS Twilight unit test.
This is the beginning of adding support for calculating
civil, nautical, and astronomical twilight (dawn/dusk).
Just added the stubbed unit test without the call in place
for the new function that will be added: SearchAltitude.
2021-09-22 17:24:21 -04:00
Don Cross
fb384d369e Work around inconsistent output from different doxygen versions.
I'm doing Astronomy Engine development from different
Debian versions (Buster and Bullseye). Buster installs
doxygen version 1.8.13, but Bullseye installs version 1.9.1.
These two versions of doxygen generate slightly different output
for function pointer typedefs: the older version adds an extra
space between the '*' and the defined type name.

I need the output to be exactly the same so that
the continuous integration tests don't see any changed
files in git after they finish running.

So I added an extra step in hydrogen.js (the code I wrote
that converts the doxygen output into markdown) to squash
multiple contiguous spaces into a single space in the
typedef output.
2021-09-19 21:40:01 -04:00
Don Cross
dc5bb5317b No longer assume typescript is installed globally.
The unit tests for the calendar.ts demo program
assumed that the 'tsc' typescript compiler was
installed globally. Redirect it to the typescript
installed in the 'generate' folder.

I could have just made typescript a dependency,
but it seemed wasteful of disk space to have two
copies of the same thing (it is currently 54MB).
2021-09-18 21:59:06 -04:00