From 9b1ef5404a916b8167c40cf8b3ee186a99071921 Mon Sep 17 00:00:00 2001 From: "John M. Penn" Date: Wed, 19 Oct 2016 17:39:47 -0500 Subject: [PATCH] Update SIM_cannon_analytic and add ability to launch new graphics client. Ref #320 --- .../SIM_cannon_analytic/RUN_graphics/input.py | 19 +++++++++++++ .../SIM_cannon_analytic/RUN_test/input.py | 2 +- .../models/cannon/gravity/include/cannon.h | 10 ++++--- .../cannon/gravity/src/cannon_analytic.c | 27 ++++++++++--------- .../cannon/gravity/src/cannon_default_data.c | 12 +++++---- .../models/cannon/gravity/src/cannon_init.c | 27 ++++++++++--------- 6 files changed, 62 insertions(+), 35 deletions(-) create mode 100644 trick_sims/Cannon/SIM_cannon_analytic/RUN_graphics/input.py diff --git a/trick_sims/Cannon/SIM_cannon_analytic/RUN_graphics/input.py b/trick_sims/Cannon/SIM_cannon_analytic/RUN_graphics/input.py new file mode 100644 index 00000000..43988b1a --- /dev/null +++ b/trick_sims/Cannon/SIM_cannon_analytic/RUN_graphics/input.py @@ -0,0 +1,19 @@ +execfile("Modified_data/realtime.py") + +#========================================== +# Start the display VarServer Client +#========================================== +varServerPort = trick.var_server_get_port(); +CannonDisplay_path = "../models/graphics/dist/CannonDisplay.jar" + +if (os.path.isfile(CannonDisplay_path)) : + CannonDisplay_cmd = "java -jar " \ + + CannonDisplay_path \ + + " " + str(varServerPort) + " &" ; + print(CannonDisplay_cmd) + os.system( CannonDisplay_cmd); +else : + print('==================================================================================') + print('CannonDisplay needs to be built. Please \"cd\" into ../models/graphics and type \"make\".') + print('==================================================================================') + diff --git a/trick_sims/Cannon/SIM_cannon_analytic/RUN_test/input.py b/trick_sims/Cannon/SIM_cannon_analytic/RUN_test/input.py index fc431648..2d2a78e6 100644 --- a/trick_sims/Cannon/SIM_cannon_analytic/RUN_test/input.py +++ b/trick_sims/Cannon/SIM_cannon_analytic/RUN_test/input.py @@ -1,5 +1,5 @@ - execfile("Modified_data/cannon.dr") execfile("Modified_data/realtime.py") trick.exec_set_terminate_time(5.2) + diff --git a/trick_sims/Cannon/models/cannon/gravity/include/cannon.h b/trick_sims/Cannon/models/cannon/gravity/include/cannon.h index 508c4bfc..56a2c9f4 100644 --- a/trick_sims/Cannon/models/cannon/gravity/include/cannon.h +++ b/trick_sims/Cannon/models/cannon/gravity/include/cannon.h @@ -16,18 +16,20 @@ typedef struct { double vel0[2] ; /* *i m Init velocity of cannonball */ double acc0[2] ; /* *i m Init acceleration of cannonball */ + double init_speed ; /* *i m/s Init barrel speed */ + double init_angle ; /* *i rad Angle of cannon */ + double pos[2] ; /* m xy-position */ double vel[2] ; /* m/s xy-velocity */ double acc[2] ; /* m/s2 xy-acceleration */ - double init_speed ; /* *i m/s Init barrel speed */ - double init_angle ; /* *i rad Angle of cannon */ + + double impactTime; + double time; /* Impact */ REGULA_FALSI rf ; /* -- Dynamic event params for impact */ int impact ; /* -- Has impact occured? */ - FILE *fp ; /* -- file pointer */ - /* Communication Connection */ TCDevice connection ; /* -- Socket connection for sending position */ } CANNON ; diff --git a/trick_sims/Cannon/models/cannon/gravity/src/cannon_analytic.c b/trick_sims/Cannon/models/cannon/gravity/src/cannon_analytic.c index ae4d5f5b..368987e4 100644 --- a/trick_sims/Cannon/models/cannon/gravity/src/cannon_analytic.c +++ b/trick_sims/Cannon/models/cannon/gravity/src/cannon_analytic.c @@ -5,26 +5,29 @@ PURPOSE: ( Analytical Cannon ) #include "../include/cannon.h" #include "../include/cannon_analytic_proto.h" -int cannon_analytic( - CANNON* C ) +int cannon_analytic( CANNON* C ) { - static double time = 0.0 ; - - C->acc[0] = 0.0 ; + C->acc[0] = 0.00; C->acc[1] = -9.81 ; - - C->vel[0] = C->vel0[0] + C->acc0[0]*time ; - C->vel[1] = C->vel0[1] + C->acc0[1]*time ; - - C->pos[0] = C->pos0[0] + C->vel0[0]*time + (0.5)*C->acc0[0]*time*time ; - C->pos[1] = C->pos0[1] + C->vel0[1]*time + (0.5)*C->acc0[1]*time*time ; + C->vel[0] = C->vel0[0] + C->acc0[0] * C->time ; + C->vel[1] = C->vel0[1] + C->acc0[1] * C->time ; + C->pos[0] = C->pos0[0] + (C->vel0[0] + (0.5) * C->acc0[0] * C->time) * C->time ; + C->pos[1] = C->pos0[1] + (C->vel0[1] + (0.5) * C->acc0[1] * C->time) * C->time ; + if (C->pos[1] < 0.0) { + C->impact = 1; + C->impactTime = -(2 * C->vel0[1] / C->acc0[1]); + C->pos[0] = C->impactTime * C->vel0[0]; + C->pos[1] = 0.0; + C->vel[0] = 0.0; + C->vel[1] = 0.0; + } /* * Increment time by the time delta associated with this job * Note that the 0.01 matches the frequency of this job * as specified in the S_define. */ - time += 0.01 ; + C->time += 0.01 ; return 0 ; } diff --git a/trick_sims/Cannon/models/cannon/gravity/src/cannon_default_data.c b/trick_sims/Cannon/models/cannon/gravity/src/cannon_default_data.c index 60fb0e70..bc337476 100644 --- a/trick_sims/Cannon/models/cannon/gravity/src/cannon_default_data.c +++ b/trick_sims/Cannon/models/cannon/gravity/src/cannon_default_data.c @@ -9,16 +9,18 @@ LIBRARY_DEPENDENCY: ((cannon_default_data.o)) #include "sim_services/include/Flag.h" /* Entry Point */ -int cannon_default_data(CANNON* C) +int cannon_default_data( CANNON* C ) { const double PI = 3.141592 ; - C->pos[0] = 0.0 ; - C->pos[1] = 0.0 ; - C->acc[0] = 0.0 ; - C->acc[1] = -9.81 ; + C->pos0[0] = 0.0 ; + C->pos0[1] = 0.0 ; + C->acc0[0] = 0.0 ; + C->acc0[1] = -9.81 ; C->init_angle = PI/6 ; C->init_speed = 50.0 ; + C->impactTime = 0.0 ; + C->time = 0.0 ; /* * Regula falsi dynamic event impact setup diff --git a/trick_sims/Cannon/models/cannon/gravity/src/cannon_init.c b/trick_sims/Cannon/models/cannon/gravity/src/cannon_init.c index 6a67b333..36b318d0 100644 --- a/trick_sims/Cannon/models/cannon/gravity/src/cannon_init.c +++ b/trick_sims/Cannon/models/cannon/gravity/src/cannon_init.c @@ -6,22 +6,23 @@ PURPOSE: (Initialize the cannonball) #include "../include/cannon.h" #include "../include/cannon_integ_proto.h" -int cannon_init( - CANNON* C ) -{ +int cannon_init( CANNON* C) { - C->fp = fopen("/users/dpanter/trunk/trick_sims/SIM_cannon/output.d", "w"); - - C->pos0[0] = C->pos[0] ; - C->pos0[1] = C->pos[1] ; + C->pos[0] = C->pos0[0] ; + C->pos[1] = C->pos0[1] ; - C->vel[0] = C->init_speed*cos(C->init_angle); - C->vel[1] = C->init_speed*sin(C->init_angle); - C->vel0[0] = C->vel[0] ; - C->vel0[1] = C->vel[1] ; + C->vel0[0] = C->init_speed*cos(C->init_angle); + C->vel0[1] = C->init_speed*sin(C->init_angle); - C->acc0[0] = C->acc[0] ; - C->acc0[1] = C->acc[1] ; + C->vel[0] = C->vel0[0] ; + C->vel[1] = C->vel0[1] ; + + C->acc[0] = C->acc0[0] ; + C->acc[1] = C->acc0[1] ; + + C->impactTime = 0; + C->impact = 0; return 0 ; } +