satkit 0.13.0__tar.gz → 0.14.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. {satkit-0.13.0 → satkit-0.14.2}/Cargo.toml +2 -6
  2. {satkit-0.13.0/python/satkit.egg-info → satkit-0.14.2}/PKG-INFO +35 -2
  3. {satkit-0.13.0 → satkit-0.14.2}/README.md +34 -1
  4. {satkit-0.13.0 → satkit-0.14.2}/pyproject.toml +1 -1
  5. {satkit-0.13.0 → satkit-0.14.2}/python/Cargo.toml +2 -3
  6. {satkit-0.13.0 → satkit-0.14.2}/python/satkit/__init__.pyi +1 -0
  7. {satkit-0.13.0 → satkit-0.14.2}/python/satkit/density.pyi +35 -4
  8. {satkit-0.13.0 → satkit-0.14.2}/python/satkit/frametransform.pyi +269 -48
  9. {satkit-0.13.0 → satkit-0.14.2}/python/satkit/jplephem.pyi +7 -7
  10. {satkit-0.13.0 → satkit-0.14.2}/python/satkit/moon.pyi +27 -0
  11. {satkit-0.13.0 → satkit-0.14.2}/python/satkit/satkit.pyi +409 -322
  12. {satkit-0.13.0 → satkit-0.14.2}/python/satkit/sun.pyi +46 -1
  13. {satkit-0.13.0 → satkit-0.14.2}/python/satkit/utils.pyi +18 -18
  14. {satkit-0.13.0 → satkit-0.14.2/python/satkit.egg-info}/PKG-INFO +35 -2
  15. {satkit-0.13.0 → satkit-0.14.2}/python/satkit.egg-info/SOURCES.txt +2 -26
  16. {satkit-0.13.0 → satkit-0.14.2}/python/src/lib.rs +3 -0
  17. {satkit-0.13.0 → satkit-0.14.2}/python/src/pygravity.rs +5 -5
  18. {satkit-0.13.0 → satkit-0.14.2}/python/src/pyitrfcoord.rs +4 -4
  19. {satkit-0.13.0 → satkit-0.14.2}/python/src/pyjplephem.rs +5 -5
  20. satkit-0.14.2/python/src/pylambert.rs +80 -0
  21. {satkit-0.13.0 → satkit-0.14.2}/python/src/pypropagate.rs +3 -6
  22. {satkit-0.13.0 → satkit-0.14.2}/python/src/pypropresult.rs +10 -8
  23. {satkit-0.13.0 → satkit-0.14.2}/python/src/pyquaternion.rs +70 -48
  24. {satkit-0.13.0 → satkit-0.14.2}/python/src/pysatstate.rs +16 -16
  25. {satkit-0.13.0 → satkit-0.14.2}/python/src/pysgp4.rs +14 -14
  26. {satkit-0.13.0 → satkit-0.14.2}/python/src/pyutils.rs +11 -15
  27. {satkit-0.13.0 → satkit-0.14.2}/src/earthgravity.rs +29 -27
  28. {satkit-0.13.0 → satkit-0.14.2}/src/frametransform/ierstable.rs +5 -7
  29. {satkit-0.13.0 → satkit-0.14.2}/src/frametransform/mod.rs +22 -42
  30. {satkit-0.13.0 → satkit-0.14.2}/src/frametransform/qcirs2gcrs.rs +7 -8
  31. {satkit-0.13.0 → satkit-0.14.2}/src/itrfcoord.rs +19 -67
  32. {satkit-0.13.0 → satkit-0.14.2}/src/jplephem.rs +18 -13
  33. {satkit-0.13.0 → satkit-0.14.2}/src/kepler.rs +18 -18
  34. satkit-0.14.2/src/lambert.rs +574 -0
  35. {satkit-0.13.0 → satkit-0.14.2}/src/lib.rs +35 -12
  36. {satkit-0.13.0 → satkit-0.14.2}/src/lpephem/moon.rs +2 -2
  37. {satkit-0.13.0 → satkit-0.14.2}/src/lpephem/planets.rs +5 -5
  38. {satkit-0.13.0 → satkit-0.14.2}/src/lpephem/sun.rs +2 -2
  39. {satkit-0.13.0 → satkit-0.14.2}/src/mathtypes.rs +5 -7
  40. satkit-0.14.2/src/nrlmsise.rs +1319 -0
  41. {satkit-0.13.0 → satkit-0.14.2}/src/orbitprop/drag.rs +22 -23
  42. {satkit-0.13.0 → satkit-0.14.2}/src/orbitprop/point_gravity.rs +13 -13
  43. {satkit-0.13.0 → satkit-0.14.2}/src/orbitprop/propagator.rs +199 -139
  44. {satkit-0.13.0 → satkit-0.14.2}/src/orbitprop/satstate.rs +81 -81
  45. {satkit-0.13.0 → satkit-0.14.2}/src/sgp4/sgp4_impl.rs +17 -15
  46. {satkit-0.13.0 → satkit-0.14.2}/src/solar_cycle_forecast.rs +2 -2
  47. {satkit-0.13.0 → satkit-0.14.2}/src/spaceweather.rs +2 -2
  48. {satkit-0.13.0 → satkit-0.14.2}/src/time/duration.rs +14 -7
  49. {satkit-0.13.0 → satkit-0.14.2}/src/time/instant.rs +10 -17
  50. {satkit-0.13.0 → satkit-0.14.2}/src/time/instantparse.rs +133 -103
  51. {satkit-0.13.0 → satkit-0.14.2}/src/time/tests.rs +108 -4
  52. {satkit-0.13.0 → satkit-0.14.2}/src/time/timescale.rs +1 -1
  53. {satkit-0.13.0 → satkit-0.14.2}/src/tle/fitting.rs +11 -13
  54. {satkit-0.13.0 → satkit-0.14.2}/src/tle/mod.rs +4 -3
  55. satkit-0.13.0/extern/nrlmsise/nrlmsise-00.c +0 -1459
  56. satkit-0.13.0/extern/nrlmsise/nrlmsise-00.h +0 -222
  57. satkit-0.13.0/extern/nrlmsise/nrlmsise-00_data.c +0 -740
  58. satkit-0.13.0/src/filters/mod.rs +0 -1
  59. satkit-0.13.0/src/filters/ukf.rs +0 -245
  60. satkit-0.13.0/src/nrlmsise.rs +0 -192
  61. satkit-0.13.0/src/ode/adaptive_solvers/mod.rs +0 -28
  62. satkit-0.13.0/src/ode/adaptive_solvers/rkf45.rs +0 -76
  63. satkit-0.13.0/src/ode/adaptive_solvers/rkts54.rs +0 -119
  64. satkit-0.13.0/src/ode/adaptive_solvers/rkv65.rs +0 -33
  65. satkit-0.13.0/src/ode/adaptive_solvers/rkv65_table.rs +0 -192
  66. satkit-0.13.0/src/ode/adaptive_solvers/rkv87.rs +0 -39
  67. satkit-0.13.0/src/ode/adaptive_solvers/rkv87_table.rs +0 -563
  68. satkit-0.13.0/src/ode/adaptive_solvers/rkv98.rs +0 -39
  69. satkit-0.13.0/src/ode/adaptive_solvers/rkv98_efficient.rs +0 -3
  70. satkit-0.13.0/src/ode/adaptive_solvers/rkv98_efficient_table.rs +0 -151
  71. satkit-0.13.0/src/ode/adaptive_solvers/rkv98_nointerp.rs +0 -40
  72. satkit-0.13.0/src/ode/adaptive_solvers/rkv98_nointerp_table.rs +0 -349
  73. satkit-0.13.0/src/ode/mod.rs +0 -51
  74. satkit-0.13.0/src/ode/nalgebra_bindings.rs +0 -44
  75. satkit-0.13.0/src/ode/ode_tests.rs +0 -174
  76. satkit-0.13.0/src/ode/rk_adaptive.rs +0 -263
  77. satkit-0.13.0/src/ode/rk_adaptive_settings.rs +0 -33
  78. satkit-0.13.0/src/ode/rk_explicit.rs +0 -115
  79. satkit-0.13.0/src/ode/rodas4.rs +0 -59
  80. satkit-0.13.0/src/ode/rosenbrock.rs +0 -256
  81. satkit-0.13.0/src/ode/types.rs +0 -113
  82. {satkit-0.13.0 → satkit-0.14.2}/LICENSE +0 -0
  83. {satkit-0.13.0 → satkit-0.14.2}/MANIFEST.in +0 -0
  84. {satkit-0.13.0 → satkit-0.14.2}/python/build.rs +0 -0
  85. {satkit-0.13.0 → satkit-0.14.2}/python/satkit/__init__.py +0 -0
  86. {satkit-0.13.0 → satkit-0.14.2}/python/satkit/planets.pyi +0 -0
  87. {satkit-0.13.0 → satkit-0.14.2}/python/satkit/py.typed +0 -0
  88. {satkit-0.13.0 → satkit-0.14.2}/python/satkit.egg-info/dependency_links.txt +0 -0
  89. {satkit-0.13.0 → satkit-0.14.2}/python/satkit.egg-info/requires.txt +0 -0
  90. {satkit-0.13.0 → satkit-0.14.2}/python/satkit.egg-info/top_level.txt +0 -0
  91. {satkit-0.13.0 → satkit-0.14.2}/python/src/mod_utils.rs +0 -0
  92. {satkit-0.13.0 → satkit-0.14.2}/python/src/pyconsts.rs +0 -0
  93. {satkit-0.13.0 → satkit-0.14.2}/python/src/pydensity.rs +0 -0
  94. {satkit-0.13.0 → satkit-0.14.2}/python/src/pyduration.rs +0 -0
  95. {satkit-0.13.0 → satkit-0.14.2}/python/src/pyframes.rs +0 -0
  96. {satkit-0.13.0 → satkit-0.14.2}/python/src/pyframetransform.rs +0 -0
  97. {satkit-0.13.0 → satkit-0.14.2}/python/src/pyinstant.rs +0 -0
  98. {satkit-0.13.0 → satkit-0.14.2}/python/src/pykepler.rs +0 -0
  99. {satkit-0.13.0 → satkit-0.14.2}/python/src/pylpephem_moon.rs +0 -0
  100. {satkit-0.13.0 → satkit-0.14.2}/python/src/pylpephem_planets.rs +0 -0
  101. {satkit-0.13.0 → satkit-0.14.2}/python/src/pylpephem_sun.rs +0 -0
  102. {satkit-0.13.0 → satkit-0.14.2}/python/src/pympsuccess.rs +0 -0
  103. {satkit-0.13.0 → satkit-0.14.2}/python/src/pynrlmsise.rs +0 -0
  104. {satkit-0.13.0 → satkit-0.14.2}/python/src/pypropsettings.rs +0 -0
  105. {satkit-0.13.0 → satkit-0.14.2}/python/src/pysatproperties.rs +0 -0
  106. {satkit-0.13.0 → satkit-0.14.2}/python/src/pysolarsystem.rs +0 -0
  107. {satkit-0.13.0 → satkit-0.14.2}/python/src/pytle.rs +0 -0
  108. {satkit-0.13.0 → satkit-0.14.2}/python/src/pyukf.rs +0 -0
  109. {satkit-0.13.0 → satkit-0.14.2}/setup.cfg +0 -0
  110. {satkit-0.13.0 → satkit-0.14.2}/src/consts.rs +0 -0
  111. {satkit-0.13.0 → satkit-0.14.2}/src/earth_orientation_params.rs +0 -0
  112. {satkit-0.13.0 → satkit-0.14.2}/src/frames.rs +0 -0
  113. {satkit-0.13.0 → satkit-0.14.2}/src/lpephem/mod.rs +0 -0
  114. {satkit-0.13.0 → satkit-0.14.2}/src/omm/mod.rs +0 -0
  115. {satkit-0.13.0 → satkit-0.14.2}/src/omm/xml.rs +0 -0
  116. {satkit-0.13.0 → satkit-0.14.2}/src/orbitprop/mod.rs +0 -0
  117. {satkit-0.13.0 → satkit-0.14.2}/src/orbitprop/precomputed.rs +0 -0
  118. {satkit-0.13.0 → satkit-0.14.2}/src/orbitprop/satproperties.rs +0 -0
  119. {satkit-0.13.0 → satkit-0.14.2}/src/orbitprop/settings.rs +0 -0
  120. {satkit-0.13.0 → satkit-0.14.2}/src/sgp4/dpper.rs +0 -0
  121. {satkit-0.13.0 → satkit-0.14.2}/src/sgp4/dscom.rs +0 -0
  122. {satkit-0.13.0 → satkit-0.14.2}/src/sgp4/dsinit.rs +0 -0
  123. {satkit-0.13.0 → satkit-0.14.2}/src/sgp4/dspace.rs +0 -0
  124. {satkit-0.13.0 → satkit-0.14.2}/src/sgp4/getgravconst.rs +0 -0
  125. {satkit-0.13.0 → satkit-0.14.2}/src/sgp4/initl.rs +0 -0
  126. {satkit-0.13.0 → satkit-0.14.2}/src/sgp4/mod.rs +0 -0
  127. {satkit-0.13.0 → satkit-0.14.2}/src/sgp4/satrec.rs +0 -0
  128. {satkit-0.13.0 → satkit-0.14.2}/src/sgp4/sgp4_lowlevel.rs +0 -0
  129. {satkit-0.13.0 → satkit-0.14.2}/src/sgp4/sgp4init.rs +0 -0
  130. {satkit-0.13.0 → satkit-0.14.2}/src/solarsystem.rs +0 -0
  131. {satkit-0.13.0 → satkit-0.14.2}/src/time/chrono.rs +0 -0
  132. {satkit-0.13.0 → satkit-0.14.2}/src/time/instant_err.rs +0 -0
  133. {satkit-0.13.0 → satkit-0.14.2}/src/time/instant_ops.rs +0 -0
  134. {satkit-0.13.0 → satkit-0.14.2}/src/time/mod.rs +0 -0
  135. {satkit-0.13.0 → satkit-0.14.2}/src/time/timelike.rs +0 -0
  136. {satkit-0.13.0 → satkit-0.14.2}/src/time/weekday.rs +0 -0
  137. {satkit-0.13.0 → satkit-0.14.2}/src/utils/datadir.rs +0 -0
  138. {satkit-0.13.0 → satkit-0.14.2}/src/utils/download.rs +0 -0
  139. {satkit-0.13.0 → satkit-0.14.2}/src/utils/mod.rs +0 -0
  140. {satkit-0.13.0 → satkit-0.14.2}/src/utils/test.rs +0 -0
  141. {satkit-0.13.0 → satkit-0.14.2}/src/utils/update_data.rs +0 -0
