-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlib_ang_momentum.py
executable file
·66 lines (50 loc) · 2.4 KB
/
lib_ang_momentum.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Python library for Planetary_Angular_Momentum.py
"""
# Python imports
from numpy import pi, arange, array
# Function to calculate angular rate (rad/s) for either spin or orbital periods
def AngularRate(Period):
# Number of seconds in a day
Seconds_in_Day = 86400
# Convert rotation period from days to seconds
Period = Seconds_in_Day * Period
return (2 * pi) / Period
# Define Planetary System Class
class PlanetarySystem:
def __init__(self, planet, *moons):
self.planet = planet
self.planet_ang_momentum = self.planet.SpinAngMomentum()
self.moons = array(moons).flatten()
self.moons_ang_momentum = 0.
if len(self.moons) > 0:
for k in range(len(self.moons)):
self.moons_ang_momentum += self.moons[k].SpinAngMomentum() \
+ self.moons[k].OrbitAngMomentum()
self.total_ang_momentum = self.planet_ang_momentum \
+ self.moons_ang_momentum
# Define Planet Class
class planet:
# Instance Attributes
def __init__(self, name, mass, radius, norm_moment_inertia, rotational_rate):
# Attributes that should be updated
self.name = name # Planet name
self.mass = mass # Mass (kg)
self.radius = radius # Radius (m)
self.norm_moment_inertia = norm_moment_inertia # Normalized moment of inertia (unitless)
self.rotational_rate = rotational_rate # Rotation rate (rad/s)
def SpinAngMomentum(self):
return self.norm_moment_inertia * self.mass * self.radius**2 * self.rotational_rate
# Define Moon Class (Inherits from Planet Class)
class moon(planet):
# Instance Attributes
def __init__(self, name, mass, radius, norm_moment_inertia, rotational_rate, distance, orbital_rate):
# Attributes that are inherited
planet.__init__(self, name, mass, radius, norm_moment_inertia, rotational_rate)
# Attributes that should be updated
self.distance = distance # Semi-major axis, average distance from planet (m)
self.orbital_rate = orbital_rate # Orbital rate (rad/s)
def OrbitAngMomentum(self):
return self.mass * self.distance**2 * self.orbital_rate