From 1d4285b6d570a1f5f00f4db1aa8769fd30b53827 Mon Sep 17 00:00:00 2001 From: Luca Miguel Date: Mon, 24 Jul 2023 11:00:18 +0200 Subject: [PATCH 1/7] Added stage class --- rocket_twin/systems/rocket/stage.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 rocket_twin/systems/rocket/stage.py diff --git a/rocket_twin/systems/rocket/stage.py b/rocket_twin/systems/rocket/stage.py new file mode 100644 index 0000000..f0ceceb --- /dev/null +++ b/rocket_twin/systems/rocket/stage.py @@ -0,0 +1,22 @@ +from cosapp.base import System + +from rocket_twin.systems import ControllerCoSApp, Engine, Tank + +class Stage(System): + + def setup(self): + + self.add_child(ControllerCoSApp("controller")) + self.add_child(Tank("tank"), pulling=["w_in", "weight_max", "weight_p"]) + self.add_child(Engine("engine")) + + self.connect(self.controller.outwards, self.tank.inwards, {"w": "w_command"}) + self.connect(self.tank.outwards, self.engine.inwards, {"w_out": "w_out"}) + + self.add_outward("weight", 1., desc="Weight", unit='kg') + self.add_outward("cg", 1., desc="Center of gravity", unit='m') + + def compute(self): + + self.weight = self.tank.weight + self.engine.weight + self.cg = (self.tank.cg*self.tank.weight + self.engine.cg*self.engine.weight)/(self.weight) From 7338a971409152a626c2e903bbdbea5b725db45f Mon Sep 17 00:00:00 2001 From: Luca Miguel Date: Mon, 24 Jul 2023 11:03:00 +0200 Subject: [PATCH 2/7] pre-commit --- rocket_twin/systems/rocket/stage.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/rocket_twin/systems/rocket/stage.py b/rocket_twin/systems/rocket/stage.py index f0ceceb..3f53f13 100644 --- a/rocket_twin/systems/rocket/stage.py +++ b/rocket_twin/systems/rocket/stage.py @@ -2,10 +2,25 @@ from rocket_twin.systems import ControllerCoSApp, Engine, Tank + class Stage(System): + """Model of a rocket stage. + + Inputs + ------ + + Outputs + ------ + force [N]: float, + thrust force + weight [kg]: float, + weight + cg [m]: float, + center of gravity + """ def setup(self): - + self.add_child(ControllerCoSApp("controller")) self.add_child(Tank("tank"), pulling=["w_in", "weight_max", "weight_p"]) self.add_child(Engine("engine")) @@ -13,10 +28,12 @@ def setup(self): self.connect(self.controller.outwards, self.tank.inwards, {"w": "w_command"}) self.connect(self.tank.outwards, self.engine.inwards, {"w_out": "w_out"}) - self.add_outward("weight", 1., desc="Weight", unit='kg') - self.add_outward("cg", 1., desc="Center of gravity", unit='m') + self.add_outward("weight", 1.0, desc="Weight", unit="kg") + self.add_outward("cg", 1.0, desc="Center of gravity", unit="m") def compute(self): self.weight = self.tank.weight + self.engine.weight - self.cg = (self.tank.cg*self.tank.weight + self.engine.cg*self.engine.weight)/(self.weight) + self.cg = (self.tank.cg * self.tank.weight + self.engine.cg * self.engine.weight) / ( + self.weight + ) From 17071f1eef889682eb54b46025f5b631832ab17b Mon Sep 17 00:00:00 2001 From: Luca Miguel Date: Mon, 24 Jul 2023 11:54:11 +0200 Subject: [PATCH 3/7] Added unit test --- rocket_twin/systems/__init__.py | 3 ++- rocket_twin/systems/rocket/__init__.py | 3 ++- rocket_twin/tests/test_stages.py | 22 ++++++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 rocket_twin/tests/test_stages.py diff --git a/rocket_twin/systems/__init__.py b/rocket_twin/systems/__init__.py index ecbd0bd..e5486dd 100644 --- a/rocket_twin/systems/__init__.py +++ b/rocket_twin/systems/__init__.py @@ -4,13 +4,14 @@ from rocket_twin.systems.physics import Dynamics from rocket_twin.systems.tank import Pipe, Tank -from rocket_twin.systems.rocket import Rocket # isort: skip +from rocket_twin.systems.rocket import Stage, Rocket # isort: skip from rocket_twin.systems.station import Station # isort: skip __all__ = [ "Clock", "Engine", "Tank", + "Stage", "Rocket", "Pipe", "Dynamics", diff --git a/rocket_twin/systems/rocket/__init__.py b/rocket_twin/systems/rocket/__init__.py index 900ab5d..a8e3e08 100644 --- a/rocket_twin/systems/rocket/__init__.py +++ b/rocket_twin/systems/rocket/__init__.py @@ -1,3 +1,4 @@ from rocket_twin.systems.rocket.rocket import Rocket +from rocket_twin.systems.rocket.stage import Stage -__all__ = ["Rocket"] +__all__ = ["Stage", "Rocket"] diff --git a/rocket_twin/tests/test_stages.py b/rocket_twin/tests/test_stages.py new file mode 100644 index 0000000..6ae51df --- /dev/null +++ b/rocket_twin/tests/test_stages.py @@ -0,0 +1,22 @@ +import numpy as np + +from rocket_twin.systems import Stage +from cosapp.drivers import RungeKutta + +class TestStage: + + def test_single_stage(self): + + sys = Stage('sys') + init = {"tank.weight_p" : "tank.weight_max"} + values = {"controller.w_temp" : 1., "tank.w_out_max" : 1.} + stop = "tank.weight_p == 0." + + driver = sys.add_driver(RungeKutta(order=4, dt = 0.1)) + driver.time_interval = (0, 10) + driver.set_scenario(init = init, values=values, stop=stop) + sys.run_drivers() + + np.testing.assert_allclose(sys.weight, 2., atol=10**(-1)) + np.testing.assert_allclose(sys.cg, 1., atol=10**(-1)) + \ No newline at end of file From d762ddc4e9097c330c00fa5896300ab73ff4d38f Mon Sep 17 00:00:00 2001 From: Luca Miguel Date: Mon, 24 Jul 2023 11:54:41 +0200 Subject: [PATCH 4/7] pre-commit --- rocket_twin/tests/test_stages.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/rocket_twin/tests/test_stages.py b/rocket_twin/tests/test_stages.py index 6ae51df..ef79a5b 100644 --- a/rocket_twin/tests/test_stages.py +++ b/rocket_twin/tests/test_stages.py @@ -1,22 +1,21 @@ import numpy as np +from cosapp.drivers import RungeKutta from rocket_twin.systems import Stage -from cosapp.drivers import RungeKutta -class TestStage: +class TestStage: def test_single_stage(self): - sys = Stage('sys') - init = {"tank.weight_p" : "tank.weight_max"} - values = {"controller.w_temp" : 1., "tank.w_out_max" : 1.} + sys = Stage("sys") + init = {"tank.weight_p": "tank.weight_max"} + values = {"controller.w_temp": 1.0, "tank.w_out_max": 1.0} stop = "tank.weight_p == 0." - driver = sys.add_driver(RungeKutta(order=4, dt = 0.1)) + driver = sys.add_driver(RungeKutta(order=4, dt=0.1)) driver.time_interval = (0, 10) - driver.set_scenario(init = init, values=values, stop=stop) + driver.set_scenario(init=init, values=values, stop=stop) sys.run_drivers() - np.testing.assert_allclose(sys.weight, 2., atol=10**(-1)) - np.testing.assert_allclose(sys.cg, 1., atol=10**(-1)) - \ No newline at end of file + np.testing.assert_allclose(sys.weight, 2.0, atol=10 ** (-1)) + np.testing.assert_allclose(sys.cg, 1.0, atol=10 ** (-1)) From a94707ffec4e60b7c38afa21c16c0c85a9885fdd Mon Sep 17 00:00:00 2001 From: Luca Miguel Date: Mon, 24 Jul 2023 12:05:32 +0200 Subject: [PATCH 5/7] CI test --- rocket_twin/tests/test_stages.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rocket_twin/tests/test_stages.py b/rocket_twin/tests/test_stages.py index ef79a5b..e8d01cd 100644 --- a/rocket_twin/tests/test_stages.py +++ b/rocket_twin/tests/test_stages.py @@ -17,5 +17,5 @@ def test_single_stage(self): driver.set_scenario(init=init, values=values, stop=stop) sys.run_drivers() - np.testing.assert_allclose(sys.weight, 2.0, atol=10 ** (-1)) - np.testing.assert_allclose(sys.cg, 1.0, atol=10 ** (-1)) + np.testing.assert_allclose(sys.weight, 2.0, atol=10 ** (-2)) + np.testing.assert_allclose(sys.cg, 1.0, atol=10 ** (-2)) From 3a77242e38ea3e057ec5e1ef3ed39b63a53874f4 Mon Sep 17 00:00:00 2001 From: Luca Miguel Date: Mon, 24 Jul 2023 12:26:52 +0200 Subject: [PATCH 6/7] pre-commit update --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b109776..a0d97f2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,6 +47,6 @@ repos: - flake8-bugbear==22.1.11 - flake8-isort==4.1.1 - repo: https://github.com/kynan/nbstripout - rev: 0.5.0 + rev: 0.6.1 hooks: - id: nbstripout From 7b125a41ec74e217681a103b2a421c8c12c05ce7 Mon Sep 17 00:00:00 2001 From: Luca Miguel Date: Mon, 24 Jul 2023 13:46:39 +0200 Subject: [PATCH 7/7] CI test --- rocket_twin/notebooks/Visualisation.ipynb | 98 ----------------------- 1 file changed, 98 deletions(-) delete mode 100644 rocket_twin/notebooks/Visualisation.ipynb diff --git a/rocket_twin/notebooks/Visualisation.ipynb b/rocket_twin/notebooks/Visualisation.ipynb deleted file mode 100644 index 2125fd6..0000000 --- a/rocket_twin/notebooks/Visualisation.ipynb +++ /dev/null @@ -1,98 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "8bec8444-0001-4e4a-bb3a-aae9574a5cb6", - "metadata": {}, - "outputs": [], - "source": [ - "from rocket_twin.systems import Ground\n", - "from rocket_twin.systems import Station" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "97e7cc0c-c54d-4dac-9966-ac30c44abe14", - "metadata": {}, - "outputs": [], - "source": [ - "st1 = Station('st1')\n", - "st2 = Station('st2')\n", - "ground = Ground('ground', stations=[st1, st2])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3b5aeda9-94d7-4f2d-a28c-c9e168cb4e69", - "metadata": {}, - "outputs": [], - "source": [ - "ground" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6b46cce2-b0da-44dc-a19d-1f261002608b", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b951bdb0-98eb-405d-9f37-8b0c6bc76568", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ae5b4ea2-e71e-4dc7-ad37-9b47eb0e3daa", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0065a4ad-c135-45bc-a2f5-7b8ec556a547", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d41a129f-04d4-43d3-8aa8-fd234ce0f517", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -}