Commit Graph

1055 Commits

Author SHA1 Message Date
Don Cross
53b4b33958 Kotlin searchMoonPhase: allow searching backward in time.
Enhanced the Kotlin function searchMoonPhase
to allow searching forward in time when the `limitDays`
argument is positive, or backward in time when `limitDays`
is negative.

Added unit test "moon_reverse" to verify this new feature.
2022-09-26 22:07:47 -04:00
Don Cross
3bed4a9bdc PY SearchMoonPhase: allow searching backward in time.
Enhanced the Python function SearchMoonPhase
to allow searching forward in time when the `limitDays`
argument is positive, or backward in time when `limitDays`
is negative.

Added unit test "moon_reverse" to verify this new feature.
2022-09-26 21:08:37 -04:00
Don Cross
424b267007 JS SearchMoonPhase: allow searching backward in time.
Enhanced the JavaScript function Astronomy.SearchMoonPhase
to allow searching forward in time when the `limitDays`
argument is positive, or backward in time when `limitDays`
is negative.

Added unit test "moon_reverse" to verify this new feature.
2022-09-26 20:25:35 -04:00
Don Cross
c6f0561363 C# SearchMoonPhase: allow searching backward in time.
Enhanced the C# function Astronomy.SearchMoonPhase
to allow searching forward in time when the `limitDays`
argument is positive, or backward in time when `limitDays`
is negative.

Added unit test "moon_reverse" to verify this new feature.
2022-09-26 19:34:22 -04:00
Don Cross
1718da47e4 C SearchMoonPhase: allow searching backward in time.
Enhanced the C function Astronomy_SearchMoonPhase
to allow searching forward in time when the `limitDays`
argument is positive, or backward in time when `limitDays`
is negative.

Added unit test "moon_reverse" to verify this new feature.
2022-09-26 18:56:58 -04:00
Don Cross
fc21b4c0f1 Prevent use of -Ofast optimization in gcc.
The C version of Astronomy Engine does not work correctly
when gcc "fast math" optimizations are enabled.
The problem is that Astronomy Engine uses NAN values to
represent invalid/uninitialized floating point numbers.
The -Ofast option breaks the ability of the runtime to
check for NAN values, resulting in multiple failures
and incorrect behaviors at runtime.

Added a compile-time check for the __FAST_MATH__ preprocessor
symbol, which gcc defines to signal that the optimization
was enabled. If detected, this results in a compiler error
to make it obvious that something is wrong before invalid
code would be executed.

This is not an ideal fix for two reasons:

1. I don't know if this will detect similar problems for
   other compilers than gcc.

2. If individual risky math optimizations are enabled, instead
   of the combination of options included in -Ofast, the
   __FAST_MATH__ preprocessor symbol will not be defined
   and no compiler error will occur. I could not find a
   way to detect individual risky optimizations.

However, this change is much better than nothing, and
hopefully it will prevent most cases of overly-aggressive
optimization.
2022-09-22 11:28:56 -04:00
Don Cross
18a0c5613d Increase JVM memory allowance for Gradle.
I encountered a build/test failure in the Kotlin
code due to the JVM running out of memory.
I configured gradle to allow using more memory:
1GB instead of the default 256MB.
2022-09-22 11:08:40 -04:00
Don Cross
d21ce79976 Updated version number to 2.1.3. 2022-09-22 10:25:47 -04:00
Don Cross
e9cf2a0417 Python: changed true to True in documentation.
There were two places in the Python documentation
where I wrote `true` instead of `True` for the
boolean literal. These have been fixed.
2022-09-10 19:13:53 -04:00
Don Cross
afd6f4835f Kotlin: reworked VSOP model selector as a function. 2022-09-10 16:20:03 -04:00
Ebrahim Byagowi
8ed7de7923 Resolve cyclic dependency of Body.vsopModel
Definition of vsopModel constant on Body enum items constructors
makes cyclic dependency with constants defined later in the code
and makes application crash when things are not initiated in the
correct order.

This fixes the issue by turning vsopModel into a property which
will have almost the same internal API for the rest of the code
and resolves crashes I'm getting when certain part of my app
is initiated sooner than usual.
2022-09-10 14:31:40 +04:30
Don Cross
f187bc3e22 Fixed mistake in Python enum for not correcting refraction.
GitHub user `hidp123` submitted the following pull request:
https://github.com/cosinekitty/astronomy/pull/240

The problem was I had documentation for the Python enum
`Refraction` where I incorrectly wrote `Refraction.None`
instead of the correct name `Refraction.Airless`.

The fix in the pull request was correct, but it was
applied to generated source code, so it did not correctly
update the template file or the online documentation.