@@ -3,7 +3,7 @@ members = [".", "python"]
3
3
 
4
4
  [package]
5
5
  name = "satkit"
6
- version = "0.13.0"
6
+ version = "0.14.2"
7
7
  edition = "2021"
8
8
  description = "Satellite Toolkit"
9
9
  readme = "README.md"
@@ -22,12 +22,9 @@ name = "satkit"
22
22
 
23
23
 
24
24
  [dependencies]
25
- nalgebra = { version = "0.34.0", features = ["serde-serialize"] }
26
- ndarray = "0.17.1"
27
- cty = "0.2.2"
25
+ numeris = { version = "0.5.6", features = ["serde", "estimate", "ode"] }
28
26
  num-traits = "0.2.19"
29
27
  thiserror = "2.0"
30
- once_cell = "1.21"
31
28
  ureq = "3.1.2"
32
29
  json = "0.12.4"
33
30
  process_path = "0.1.4"
@@ -41,7 +38,6 @@ rmpfit = "0.3.0"
41
38
  chrono = { version = "0.4", optional = true }
42
39
 
43
40
  [build-dependencies]
44
- cc = { version = "1.2", features = ["parallel"] }
45
41
  chrono = "0.4"
46
42
 
47
43
  [dev-dependencies]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: satkit
3
- Version: 0.13.0
3
+ Version: 0.14.2
4
4
  Summary: Satellite Orbital Dynamics Toolkit
