From d0e6eb1617ca2d31298e205bd48aadf3897ed71d Mon Sep 17 00:00:00 2001 From: "John M. Penn" Date: Fri, 4 Sep 2015 13:06:12 -0500 Subject: [PATCH] Restore SIM_cannon_jet as decsribed in the tutorial. --- .../cannon/aero/include/cannon_aero.h | 4 +- .../cannon/aero/include/cannon_aero_proto.h | 5 +- .../aero/src/cannon_aero_default_data.c | 5 +- .../cannon/aero/src/cannon_force_jet.c | 11 ++-- trick_sims/SIM_cannon_jet/README.md | 5 ++ .../SIM_cannon_jet/RUN_curveball/input.py | 16 ++++++ .../SIM_cannon_jet/RUN_fastball/input.py | 16 ++++++ .../SIM_cannon_jet/RUN_jet_read/input.py | 36 +++++++++++++ trick_sims/SIM_cannon_jet/RUN_test/input.py | 14 +++++ .../SIM_cannon_jet/RUN_test/unit_test.py | 14 +++++ trick_sims/SIM_cannon_jet/S_define | 54 +++++++++++++++++++ trick_sims/SIM_cannon_jet/S_overrides.mk | 6 +++ 12 files changed, 175 insertions(+), 11 deletions(-) create mode 100644 trick_sims/SIM_cannon_jet/README.md create mode 100644 trick_sims/SIM_cannon_jet/RUN_curveball/input.py create mode 100644 trick_sims/SIM_cannon_jet/RUN_fastball/input.py create mode 100644 trick_sims/SIM_cannon_jet/RUN_jet_read/input.py create mode 100644 trick_sims/SIM_cannon_jet/RUN_test/input.py create mode 100644 trick_sims/SIM_cannon_jet/RUN_test/unit_test.py create mode 100644 trick_sims/SIM_cannon_jet/S_define create mode 100644 trick_sims/SIM_cannon_jet/S_overrides.mk diff --git a/trick_models/cannon/aero/include/cannon_aero.h b/trick_models/cannon/aero/include/cannon_aero.h index 603e9798..d3289eb3 100644 --- a/trick_models/cannon/aero/include/cannon_aero.h +++ b/trick_models/cannon/aero/include/cannon_aero.h @@ -1,6 +1,6 @@ /****************************** TRICK HEADER ****************************** PURPOSE: ( Define CANNON_AERO type. ) -Tutorial Section 8 +Tutorial Sections 8, and 9 ***************************************************************************/ #ifndef CANNON_AERO_H @@ -60,7 +60,7 @@ typedef struct { double coefficient_lift ; /* -- Lift coefficient */ double coefficient_cross ; /* -- Cross-Force coefficient */ - /* Jet */ + /* Jet (Tutorial Section 9) */ int jet_on ; /* -- 0|1 */ int jet_count ; /* -- How many jet firings? */ double force_jet[3] ; /* N Jet force per firing */ diff --git a/trick_models/cannon/aero/include/cannon_aero_proto.h b/trick_models/cannon/aero/include/cannon_aero_proto.h index be2ae1c1..203e0874 100644 --- a/trick_models/cannon/aero/include/cannon_aero_proto.h +++ b/trick_models/cannon/aero/include/cannon_aero_proto.h @@ -1,6 +1,6 @@ /****************************** TRICK HEADER ****************************** PURPOSE: (Cannon_aero Prototypes) -Tutorial Section 8 +Tutorial Sections 8, and 9 ***************************************************************************/ #ifndef CANNON_AERO_PROTO_H #define CANNON_AERO_PROTO_H @@ -20,6 +20,9 @@ int cannon_integ_aero(CANNON_AERO*) ; double cannon_impact_aero(CANNON_AERO*) ; int cannon_aero_default_data(CANNON_AERO*) ; +/* Tutorial Section 9 */ +int cannon_force_jet(CANNON_AERO*) ; + #ifdef __cplusplus } #endif diff --git a/trick_models/cannon/aero/src/cannon_aero_default_data.c b/trick_models/cannon/aero/src/cannon_aero_default_data.c index 7335bbea..412afb70 100644 --- a/trick_models/cannon/aero/src/cannon_aero_default_data.c +++ b/trick_models/cannon/aero/src/cannon_aero_default_data.c @@ -1,7 +1,7 @@ /****************************** TRICK HEADER ****************************** PURPOSE: (Set the default data values) LIBRARY_DEPENDENCY: ((cannon_aero_default_data.o)) -Tutorial Section 8 +Tutorial Sections 8, and 9 ***************************************************************************/ #include "../include/cannon_aero_proto.h" @@ -18,8 +18,9 @@ int cannon_aero_default_data(CANNON_AERO* C) { C->ball_radius = 3.63/100 ; C->ball_area = 41.59/10000 ; C->g = -9.81 ; - C->force_jet_Z_plus = 1.0 * newton ; + /* Tutorial Section 9 */ + C->force_jet_Z_plus = 1.0 * newton ; /* Regula Falsi impact critter setup */ C->rf.lower_set = No ; diff --git a/trick_models/cannon/aero/src/cannon_force_jet.c b/trick_models/cannon/aero/src/cannon_force_jet.c index 0a00e103..deea1e14 100644 --- a/trick_models/cannon/aero/src/cannon_force_jet.c +++ b/trick_models/cannon/aero/src/cannon_force_jet.c @@ -1,12 +1,11 @@ -/*********************************** TRICK HEADER ************************** -PURPOSE: ( Jet fire force ) +/****************************** TRICK HEADER ****************************** +PURPOSE: ( Jet fire force ) +Tutorial Section 9 ***************************************************************************/ +#include "../include/cannon_aero_proto.h" -#include "../include/cannon_aero.h" +int cannon_force_jet( CANNON_AERO *C ) { -int cannon_force_jet( - CANNON_AERO *C ) -{ if ( C->jet_on && C->jet_count < 4 ) { C->force_jet[2] = C->force_jet_Z_plus ; C->jet_count++ ; diff --git a/trick_sims/SIM_cannon_jet/README.md b/trick_sims/SIM_cannon_jet/README.md new file mode 100644 index 00000000..8c8ab53a --- /dev/null +++ b/trick_sims/SIM_cannon_jet/README.md @@ -0,0 +1,5 @@ +#SIM\_cannon\_jet + +This simulation is described in the Trick Tutorial, Section 9. + +It is a derivation of SIM\_cannon\_aero that adds propulsion to the cannon ball. diff --git a/trick_sims/SIM_cannon_jet/RUN_curveball/input.py b/trick_sims/SIM_cannon_jet/RUN_curveball/input.py new file mode 100644 index 00000000..980ad12c --- /dev/null +++ b/trick_sims/SIM_cannon_jet/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_jet/RUN_fastball/input.py b/trick_sims/SIM_cannon_jet/RUN_fastball/input.py new file mode 100644 index 00000000..d49da8f7 --- /dev/null +++ b/trick_sims/SIM_cannon_jet/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_jet/RUN_jet_read/input.py b/trick_sims/SIM_cannon_jet/RUN_jet_read/input.py new file mode 100644 index 00000000..053c243b --- /dev/null +++ b/trick_sims/SIM_cannon_jet/RUN_jet_read/input.py @@ -0,0 +1,36 @@ +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) + +# Tutorial Section 9.1.6.1 - Input Read Statement +#trick.add_read(0.4 , """ +#dyn.baseball.jet_on = 1 """) + +# Tutorial Section 9.1.7 - Input Events +my_event = trick.new_event("my_event") +my_event.set_cycle(0.01) +my_event.condition(0,"""dyn.baseball.pos[0] <= 9.0 """) +#my_event.action(0,""" dyn.baseball.jet_on = 1 +# print "action taken" +#""") + +# Tutorial Section 9.1.7.2 - Input Event Which Corrects Delay +my_event.action(0,""" dyn.baseball.jet_on = 1 +trick.cannon_force_jet(dyn.baseball) +""") + +trick.add_event(my_event) +my_event.activate() + +dyn_integloop.getIntegrator(trick.Runge_Kutta_4, 6) +trick.stop(5.2) diff --git a/trick_sims/SIM_cannon_jet/RUN_test/input.py b/trick_sims/SIM_cannon_jet/RUN_test/input.py new file mode 100644 index 00000000..7e1d3f30 --- /dev/null +++ b/trick_sims/SIM_cannon_jet/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_jet/RUN_test/unit_test.py b/trick_sims/SIM_cannon_jet/RUN_test/unit_test.py new file mode 100644 index 00000000..7e1d3f30 --- /dev/null +++ b/trick_sims/SIM_cannon_jet/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_jet/S_define b/trick_sims/SIM_cannon_jet/S_define new file mode 100644 index 00000000..0610f797 --- /dev/null +++ b/trick_sims/SIM_cannon_jet/S_define @@ -0,0 +1,54 @@ +/************************TRICK HEADER************************* +PURPOSE: (Tutorial, Section 9) + +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) + (cannon/aero/src/cannon_force_jet.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 ) ; + + (0.1, "effector") cannon_force_jet( &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], + dyn.baseball.force_jet[0]} ; diff --git a/trick_sims/SIM_cannon_jet/S_overrides.mk b/trick_sims/SIM_cannon_jet/S_overrides.mk new file mode 100644 index 00000000..39a843c7 --- /dev/null +++ b/trick_sims/SIM_cannon_jet/S_overrides.mk @@ -0,0 +1,6 @@ +ifndef TRICK_HOME + $(error TRICK_HOME environment variable is not set. Please set it and retry.) +endif + +TRICK_CFLAGS += -I${TRICK_HOME}/trick_models +TRICK_CXXFLAGS += -I${TRICK_HOME}/trick_models