-
Notifications
You must be signed in to change notification settings - Fork 0
/
celestial_classes.py
189 lines (124 loc) · 6.03 KB
/
celestial_classes.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
import blackbody
from numpy import log10
"""Most units are relative solar units (mass, radius, angular velocity, luminosity, etc...). The exceptions are
time which uses log(Myr) units -- 0 is 1 Myr, 1 is 10 Myr, 2 is 100 Myr, etc -- and metallicity, which uses Z
units (mass fraction of elements hevier than helium). Color uses hex-RGB encoding."""
class CelestialBody:
# Any object in space is a celestial body
def __init__(self, mass, age, angular):
self.mass = mass # m_sol
self.age = age # log(Myr)
if 10**self.age > 13800: # Max age sanity check
raise ValueError(f"Object age {10**self.age} Myr greater than age of universe 13800 Myr.")
self.angular = angular # l_sol (not to be confused with luminosity)
# %% -=- Stellar Objects -=- %% #
class Star(CelestialBody):
# A star is any fusing body sitting near the center of mass of a system
def __init__(self, mass, age, angular, metallicity):
super(Star, self).__init__(mass, age, angular)
self.metallicity = metallicity # Z
class MainSequence(Star):
# Most stars are main sequence stars (this class includes red dwarfs)
def __init__(self, mass, age, angular, metallicity):
super(MainSequence, self).__init__(mass, age, angular, metallicity)
self.lifetime = log10(self.mass**-2.5 * 10**4) # log(Myr)
if self.age > self.lifetime: # Star should no longer be on the main sequence; pass out an error
raise ValueError(f"Star age {10**self.age} Myr greater than"
f"main sequence lifetime {10**self.lifetime} Myr")
self.temperature = (mass**2.5)**-4 # T_sol
self.color = blackbody.visible_color(self.temperature) # RGB hexadecimal
self.spectrum = blackbody.spectrum(self.temperature)
self.radius = mass**0.5 # r_sol
self.luminosity = mass**3.5 # lum_sol (not to be confused with angular momentum)
self.rotation = self.angular/(self.mass * self.radius**2) # tau_sol; 2/5 inertial factor cancels
class Giant(Star):
# A star past the main sequence part of its life (or that skipped it)
raise NotImplementedError
class WolfRayet(Giant):
# A peculiar type of giant characterized by extremely high temperature and strong stellar wind
raise NotImplementedError
# %% -=- Stellar Remnants -=- %% #
class Remnant(CelestialBody):
# The remains of a body that was once a star
raise NotImplementedError
class WhiteDwarf(Remnant):
# A relatively cool stellar remnant, usually of fairly low mass
raise NotImplementedError
class Neutron(Remnant):
# The remnants of a massive star that has undergone a supernova
raise NotImplementedError
class Pulsar(WhiteDwarf, Neutron):
# A neutron star (sometimes a white dwarf) that projects energetic beams from its poles
raise NotImplementedError
class Magnetar(Neutron):
# A type of nuetron star with a strong magnetic field that periodically bursts with radiation
raise NotImplementedError
class BlackHole(Remnant):
# The remnant of a massize star (usually), from which no light can escape
raise NotImplementedError
# %% -=- Non-Stellar Objects -=- %% #
class Protostar(CelestialBody):
# A protostar is an mass of gas and space dust in the process of collapsing
raise NotImplementedError
class PreMainSequence(CelestialBody):
# A coalesced body older than a protostar, but which has not yet reached ZAMS
raise NotImplementedError
class BrownDwarf(CelestialBody):
# A small body which is almost -- but not quite -- massive enough to undergo fusion
raise NotImplementedError
class Satellite(CelestialBody):
# Any body in orbit around another body
raise NotImplementedError
class AccretionDisk(Satellite):
# A disk of debris remaing from stellar formation in the process of forming a planet
raise NotImplementedError
class Planet(Satellite):
# A rocky or gasseous body in orbit around a star-like object
raise NotImplementedError
class Moon(Satellite):
# A rocky stellite of a planet
raise NotImplementedError
class Asteroid(Satellite):
# Small rocky or icy bodies in orbit around a star-like object (or captured in a L point)
raise NotImplementedError
class Comet(Satellite):
# Icy body that trails a tail when passing near a star; orbit is usually highly eliptical
raise NotImplementedError
# %% -=- Constructs (Low Priority) -=- %% #
class Construct(Satellite):
# Any non-naturally occuring celestial body in orbit around a star or remnant
raise NotImplementedError
class DysonSwarm(Construct):
# Many small satellites around a star, intended to harvest energy
raise NotImplementedError
class DysonSphere(Construct):
# A shell constructed around a star intended to harvest energy
raise NotImplementedError
class Topopolis(Construct):
# A massive (stellar-scale) habitat construct, like many O'Neil cylinders joined together
raise NotImplementedError
class NivenRing(Construct):
# A stellar scale rotating torroidal habitat
raise NotImplementedError
class BishopRing(Construct):
# A planetary scale rotating rorroidal habitat in orbit around a star or remnant
raise NotImplementedError
class ShellWorld(Construct):
# Any of several types of hollow, planet or asteroid scale habitats orbiting a star or remnant
raise NotImplementedError
class OrbitalRing(Construct):
# A torroidal habitat encircling (or partly encircling) a planet or moon
raise NotImplementedError
class ONeillCylinder(Construct):
# An orbital scale habitat formed from a rotating cylinder
raise NotImplementedError
class SpaceStation(Construct):
# Any small-scale habitat in orbit around a planet, moon, asteroid, star, etc...
raise NotImplementedError
# %% -=- Compositions -=- %% #
class StellarBinary:
# A class to contain binary star systems, which have many special properties
raise NotImplementedError
class System:
# A generic class for any grouping of objects that together form a stellar system
raise NotImplementedError