Restore SIM_cannon_jet as decsribed in the tutorial.

This commit is contained in:
John M. Penn 2015-09-04 13:06:12 -05:00
parent 6657c7b0dc
commit d0e6eb1617
12 changed files with 175 additions and 11 deletions

View File

@ -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 */

View File

@ -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

View File

@ -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 ;

View File

@ -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++ ;

View File

@ -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.

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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]} ;

View File

@ -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