This commit fixes the mistake in all the affected files.
2022-09-07 18:39:31 -04:00
Don Cross
a1c3f6be52 JS documentation: sort functions alphabetically.
The JavaScript functions were appearing in unsorted
order in the markdown documentation.
The `jsdoc2md` tool does not have an option for sorting them.
So I wrote a new script `sort_js_functions.py` that post-
processes the markdown to sort the functions.
2022-07-21 17:36:17 -04:00
Don Cross
e187707412 Patch version numbers using a Python program.
It turns out that "sed" does not work on Mac OS,
and I wasn't even trying to patch the version
numbers on Windows. I decided to write a Python
program for this task, so it will work identically
on all 3 operating systems.
2022-06-05 15:03:02 -04:00
Don Cross
1e9f1a7b05 Automatically patch version number.
Added a new file generate/version.txt that contains
the current Astronomy Engine version number.
Now when I run the build/test process, the version
number is patched in all the places it needs to
be changed to keep all the packages and documentation
up to date.

This means when I want to change the Astronomy Engine
version number, I just need to edit version.txt, then
execute the generate/run script.
2022-06-05 14:07:32 -04:00
Don Cross
2a1abad0d5 Better use of package badges/links.
Provide shield.io badges for pypi, npm, and nuget packages.
On the main README page, moved the badges into the supported
languages grid.
Added link and badge on each language documentation page.
2022-06-05 12:42:00 -04:00
Don Cross
6425e4ef11 C#: More benefits from using netstandard2.0.
Now that I have retargeted astronomy.csproj from
net5.0 to netstandard2.0, there are a couple of
other little improvements that are now possible:

1. In my manual Framework 4 test project, instead
   of directly pulling in the source file astronomy.cs,
   add astronomy.csproj as a project reference.
   This demonstrates that the same binary astronomy.dll
   works in both Framework and Core.

2. Now there is no need/use for conditional compilation
   directives in the Astronomy.CubeRoot function.
   Instead, always use my own implementation since the
   Math.Cbrt function is never available.
   From a testing standpoint, this was probably
   the better option all along.
2022-06-05 10:07:35 -04:00
Don Cross
f3b273a973 First attempt at C# NuGet package.
https://www.nuget.org/packages/CosineKitty.AstronomyEngine/2.1.2

This is my first attempt at publishing a NuGet package.
I have never done this before, so I'm not sure it is going to work.
Changed astronomy.csproj to target netstandard2.0, which still
works fine with all my net6.0 unit tests.
2022-06-04 22:01:36 -04:00
Don Cross
476fb794c4 Fixed #217 - generic light travel correction.
Bumped version to 2.1.2.
2022-06-01 20:21:19 -04:00
Don Cross
b7979cb7a0 Light travel correction: improved documentation. 2022-06-01 19:25:48 -04:00
Don Cross
5e7162f08d GeoVector must return observation time.
Fixed 3 of the language implementations where I forgot
to make GeoVector return the observation time, not the
backdated time. This is important to preserve existing
behavior.
2022-05-31 21:26:03 -04:00
Don Cross
409451b3c2 Kotlin: light travel time correction. 2022-05-31 20:52:41 -04:00
Don Cross
9afbf0a67f Python: generalized light-travel correction. 2022-05-30 21:37:19 -04:00
Don Cross
765c39d3fa JS: generalized light-travel time correction. 2022-05-30 19:27:25 -04:00
Don Cross
03a0543688 C# light travel: memory allocation optimization
Changed BodyPosition from a class to a struct,
to reduce memory allocation overhead on every
call to GeoVector.
2022-05-30 16:40:47 -04:00
Don Cross
0dd66c8981 C# light travel time correction
Implemented the generalized light travel time corrector for C#.
Reworked Astronomy.GeoVector to use it.
2022-05-29 21:17:25 -04:00
Don Cross
384b5eba96 C light travel time correction
Implemented two new C functions for generic correction
of light travel time:

1. Astronomy_CorrectLightTravel
   This is a completely generic solver that is passed
   a pointer to a function that returns a relative
   position vector for a given time.
   The generic solver keeps calling the function
   whose address is passed, until the light travel
   solution converges. This usually takes 3 or 4 iterations.

2. Astronomy_BackdatePosition
   This is a more specific solver that uses Astronomy_CorrectLightTravel
   to backdate the position of a target body as seen from an
   observer body at a specified observation time.
   It implements the aberration option needed by Astronomy_HelioVector.
   Astronomy_HelioVector now uses Astronomy_BackdatePosition,
   instead of having a redundant light travel solver,
   so the code isn't much larger than it was before.
2022-05-29 18:05:08 -04:00
Don Cross
b4f485eecc Bumped version to 2.1.1. 2022-05-25 21:37:10 -04:00
Don Cross
1902c87828 Merge branch 'gravsim'
Bringing the gravity simulator code into the master branch.
2022-05-25 20:45:20 -04:00
Don Cross
f94824a810 Fixed missing doc for C# GravititySimulator constructor.
The csdown utility was not generating the correct ID
string that matched the C# compiler's XML output file
when a parameter was of a generic type.

Because the GravitySimulator constructor has a bodyStates
parameter of type IEnumerable<StateVector>, we were not
generating the correct method ID string:

CosineKitty.GravitySimulator.#ctor(CosineKitty.Body,CosineKitty.AstroTime,System.Collections.Generic.IEnumerable{CosineKitty.StateVector})

