diff --git a/last_checkpoint.npz b/last_checkpoint.npz new file mode 100644 index 0000000..1edcfaa Binary files /dev/null and b/last_checkpoint.npz differ diff --git a/src/__init__.py b/orbiter/__init__.py similarity index 100% rename from src/__init__.py rename to orbiter/__init__.py diff --git a/orbiter/__pycache__/__init__.cpython-312.pyc b/orbiter/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..7d52799 Binary files /dev/null and b/orbiter/__pycache__/__init__.cpython-312.pyc differ diff --git a/orbiter/__pycache__/units.cpython-312.pyc b/orbiter/__pycache__/units.cpython-312.pyc new file mode 100644 index 0000000..bfa835f Binary files /dev/null and b/orbiter/__pycache__/units.cpython-312.pyc differ diff --git a/src/orbits/__init__.py b/orbiter/orbits/__init__.py similarity index 100% rename from src/orbits/__init__.py rename to orbiter/orbits/__init__.py diff --git a/orbiter/orbits/__pycache__/__init__.cpython-312.pyc b/orbiter/orbits/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..7c8f0c8 Binary files /dev/null and b/orbiter/orbits/__pycache__/__init__.cpython-312.pyc differ diff --git a/orbiter/orbits/__pycache__/body.cpython-312.pyc b/orbiter/orbits/__pycache__/body.cpython-312.pyc new file mode 100644 index 0000000..0ab8563 Binary files /dev/null and b/orbiter/orbits/__pycache__/body.cpython-312.pyc differ diff --git a/orbiter/orbits/__pycache__/simulator.cpython-312.pyc b/orbiter/orbits/__pycache__/simulator.cpython-312.pyc new file mode 100644 index 0000000..5749f93 Binary files /dev/null and b/orbiter/orbits/__pycache__/simulator.cpython-312.pyc differ diff --git a/src/orbits/body.py b/orbiter/orbits/body.py similarity index 89% rename from src/orbits/body.py rename to orbiter/orbits/body.py index c2b5236..57028a6 100644 --- a/src/orbits/body.py +++ b/orbiter/orbits/body.py @@ -1,7 +1,7 @@ from enum import Enum import numpy as np -from ..units import Position, Velocity, Mass, Acceleration, Force +from ..units import Position, Velocity, Mass, Acceleration class Body: """ diff --git a/src/orbits/simulator.py b/orbiter/orbits/simulator.py similarity index 57% rename from src/orbits/simulator.py rename to orbiter/orbits/simulator.py index a75249f..317e2d6 100644 --- a/src/orbits/simulator.py +++ b/orbiter/orbits/simulator.py @@ -1,7 +1,7 @@ from pathlib import Path +import numpy as np -from body import Body -from ..units import Position, Velocity, Mass, Acceleration, Force +from .body import Body class Simulator: """ @@ -31,7 +31,8 @@ class Simulator: bodies: list[Body], step_size: float, steps_per_save: int, - output_file: Path + output_file: Path, + current_step: int = 0, overwrite_output: bool = False ): if output_file.exists() and not overwrite_output: @@ -40,43 +41,63 @@ class Simulator: self.output_file = output_file self.bodies = bodies self.step_size = step_size - self.steps_to_take = steps_to_take self.steps_per_save = steps_per_save + self.current_step = current_step if output_file.exists() and overwrite_output: print(f"Warning! Overwriting file: {output_file}") - _save_body_masses_to_file() - _checkpoint() + #self._save_body_masses_to_file() + self._checkpoint() - self.current_step = 0 - @classmethod - def from_checkpoint(cls, input_file: Path): + def from_checkpoint(cls, output_file: Path): + data = np.load("last_checkpoint.npz") + positions = data["positions"] + velocities = data["velocities"] + masses = data["masses"] + step_size = data["steps"][0] + current_step = data["steps"][1] + steps_per_save = data["steps"][2] + bodies = [ + Body(val[0], val[1], val[2]) for val in zip( + positions, velocities, masses + ) + ] + return cls( + bodies, + step_size, + steps_per_save, + output_file, + current_step, + ) - def _save_body_masses_to_file(self): - masses_str = ' '.join([ - str(body.m) for body in bodies - ]) + '\n' - #if saving masses, we are always starting a new file, - #this will overwrite file. - self.output_file.write_text(masses_str) def _checkpoint(self): """ Two things - save high precision last checkpoint for resuming then save lower precision text for trajectories """ - body_X_V_np = np.array([ - [body.X, body.Y] for body in self.bodies + body_X_np = np.array([ + body.X for body in self.bodies ]) - body_ints_np = np.array([ + body_V_np = np.array([ + body.V for body in self.bodies + ]) + body_m_np = np.array([ body.m for body in self.bodies ]) - body_m_np.append(self.step_size, self.current_step) - np.savez("last_checkpoint.npz", - array=body_X_V_np, - ints = body_m_np) + stepsz_n_np = np.array([ + self.step_size, + self.current_step, + self.steps_per_save + ]) + + np.savez("last_checkpoint.npz", + positions=body_X_np, + velocities=body_V_np, + masses=body_m_np, + steps=stepsz_n_np) diff --git a/orbiter/units.py b/orbiter/units.py new file mode 100644 index 0000000..9ab7ee7 --- /dev/null +++ b/orbiter/units.py @@ -0,0 +1,9 @@ +import numpy as np + +Position = np.array + +Velocity = np.array + +Acceleration = np.array + +Mass = int diff --git a/src/units.py b/src/units.py deleted file mode 100644 index 02bddb9..0000000 --- a/src/units.py +++ /dev/null @@ -1,16 +0,0 @@ -import numpy as np - -class Position(np.array): - pass - -class Velocity(np.array): - pass - -class Acceleration(np.array): - pass - -class Force(np.array): - pass - -class Mass(int): - pass