UNPKG

keplerian-core

Version:

High-performance TypeScript library for orbital mechanics calculations, providing numerical integration, state propagation, and perturbation modeling for Keplerian orbits.

120 lines (90 loc) 5.11 kB
# Keplerian Core `keplerian-core` is a foundational npm package that provides the core physics calculations for simulating orbital mechanics, specifically focusing on the two-body problem with various numerical integrators and force models. It is designed to be a robust and extensible library for educational and research purposes in computational physics and astrodynamics. ## Installation To use `keplerian-core` in your project, you can install it via npm: ```bash npm install keplerian-core ``` ## Usage The primary function for simulating orbital mechanics is `simulate`, which takes initial conditions and simulation parameters to generate a series of orbital states over time. ### `simulate` Function ```typescript import { simulate } from './src/simulation'; import { InitialConditions, SimulationParams, OrbitalState } from './src/types/physics'; const initialConditions: InitialConditions = { position: { x: 149.6e9, y: 0 }, // Example: Earth's initial position (1 AU) velocity: { x: 0, y: 29780 } // Example: Earth's initial velocity }; const simulationParams: SimulationParams = { gravitationalConstant: 6.67430e-11, // Universal Gravitational Constant centralMass: 1.989e30, // Mass of the central body (e.g., Sun) orbitingMass: 5.972e24, // Mass of the orbiting body (e.g., Earth) timeStep: 3600, // Time step for integration in seconds (e.g., 1 hour) totalTime: 365 * 24 * 3600, // Total simulation time in seconds (e.g., 1 Earth year) integrator: 'rk4', // Numerical integrator to use (e.g., 'rk4', 'euler', 'leapfrog', 'rk2', 'velocity-verlet') j2Perturbation: { enabled: false, radius: 6.371e6, // Radius of the central body (e.g., Earth's radius) j2: 0.00108263 // J2 coefficient (e.g., Earth's J2) } }; const orbitalStates: OrbitalState[] = simulate(initialConditions, simulationParams); console.log(orbitalStates[0]); // Initial state console.log(orbitalStates[orbitalStates.length - 1]); // Final state ``` ### Force Models The `keplerian-core` package includes functions for calculating various forces acting on an orbiting body. These are primarily used internally by the integrators but can also be used independently for analysis. ```typescript import { calculateGravitationalForce, calculateJ2PerturbationForce, calculateNetForce } from './src/physics/forces'; import { Vector2D } from './src/utils/vector'; const position: Vector2D = { x: 149.6e9, y: 0 }; const centralMass: number = 1.989e30; const orbitingMass: number = 5.972e24; const gravitationalConstant: number = 6.67430e-11; // Gravitational Force const gravitationalForce = calculateGravitationalForce(position, centralMass, orbitingMass, gravitationalConstant); console.log('Gravitational Force:', gravitationalForce); // J2 Perturbation Force const j2Radius: number = 6.371e6; const j2Coefficient: number = 0.00108263; const j2Force = calculateJ2PerturbationForce(position, centralMass, orbitingMass, gravitationalConstant, j2Radius, j2Coefficient); console.log('J2 Perturbation Force:', j2Force); // Net Force (combines all enabled forces) const netForce = calculateNetForce(position, centralMass, orbitingMass, gravitationalConstant, { enabled: true, radius: j2Radius, j2: j2Coefficient }); console.log('Net Force:', netForce); ``` ### Integrators The package provides several numerical integrators. While the `simulate` function abstracts their usage, you can also use them directly if needed. ```typescript import { euler } from './src/physics/integrators/euler'; import { rk4 } from './src/physics/integrators/rk4'; import { leapfrog } from './src/physics/integrators/leapfrog'; import { rk2 } from './src/physics/integrators/rk2'; import { velocityVerlet } from './src/physics/integrators/velocity-verlet'; import { OrbitalState, SimulationParams } from './src/types/physics'; // Example of using RK4 integrator directly for a single step const currentState: OrbitalState = { position: { x: 149.6e9, y: 0 }, velocity: { x: 0, y: 29780 } }; const params: SimulationParams = { gravitationalConstant: 6.67430e-11, centralMass: 1.989e30, orbitingMass: 5.972e24, timeStep: 3600, totalTime: 0, // Not relevant for single step integrator: 'rk4', j2Perturbation: { enabled: false } }; const nextStateRK4 = rk4(currentState, params); console.log('Next State (RK4):', nextStateRK4); // Similar usage for euler, leapfrog, rk2, velocityVerlet ``` ## Types Key types used throughout the package are defined in `src/types/physics.ts`: - `Vector2D`: Represents a 2D vector with `x` and `y` components. - `InitialConditions`: Defines the starting position and velocity of the orbiting body. - `J2PerturbationParams`: Configuration for J2 perturbation, including `enabled`, `radius`, and `j2` coefficient. - `SimulationParams`: Comprehensive parameters for a simulation, including gravitational constant, masses, time step, total time, chosen integrator, and J2 perturbation settings. - `OrbitalState`: Represents the state of the orbiting body at a given time, including its position and velocity. Refer to the source file for detailed type definitions.