This caused the constructor to not show up in the markdown docs.
I fixed this and now the constructor is documented.
2022-05-25 20:07:16 -04:00
Don Cross
edc27d550a C# docs: fixed link to StateVector[]. 2022-05-25 19:39:07 -04:00
Don Cross
137fc5ce7b Python docs: better formatting of return values. 2022-05-25 17:23:41 -04:00
Don Cross
f02658d63c More documentation fixes.
Corrected a mistake in the explanation of the
C function Astronomy_GravSimInit: the `bodyStates`
parameter is NOT barycentric -- it is relative to the
originBody parameter.

Python had improperly formatted documentation for
Time.FromTerrestrialTime parameter `tt`.

The Python markdown generator `pydown` did not
correctly handle links to compound symbols like
`#GravitySimulator.Update`. It also was trying
to link to `StateVector[]` instead of `StateVector`.

Removed unnecessary and unhelpful documentation
for C# internal class constructors. They do not appear
in the generated markdown documentation anyway.

Other minor wording revisions in the documentation.
2022-05-25 14:12:55 -04:00
Don Cross
4cd03e9a5f C# documentation generator fixes
The C# markdown generator (csdown) was not generating
documentation about constructors. This was especially
needed for the new GravitySimulator class.

Also added markdown for properties like
    GravitySimulator.NumSmallBodies
    GravitySimulator.Time

Made several constructors internal so they don't
need to be listed in the markdown docs.
2022-05-24 21:51:07 -04:00
Don Cross
9c65a27eb1 Improved documentation for gravity simulator.
Added mention of the gravity simulator in the topic
index sections of the markdown docs.
Slight wording changes here and there.
2022-05-23 21:54:00 -04:00
Don Cross
17d42e8119 C#: Provide cube root for .NET Framework.
C# builds for .NET Framework 4 were broken because
the Math.Cbrt function does not exist there.
.NET Core provides a standard cube root function,
but Framework doesn't. Added conditional compilation
to fall back to a less efficient substitute function
on Framework builds.
2022-05-23 20:21:17 -04:00
Don Cross
d28f5ecff3 PY gravsim: passes unit tests
The Python version of the GravitySimulator class
is now passing all unit tests. This completes
the initial coding. I still need to review
documentation across all the language implementations.
2022-05-22 21:16:58 -04:00
Don Cross
4303137c0a PY gravsim: initial coding completed
Finished coding the Python version of the gravity simulator.
No unit tests have been written yet.
Cleaned up documentation in the other languages.
Made some functions static that did not need to be members.
2022-05-22 09:41:44 -04:00
Don Cross
68f118587d PY gravim: work in progress.
Started implementation of the Python gravity simulator.
Updated the `pydown` markdown generator to include
class constructors `__init__` when they contain docstrings.
2022-05-21 23:23:29 -04:00
Don Cross
94589693f5 JS gravsim: finished unit tests, fixed bug
The JavaScript version of the gravity simulator is
now working. I had one bug in the acceleration formula.
Finished the unit tests and also streamlined them a little.
2022-05-19 09:49:37 -04:00
Don Cross
b9db79c6fd JS gravsim: partial completion of unit tests
Implemented half of the GravitySimulator unit tests.
Fixed a bug in the GravitySimulator constructor.

Did some refactoring of test.js:

- Wrote Debug() function as shortcut for conditional output.
- Created generic JPL Horizons state file reader.
2022-05-18 21:14:49 -04:00
Don Cross
26575066fc JS gravsim: work in progress.
Mostly coded, but unit tests not written yet.
2022-05-18 19:52:11 -04:00
Don Cross
f014d13910 C# gravsim: finished implementation.
Unit tests are complete and verified for the C# gravity simulator.
I found and fixed one bug in the GravitySimulator constructor.
2022-05-17 17:20:30 -04:00
Don Cross
019a8f51d4 C# gravsim: first draft of GravitySimulator.Update
Wrote the C# version of GravitySimulator.Update.
Not yet tested.
2022-05-17 15:12:53 -04:00
Don Cross
6a5d04b825 C# gravsim: work in progress
Starting the C# version of class GravitySimulator.
There are no unit tests for it yet.

Added a fix to the C# markdown generator `csdown`
to show `void` as a function return type.
This is the first time I have had any function
in the C# version of Astronomy Engine that has
a void return type!

Fixed and improved documentation in the Kotlin version
of the gravity simulator. Fixed some comments too.
2022-05-17 10:31:42 -04:00
Don Cross
3b98143d52 Forgot to add change to C documentation. 2022-05-16 08:57:16 -04:00
Don Cross
f40b96c237 Kotlin gravsim: finished unit tests.
The Kotlin version of class GravitySimulator is working.
Finished the same unit tests that are present in the C
version of the gravity simulator.
2022-05-15 21:44:22 -04:00
Don Cross
28698cdd6b Kotlin gravsim: some unit tests passing. 2022-05-15 21:08:04 -04:00
Don Cross
b30a54587f Kotlin gravsim: more work in progress.
Added the function GravitySimulator.update().
Not yet tested.
2022-05-15 17:28:18 -04:00
Don Cross
efb59436c1 Kotlin gravsim: work in progress
Started implementing class GravitySimulator,
but it is not finished yet.
2022-05-15 05:02:38 -04:00