5
5
  Author-email: Steven Michael <ssmichael@gmail.com>
6
6
  Maintainer-email: Steven Michael <ssmichael@gmail.com>
@@ -42,6 +42,9 @@ Satkit is a high-performance orbital mechanics library written in Rust with comp
42
42
 
43
43
  **[Documentation and tutorials](https://satkit.dev/)** (Python examples, but the concepts and API apply equally to Rust) | **[Rust API reference](https://docs.rs/satkit/)**
44
44
 
45
+ > [!NOTE]
46
+ > **Version 0.14.1** replaces `nalgebra` with [`numeris`](https://crates.io/crates/numeris) for all linear algebra (matrices, quaternions, ODE solvers). `numeris` is a standalone library that unifies these in a single crate, making them available to projects beyond satkit. Performance is equivalent, and all tests pass with matching residuals. If your code uses `nalgebra` types, enable the `nalgebra` feature on `numeris` for zero-cost conversions. Please open an issue if you hit any problems.
47
+
45
48
  ## Installation
46
49
 
47
50
  **Rust:**
@@ -165,6 +168,14 @@ Seamless conversion between UTC, TAI, TT, TDB, UT1, and GPS time scales with ful
165
168
  - Fast analytical Sun/Moon models for lower-precision work
166
169
  - Sunrise/sunset and Moon phase calculations
167
170
 
171
+ ### Linear Algebra
172
+
173
+ SatKit uses [numeris](https://crates.io/crates/numeris) for all linear algebra (vectors, matrices, quaternions, ODE integration). If you also use nalgebra in your project, enable the `nalgebra` feature on numeris for zero-cost `From`/`Into` conversions between types:
174
+
175
+ ```toml
176
+ numeris = { version = "0.5.5", features = ["nalgebra"] }
177
+ ```
178
+
168
179
  ### Cargo Features
169
180
 
170
181
  | Feature | Default | Description |
@@ -189,7 +200,29 @@ The library is validated against:
189
200
  - **ICGEM** reference values for gravity field calculations
190
201
  - **GPS SP3** precise ephemerides for multi-day numerical propagation
191
202
 
192
- 106 unit tests and 36 doc-tests run on every commit across Linux, macOS, and Windows.
203
+ 142 tests (106 unit + 36 doc-tests) run on every commit across Linux, macOS, and Windows.
204
+
205
+ ### Running Tests Locally
206
+
207
+ Tests require two sets of external data: the **astro-data** files (gravity models, ephemerides, etc.) and the **test vectors** (reference outputs for validation). Download both before running:
208
+
209
+ ```bash
210
+ # Install the download helper
211
+ pip install requests
212
+
213
+ # Download test vectors
214
+ python python/test/download_testvecs.py
215
+ ```
216
+
217
+ Then run tests with the environment variables pointing to the downloaded directories:
218
+
219
+ ```bash
220
+ # Rust tests
221
+ SATKIT_DATA=astro-data SATKIT_TESTVEC_ROOT=satkit-testvecs cargo test
222
+
223
+ # Python tests
224
+ SATKIT_DATA=astro-data SATKIT_TESTVEC_ROOT=satkit-testvecs pytest python/test/test.py
225
+ ```
193
226
 
194
227
  ## Documentation
195
228
 
@@ -18,6 +18,9 @@ Satkit is a high-performance orbital mechanics library written in Rust with comp
18
18
 
19
19
  **[Documentation and tutorials](https://satkit.dev/)** (Python examples, but the concepts and API apply equally to Rust) | **[Rust API reference](https://docs.rs/satkit/)**
20
20
 
21
+ > [!NOTE]
22
+ > **Version 0.14.1** replaces `nalgebra` with [`numeris`](https://crates.io/crates/numeris) for all linear algebra (matrices, quaternions, ODE solvers). `numeris` is a standalone library that unifies these in a single crate, making them available to projects beyond satkit. Performance is equivalent, and all tests pass with matching residuals. If your code uses `nalgebra` types, enable the `nalgebra` feature on `numeris` for zero-cost conversions. Please open an issue if you hit any problems.
23
+
21
24
  ## Installation
22
25
 
23
26
  **Rust:**
@@ -141,6 +144,14 @@ Seamless conversion between UTC, TAI, TT, TDB, UT1, and GPS time scales with ful
141
144
  - Fast analytical Sun/Moon models for lower-precision work
142
145
  - Sunrise/sunset and Moon phase calculations
143
146
 
147
+ ### Linear Algebra
148
+
149
+ SatKit uses [numeris](https://crates.io/crates/numeris) for all linear algebra (vectors, matrices, quaternions, ODE integration). If you also use nalgebra in your project, enable the `nalgebra` feature on numeris for zero-cost `From`/`Into` conversions between types:
150
+
151
+ ```toml
152
+ numeris = { version = "0.5.5", features = ["nalgebra"] }
153
+ ```
154
+
144
155
  ### Cargo Features
145
156
 
146
157
  | Feature | Default | Description |
@@ -165,7 +176,29 @@ The library is validated against:
165
176
  - **ICGEM** reference values for gravity field calculations
166
177
  - **GPS SP3** precise ephemerides for multi-day numerical propagation
167
178
 
168
- 106 unit tests and 36 doc-tests run on every commit across Linux, macOS, and Windows.
179
+ 142 tests (106 unit + 36 doc-tests) run on every commit across Linux, macOS, and Windows.
180
+
181
+ ### Running Tests Locally
182
+
183
+ Tests require two sets of external data: the **astro-data** files (gravity models, ephemerides, etc.) and the **test vectors** (reference outputs for validation). Download both before running:
184
+
185
+ ```bash
186
+ # Install the download helper
187
+ pip install requests
188
+
189
+ # Download test vectors
190
+ python python/test/download_testvecs.py
191
+ ```
192
+
193
+ Then run tests with the environment variables pointing to the downloaded directories:
194
+
195
+ ```bash
196
+ # Rust tests
197
+ SATKIT_DATA=astro-data SATKIT_TESTVEC_ROOT=satkit-testvecs cargo test
198
+
199
+ # Python tests
200
+ SATKIT_DATA=astro-data SATKIT_TESTVEC_ROOT=satkit-testvecs pytest python/test/test.py
201
+ ```
169
202
 
170
203
  ## Documentation
171
204
 
@@ -9,7 +9,7 @@ requires-python = ">= 3.10"
9
9
  authors = [{ name = "Steven Michael", email = "ssmichael@gmail.com" }]
10
10
  maintainers = [{ name = "Steven Michael", email = "ssmichael@gmail.com" }]
11
11
  readme = "README.md"
12
- version = "0.13.0"
12
+ version = "0.14.2"
13
13
  license = "MIT"
14
14
  description = "Satellite Orbital Dynamics Toolkit"
15
15
  keywords = [
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "satkit-python"
3
- version = "0.13.0"
3
+ version = "0.14.2"
4
4
  edition = "2021"
5
5
  publish = false
6
6
 
@@ -12,8 +12,7 @@ crate-type = ["cdylib"]
12
12
  satkit = { path = ".." }
13
13
  pyo3 = { version = "0.28.2", features = ["extension-module", "anyhow"] }
14
14
  numpy = "0.28"
15
- nalgebra = "0.34.0"
16
- ndarray = "0.17.1"
15
+ numeris = { version = "0.5.6", features = ["serde", "estimate"] }
17
16
  anyhow = "1"
18
17
  serde = { version = "1.0", features = ["derive"] }
19
18
  serde-pickle = "1.2.0"
@@ -32,6 +32,7 @@ __all__ = [
32
32
  "planets",
33
33
  "satstate",
34
34
  "propagate",
35
+ "lambert",
35
36
  "propsettings",
36
37
  "integrator",
37
38
  "satproperties_static",
@@ -16,10 +16,10 @@ def nrlmsise(itrf: satkit.itrfcoord, time: satkit.time | None) -> tuple[float, f
16
16
  """
17
17
  NRL MSISE-00 Atmosphere Density Model
18
18
 
19
- https://en.wikipedia.org/wiki/NRLMSISE-00
19
+ <https://en.wikipedia.org/wiki/NRLMSISE-00>
20
20
 
21
21
  or for more detail:
22
- https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2002JA009430
22
+ <https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2002JA009430>
23
23
 
24
24
  Args:
25
25
 
@@ -53,10 +53,10 @@ def nrlmsise(
53
53
  """
54
54
  NRL MSISE-00 Atmosphere Density Model
55
55
 
56
- https://en.wikipedia.org/wiki/NRLMSISE-00
56
+ <https://en.wikipedia.org/wiki/NRLMSISE-00>
57
57
 
58
58
  or for more detail:
59
- https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2002JA009430
59
+ <https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2002JA009430>
60
60
 
61
61
  Args:
62
62
  altitude_meters (float): Altitude in meters
@@ -71,3 +71,34 @@ def nrlmsise(
71
71
  tuple: (rho, T) where rho is mass density in kg/m^3 and T is temperature in Kelvin
72
72
  """
73
73
  ...
74
+
75
+ def nrlmsise(*args, **kwargs):
76
+ """
77
+ NRL MSISE-00 Atmosphere Density Model
78
+
79
+ <https://en.wikipedia.org/wiki/NRLMSISE-00>
80
+
81
+ or for more detail:
82
+ <https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2002JA009430>
83
+
84
+ Args:
85
+
86
+ itrf (satkit.itrfcoord): position at which to compute density & temperature
87
+ time (satkit.time|numpy.ndarray|list): Optional instant(s) at which to compute density & temperature.
88
+ "Space weather" data at this time will be used in model
89
+ computation. Note: at satellite altitudes, density can
90
+ change by > 10 X depending on solar cycle
91
+
92
+ Returns:
93
+ (rho, T) where rho is mass density in kg/m^3 and T is temperature in Kelvin
94
+
95
+ Example:
96
+ ```python
97
+ t = satkit.time(2024, 1, 1)
98
+ coord = satkit.itrfcoord(latitude_deg=0, longitude_deg=0, altitude=400e3)
99
+ rho, temp = satkit.density.nrlmsise(coord, t)
100
+ print(f"Density: {rho:.2e} kg/m^3")
101
+ print(f"Temperature: {temp:.1f} K")
102
+ ```
103
+ """
104
+ ...