From abb95b8b6cbb2529fcd9012270d11828a7e10883 Mon Sep 17 00:00:00 2001
From: "John M. Penn" <john.m.penn@nasa.gov>
Date: Thu, 3 Sep 2015 19:08:55 -0500
Subject: [PATCH] Restore SIM_cannon_aero to its former glory.

---
 trick_sims/SIM_cannon_aero/README.md          | 10 ++++
 .../SIM_cannon_aero/RUN_curveball/input.py    | 16 ++++++
 .../SIM_cannon_aero/RUN_fastball/input.py     | 16 ++++++
 trick_sims/SIM_cannon_aero/RUN_test/input.py  | 14 ++++++
 .../SIM_cannon_aero/RUN_test/unit_test.py     | 14 ++++++
 trick_sims/SIM_cannon_aero/S_define           | 50 +++++++++++++++++++
 trick_sims/SIM_cannon_aero/S_overrides.mk     |  2 +
 trick_sims/makefile                           |  2 +
 8 files changed, 124 insertions(+)
 create mode 100644 trick_sims/SIM_cannon_aero/README.md
 create mode 100644 trick_sims/SIM_cannon_aero/RUN_curveball/input.py
 create mode 100644 trick_sims/SIM_cannon_aero/RUN_fastball/input.py
 create mode 100644 trick_sims/SIM_cannon_aero/RUN_test/input.py
 create mode 100644 trick_sims/SIM_cannon_aero/RUN_test/unit_test.py
 create mode 100644 trick_sims/SIM_cannon_aero/S_define
 create mode 100644 trick_sims/SIM_cannon_aero/S_overrides.mk

diff --git a/trick_sims/SIM_cannon_aero/README.md b/trick_sims/SIM_cannon_aero/README.md
new file mode 100644
index 00000000..dfebe887
--- /dev/null
+++ b/trick_sims/SIM_cannon_aero/README.md
@@ -0,0 +1,10 @@
+#SIM\_cannon\_aero
+
+This simulation is described in the Trick Tutorial, Section 8.
+
+It introduces Trick's **collect** mechanism while adding aero-dynamic
+forces to the cannon ball (or is it a baseball?) to
+simulate throwing a curve ball and a fast ball. Ok, it's a cannon that
+shoots curveballs and fast balls. Just go with it.
+
+
diff --git a/trick_sims/SIM_cannon_aero/RUN_curveball/input.py b/trick_sims/SIM_cannon_aero/RUN_curveball/input.py
new file mode 100644
index 00000000..980ad12c
--- /dev/null
+++ b/trick_sims/SIM_cannon_aero/RUN_curveball/input.py
@@ -0,0 +1,16 @@
+execfile("Modified_data/cannon_aero.dr")
+
+dyn.baseball.pos[0] = 16.0
+dyn.baseball.pos[1] = 0.1
+dyn.baseball.pos[2] = 2.0
+
+dyn.baseball.vel[0] = -30.0
+dyn.baseball.vel[1] = -0.1
+dyn.baseball.vel[2] = 1.0
+
+dyn.baseball.theta = trick.attach_units("d",-90.0)
+dyn.baseball.phi = trick.attach_units("d",1.0)
+dyn.baseball.omega0 = trick.attach_units("rev/s",30.0)
+
+dyn_integloop.getIntegrator(trick.Runge_Kutta_4, 6)
+trick.stop(5.2)
diff --git a/trick_sims/SIM_cannon_aero/RUN_fastball/input.py b/trick_sims/SIM_cannon_aero/RUN_fastball/input.py
new file mode 100644
index 00000000..d49da8f7
--- /dev/null
+++ b/trick_sims/SIM_cannon_aero/RUN_fastball/input.py
@@ -0,0 +1,16 @@
+execfile("Modified_data/cannon_aero.dr")
+
+dyn.baseball.pos[0] = 16.0
+dyn.baseball.pos[1] = 0.1
+dyn.baseball.pos[2] = 2.0
+
+dyn.baseball.vel[0] = -30.0
+dyn.baseball.vel[1] = -0.1
+dyn.baseball.vel[2] = 1.0
+
+dyn.baseball.theta = trick.attach_units("d",-90.0)
+dyn.baseball.phi = trick.attach_units("d",1.0)
+dyn.baseball.omega0 = trick.attach_units("rev/s",-30.0)
+
+dyn_integloop.getIntegrator(trick.Runge_Kutta_4, 6)
+trick.stop(5.2)
diff --git a/trick_sims/SIM_cannon_aero/RUN_test/input.py b/trick_sims/SIM_cannon_aero/RUN_test/input.py
new file mode 100644
index 00000000..7e1d3f30
--- /dev/null
+++ b/trick_sims/SIM_cannon_aero/RUN_test/input.py
@@ -0,0 +1,14 @@
+dyn.baseball.pos[0] = 16.0
+dyn.baseball.pos[1] = 0.1
+dyn.baseball.pos[2] = 2.0
+
+dyn.baseball.vel[0] = -30.0
+dyn.baseball.vel[1] = -0.1
+dyn.baseball.vel[2] = 1.0
+
+dyn.baseball.theta = trick.attach_units("d",-90.0)
+dyn.baseball.phi = trick.attach_units("d",1.0)
+dyn.baseball.omega0 = trick.attach_units("rev/s",30.0)
+
+dyn_integloop.getIntegrator(trick.Runge_Kutta_4, 6)
+trick.exec_set_terminate_time(5.2)
diff --git a/trick_sims/SIM_cannon_aero/RUN_test/unit_test.py b/trick_sims/SIM_cannon_aero/RUN_test/unit_test.py
new file mode 100644
index 00000000..7e1d3f30
--- /dev/null
+++ b/trick_sims/SIM_cannon_aero/RUN_test/unit_test.py
@@ -0,0 +1,14 @@
+dyn.baseball.pos[0] = 16.0
+dyn.baseball.pos[1] = 0.1
+dyn.baseball.pos[2] = 2.0
+
+dyn.baseball.vel[0] = -30.0
+dyn.baseball.vel[1] = -0.1
+dyn.baseball.vel[2] = 1.0
+
+dyn.baseball.theta = trick.attach_units("d",-90.0)
+dyn.baseball.phi = trick.attach_units("d",1.0)
+dyn.baseball.omega0 = trick.attach_units("rev/s",30.0)
+
+dyn_integloop.getIntegrator(trick.Runge_Kutta_4, 6)
+trick.exec_set_terminate_time(5.2)
diff --git a/trick_sims/SIM_cannon_aero/S_define b/trick_sims/SIM_cannon_aero/S_define
new file mode 100644
index 00000000..2bd6802f
--- /dev/null
+++ b/trick_sims/SIM_cannon_aero/S_define
@@ -0,0 +1,50 @@
+/************************TRICK HEADER*************************
+PURPOSE: (Tutorial, Section 8)
+
+LIBRARY DEPENDENCY: ((cannon/aero/src/cannon_init_aero.c)
+                     (cannon/aero/src/cannon_force_gravity.c)
+                     (cannon/aero/src/cannon_force_drag.c)
+                     (cannon/aero/src/cannon_force_lift.c)
+                     (cannon/aero/src/cannon_force_cross.c)
+                     (cannon/aero/src/cannon_collect_forces.c)
+                     (cannon/aero/src/cannon_integ_aero.c)
+                     (cannon/aero/src/cannon_impact_aero.c)
+                     (cannon/aero/src/cannon_aero_default_data.c)
+                   )
+*************************************************************/
+#include "sim_objects/default_trick_sys.sm"
+
+##include "cannon/aero/include/cannon_aero.h"
+##include "cannon/aero/include/cannon_aero_proto.h"
+
+class CannonSimObject : public Trick::SimObject {
+
+    public:
+        CANNON_AERO baseball;
+
+        CannonSimObject() {
+
+            ("default_data") cannon_aero_default_data( &baseball ) ;
+
+            ("initialization") cannon_init_aero( &baseball ) ;
+
+            ("derivative") cannon_force_gravity( &baseball ) ;
+            ("derivative") cannon_force_drag( &baseball ) ;
+            ("derivative") cannon_force_lift( &baseball ) ;
+            ("derivative") cannon_force_cross( &baseball ) ;
+            ("derivative") cannon_collect_forces( &baseball ) ;
+            ("integration") trick_ret = cannon_integ_aero( &baseball ) ;
+
+            ("dynamic_event") cannon_impact_aero( &baseball ) ;
+        }
+} ;
+
+CannonSimObject dyn ;
+
+IntegLoop dyn_integloop (0.01) dyn ;
+
+collect dyn.baseball.force_collect = {
+        dyn.baseball.force_gravity[0],
+        dyn.baseball.force_drag[0],
+        dyn.baseball.force_magnus[0],
+        dyn.baseball.force_cross[0]} ;
diff --git a/trick_sims/SIM_cannon_aero/S_overrides.mk b/trick_sims/SIM_cannon_aero/S_overrides.mk
new file mode 100644
index 00000000..086e38ff
--- /dev/null
+++ b/trick_sims/SIM_cannon_aero/S_overrides.mk
@@ -0,0 +1,2 @@
+TRICK_CFLAGS += -I${TRICK_HOME}/trick_models
+TRICK_CXXFLAGS += -I${TRICK_HOME}/trick_models
diff --git a/trick_sims/makefile b/trick_sims/makefile
index 50dfe8ae..a4a1982c 100644
--- a/trick_sims/makefile
+++ b/trick_sims/makefile
@@ -8,6 +8,7 @@ COMPILE_DIRS = SIM_Ball++_L1 \
     SIM_ball_L2 \
     SIM_ball_L3 \
     SIM_ball_default_data \
+    SIM_cannon_aero \
     SIM_cannon_analytic \
     SIM_cannon_contact \
     SIM_cannon_dt \
@@ -50,6 +51,7 @@ TEST_DIRS = SIM_Ball++_L1 \
     SIM_ball_L2 \
     SIM_ball_L3 \
     SIM_ball_default_data \
+    SIM_cannon_aero \
     SIM_cannon_analytic \
     SIM_cannon_contact \
     SIM_cannon_dt \