TRICK 7 TO TRICK 10 INPUT FILE DIFFERENCES KEY : |
|||||
Bold = Default behavior | |||||
Green = New Trick 10 feature or implementation is different than Trick 7 | |||||
Blue = Need a Trick 10 interface routine | |||||
Orange = Not implemented in Trick 10 / presumably not needed | |||||
Red Bold = Not implemented in Trick 10 / needs to be fixed | |||||
SPECIAL SYNTAX TRICK 7 |
TRICK 10 | DESCRIPTION | |||
#include "S_default.dat" | N/A : include any default data files in your S_define header | INCLUDE DEFAULT DATA | |||
#include "<myother_inputfile>" | import <myother_inputfile> OR execfile("<myother_inputfile>") | INCLUDE ANOTHER INPUT FILE | |||
call <simobj>.<funcname>(<params>) ; | <simobj>.<funcname>(<params>) | CALL A SCHEDULED C FUNCTION | |||
call <simobj>.<simobj>.<obj>.<funcname>(<params>) ; | <simobj>.<obj>.<funcname>(<params>) | CALL A SCHEDULED C++ FUNCTION | |||
checkpoint ; | trick.checkpoint() | CHECKPOINT SIM NOW | |||
trick.load_checkpoint("<checkpoint_filename>") | LOAD A CHECKPOINT FILE NOW | ||||
checkpoint += <sec> ; | trick.checkpoint(trick.exec_get_sim_time() + <sec>) | CHECKPOINT SIM <sec> SECONDS FROM NOW | |||
checkpoint = <sec> ; | trick.checkpoint(<sec>) | CHECKPOINT SIM AT TIME <sec> | |||
checkpoint <simobjname> [= <sec>] ; | trick.checkpoint_objects("<checkpoint_filename>","<object>[,<object>,É]") | CHECKPOINT A SIM OBJECT NOW [OR AT TIME <sec> TRICK7 ONLY] | |||
cycle <jobname> = <sec> ; | trick.exec_set_job_cycle("<jobname>", <instance>, <sec>) | SET CYCLE TIME OF JOB | |||
echo On|Off ; | trick.echo_jobs_on() OR trick.echo_jobs_off() | ECHO NAMES OF CALLED JOBS DURING EXECUTION | |||
echo_on ; echo_off ; | NOT IMPLEMENTED | ECHO INPUT FILE AS IT IS PARSED | |||
freeze ; | trick.freeze() | FREEZE SIM NOW | |||
freeze += <sec> ; | trick.freeze(trick.exec_get_sim_time() + <sec>) | FREEZE SIM <sec> SECONDS FROM NOW | |||
freeze = <sec> ; | trick.freeze(<sec>) | FREEZE SIM AT TIME <sec> | |||
job <jobname> = On|Off ; | trick.exec_set_job_onoff("<jobname>", <instance>, True|False) | ENABLE/DISABLE RESCHEDULING OF JOB | |||
pause ; | raw_input("Input Processor Paused. Hit <enter> to continue") | STOP PROCESSING INPUT UNTIL USER HITS <ENTER> | |||
read += <sec> ; | trick.add_read(trick.exec_get_sim_time() + <sec>, "<statements>") | READ FOLLOWING STMTS <sec> SECONDS FROM NOW | |||
read = <sec> ; | trick.add_read(<sec>, "<statements>") | READ FOLLOWING STMTS AT TIME <sec> | |||
send_hs(<FILE>, "<message_text>") ; | trick.send_hs(None, "<message_text>") | SEND A HEALTH & STATUS MSG TO SIM CONTROL PANEL (IN TRICK10 MSG ALSO GOES TO STDOUT) | |||
sim_object <simobjname> = On|Off ; | trick.exec_set_sim_object_onoff("<simobjname>", True|False) | ENABLE/DISABLE RESCHEDULING OF ALL JOBS IN SIM_OBJECT | |||
stop ; | trick.stop() | TERMINATE SIM NOW | |||
stop += <sec> ; | trick.stop(trick.exec_get_sim_time() + <sec>) | TERMINATE SIM 5 SECONDS FROM NOW | |||
stop = <sec> ; | trick.stop(<sec>) | TERMINATE SIM AT TIME <sec> | |||
<my_int_ptr> = alloc(5) ; | <my_int_ptr> =
trick.alloc_type(5, "int") OR <my_int_ptr> = trick.TMM_declare_var_s("int[5]") OR <my_int_ptr> = trick.TMM_declare_var_1d("int", 5) |
DYNAMICALLY ALLOCATE DATA | |||
<my_string> = "${<env_varname>}" | getenv("<env_varname>") ; | <my_string> = os.getenv("<env_varname>") | ACCESS ENVIRONMENT VARIABLE | |||
<simobj>.<var> {<unit>} = <val> ; | <simobj>.<var> = trick.attach_units("<unit>", <val>) | VARIABLE ASSIGNMENT WITH UNITS | |||
if (<simobj>.<var> == <val>) É | if (trick.detach_units(<simobj>.<var>) == <val>) ... | VARIABLE COMPARISON (TRICK10: MUST REMOVE UNITS) | |||
EVENTS / MALFUNCTIONS TRICK 7 |
TRICK 10 | DESCRIPTION | |||
begin_event <event_name> { | <event_name> = trick.new_event("<event_name>") | DECLARE AN EVENT | |||
condition : <variable|val>
<logic_op>|trip: <variable|val> [slope: +|-] [tolerance: <val>] ; |
<event_name>.condition(<index>,
"<input text string>") (trip, slope, tolerance NOT IMPLEMENTED) |
EVENT CONDITION (AT LEAST 1 IS REQUIRED) | |||
[condition: ... ;] | [<event_name>.condition(<index+1>, "<input text string>")] | ADDITIONAL CONDITION(S) | |||
action { <any legal input statements> } |
<event_name>.action(<index>, "<input text string>") | EVENT ACTION (ONLY 1 IN TRICK7; AT LEAST 1 IN TRICK10) | |||
[<event_name>.action(<index+1>, "<input text string>")] | ADDITIONAL ACTION(S) | ||||
[dt = 1.0|<sec> ;] | <event_name>.set_cycle(1.0|<sec>) | EVENT CYCLE TIME | |||
[priority = <val> ;] | NOT IMPLEMENTED | EVAL PRIORITY OF EVENT WITH RESPECT TO OTHER EVENTS AT SAME TIME | |||
[active = On|Off ;] | <event_name>.activate() OR <event_name>.deactivate() | ACTIVATE/DEACTIVATE EVENT EVALUATION | |||
[group = all | any <num> ;] | <event_name>.condition_any() (<num>=1 only!) OR <event_name>.condition_all() |
HOW TO EVALUATE MULTIPLE EVENT CONDITIONS (TRICK7: FOR "ANY", YOU CAN SPECIFY <num> CONDITIONS TO THAT MUST BE TRUE; TRICK10: <num> IS 1 FOR THE "ANY" CASE.) | |||
} ; // end of event | trick.add_event(<event_name>) | END EVENT AND ADD IT TO TRICK'S LIST OF EVENTS | |||
begin malfunction <malf_name> { | <malf_name> = trick.new_event("<malf_name>") | DECLARE A MALFUNCTION (IMPLEMENTED AS EVENT IN TRICK10) | |||
trigger { condition: <syntax same as event> |job: <malfunction_trigger_jobname> ; insert_before|insert_after: <job_name> ; hold: On|Off ; } |
<malf_name>.condition(<index>,
"<input text string>") OR <malf_name>.condition_job(<index>, "<job name>") OR <malf_name>.condition_var(<index>, "<variable name>") <malf_name>.condition_hold_on(<index>) OR <malf_name>.condition_hold_off(<index>) insertion is done for whole event, not per trigger or action: see below |
MALFUNCTION "TRIGGER" CONDITION OR JOB (AT
LEAST 1 REQUIRED) HOLD OPTION TO KEEP CONDITION TRUE WHEN IT BECOMES TRUE |
|||
[trigger { ... }] | [<malf_name>.condition(<index+1>,
"<input text string>") OR <malf_name>.condition_job(<index+1>, "<job name>") OR <malf_name>.condition_var(<index+1>, "<variable name>")] |
ADDITIONAL MALFUNCTION TRIGGER CONDITION(S) | |||
action { insert_before|insert_after: <job_name> ; <any legal input statements> } |<variable> { insert_before|insert_after: <job_name> ; [values: <new_value> ;] [scale_factor: <scale_value> ;] [bias: <bias_value> ;] [units: {<units>} ;] } |call <malfunction_jobname> before|after <job_name> ; |job <job_name> On|Off ; |
<malf_name>.action(<index>,
"<input text string>") OR <malf_name>.action_job(<index>, "<job name>") OR <malf_name>.action_job_on(<index>, "<job name>") OR <malf_name>.action_job_off(<index>, "<job name>") (use rti_add/rti_fire to set variables -- see below) insertion is done for whole event, not per trigger or action: see below |
MALFUNCTION ACTION | |||
[action {É}|<variable {É}|callÉ|jobÉ] | [<malf_name>.action(<index+1>,
"<input text string>") OR <malf_name>.action_job(<index+1>, "<job name>"] |
ADDITIONAL MALFUNCTION ACTION(S) | |||
} ; // end of malfunction | trick.add_event(<malf_name>) OR trick.add_event_before(<malf_name>, "<job_name>") OR trick.add_event_after(<malf_name>, "<job_name>") |
END MALFUNCTION (TRICK10: INSERT IT IN JOB QUEUE AT TOP FRAME, OR BEFORE A JOB, OR AFTER A JOB) | |||
edit malfunction <malf_name> { É } | <malf_name>.action... OR <malf_name>.condtion... | CHANGE PART(S) OF A MALFUNCTION | |||
delete malfunction <malf_name> ; | trick.delete_event(<malf_name>) | DELETE A MALFUNCTION | |||
malfunction_cmd
<malf_name> disable_trigger ; OR malfunction_cmd <malf_name> enable_trigger ; |
<malf_name>.condition_disable(<index>)
OR <malf_name>.condition_enable(<index>) |
DISABLE/ENABLE MALFUNCTION TRIGGER EVALUATION (TRICK7: ALL OR NONE, TRICK10: SETTABLE PER TRIGGER) | |||
<malf_name>.action_disable(<index>)
OR <malf_name>.action_enable(<index>) |
DISABLE/ENABLE MALFUNCTION ACTION | ||||
malfunction_cmd <malf_name> manual_on ; | <malf_name>.manual_on() | MANUALLY SET MALFUNCTION AS FIRED/HOLD ON: ACTIONS RUN EACH CYCLE | |||
<malf_name>.manual_fire() | MANUALLY SET MALFUNCTION AS FIRED: ACTIONS RUN ONCE NOW | ||||
malfunction_cmd <malf_name> manual_off ; | <malf_name>.manual_off() | MANUALLY SET MALFUNCTION AS NOT FIRED: ACTIONS WILL NOT RUN | |||
malfunction_cmd <malf_name> remove_manual ; | <malf_name>.manual_done() | EXIT MANUAL MODE FOR THIS MALFUNCTION, RETURN TO NORMAL EVAL | |||
trick.rti_add_int("<variable name>",
<val>) OR trick.rti_add_float("<variable name>", <val>) |
ADD NEW VARIABLE VALUES TO A TRICK INTERNAL QUEUE, TO BE "INJECTED" INTO THE SIM WITH RTI_FIRE(). | ||||
trick.rti_fire() | SET ALL SIM VARIABLES THAT WERE RTI_ADDED TO THEIR NEW VALUES, OCCURS AT TOP OF NEXT FRAME BEFORE ANY OTHER JOBS ARE STARTED SO THE VARIABLE SETTINGS ARE THREAD SAFE. | ||||
SYS EXEC IN TRICK 7 |
TRICK 10 | DESCRIPTION | |||
sys.exec.in.attach_debugger = Yes|No ; | trick.exec_set_attach_debugger(True|False) | ATTACH DEBUGGER IN CASE OF SEG FAULT (LINUX ONLY) | |||
sys.exec.in.checkpoint_cpu_number = <n> ; | trick.checkpoint_cpu(<n>) | USE CPU # <n> FOR CHECKPOINT CHILD JOB | |||
sys.exec.in.debugger_command = "/usr/bin/gdb|<mydebugger>" ; | trick.exec_set_debugger_command("/usr/bin/gdb|<mydebugger>") | THE DEBUGGER COMMAND | |||
sys.exec.in.echo_job = Yes|No ; | trick.echo_jobs_on() OR trick.echo_jobs_off() | ECHO NAMES OF CALLED JOBS DURING EXECUTION | |||
sys.exec.in.enable_cpu_stats = Yes|No ; | NOT IMPLEMENTED | PRINT RUNTIME CPU & MEMORY USAGE STATS AT SHUTDOWN | |||
sys.exec.in.enable_freeze = Yes|No ; | trick.exec_set_enable_freeze(True|False) | ENABLE CTRL-C FREEZE MODE TOGGLING | |||
sys.exec.in.enable_init_stepping = Yes|No ; | NOT IMPLEMENTED | ENABLE INITIALIZATION JOB PHASE STEPPING IN SIM CONTROL PANEL | |||
sys.exec.in.enable_var_server = Yes|No ; | trick.set_var_server_enabled(True|False) | ENABLE THE VARIABLE SERVER | |||
sys.exec.in.end_checkpoint = Yes|No ; | trick.checkpoint_end(True|False) | DUMP CHECKPOINT AT SHUTDOWN | |||
sys.exec.in.frame_log = Yes|No ; | trick.frame_log_on() OR trick.fame_log_off() | RECORD JOB TIMING INFO FOR EACH REALTIME FRAME | |||
sys.exec.in.frame_log_max_samples = 1000|<n> ; | trick.frame_log_set_max_samples = 100000|<n> | ONLY RECORD MAX OF <n> JOB TIMING SAMPLES | |||
sys.exec.in.frame_log_start_time = 0.0|<sec> ; | NOT IMPLEMENTED; use frame_log_on/frame_log_off with read | SIM TIME TO START JOB TIMING SAMPLES | |||
sys.exec.in.freeze_cycle = 0.9999|<sec> ; | trick.exec_set_freeze_frame(1.0|<sec>) | FREEZE JOB CYCLE TIME | |||
sys.exec.in.gmt_ref.day = 0|<n> ; | NOT IMPLEMENTED | GMT DAY SHOWN IN SIM CONTROL PANEL | |||
sys.exec.in.gmt_ref.hour = 0|<n> ; | NOT IMPLEMENTED | GMT HOUR SHOWN IN SIM CONTROL PANEL | |||
sys.exec.in.gmt_ref.min = 0|<n> ; | NOT IMPLEMENTED | GMT MINUTE SHOWN IN SIM CONTROL PANEL | |||
sys.exec.in.gmt_ref.sec = 0.0|<n> ; | NOT IMPLEMENTED | GMT SECOND SHOWN IN SIM CONTROL PANEL | |||
sys.exec.in.hexflt_checkpoint = Yes|No ; | trick.TMM_hexfloat_checkpoint(True|False) | PUT FLOATS/DOUBLES IN HEX FORMAT WHEN CHECKPOINTING TO PRESERVE PRECISION | |||
sys.exec.in.met_ref.day = 0|<n> ; | NOT IMPLEMENTED | MET DAY SHOWN IN SIM CONTROL PANEL | |||
sys.exec.in.met_ref.hour = 0|<n> ; | NOT IMPLEMENTED | MET HOUR SHOWN IN SIM CONTROL PANEL | |||
sys.exec.in.met_ref.min = 0|<n> ; | NOT IMPLEMENTED | MET MINUTE SHOWN IN SIM CONTROL PANEL | |||
sys.exec.in.met_ref.sec = 0.0|<n> ; | NOT IMPLEMENTED | MET SECOND SHOWN IN SIM CONTROL PANEL | |||
sys.exec.in.mtv = Yes|No ; | trick.malfunctions_trick_view_set_enabled(True|False) | START TRICK MTV AUTOMATICALLY | |||
sys.exec.in.output_dir_timestamped = Yes|No ; | trick.output_dir_timestamped_on() OR trick.output_dir_timestamped_off() |
SAVE RUN DATA FILES IN SUBDIR DATA_<time> | |||
sys.exec.in.post_init_checkpoint = Yes|No ; | trick.checkpoint_post_init(True|False) | DUMP CHECKPOINT AFTER INITIALIZATION JOBS RUN | |||
sys.exec.in.pre_init_checkpoint = Yes|No ; | trick.checkpoint_pre_init(True|False) | DUMP CHECKPOINT BEFORE INITIALIZATION JOBS RUN | |||
sys.exec.in.reduced_checkpoint = Yes|No ; | trick.TMM_reduced_checkpoint(True|False) | ONLY DUMP NON-ZERO VALUES AT CHECKPOINT | |||
sys.exec.in.rt_clock = Gettimeofday|GMT|EXTERNAL ; | N/A : derive your class from Trick's Clock class (see GetTimeOfDayClock) | REALTIME CLOCK OPTION | |||
sys.exec.in.rt_clock_ratio = 1.0|<sec> ; | real_time.gtod_clock.rt_clock_ratio = 1.0|<sec> | SIMULATION EXECUTION SPEED WRT REALTIME | |||
sys.exec.in.rt_cpu_number[<id>] = 0|<n> ; sys.exec.in.rt_lock_to_cpu[<id>] = Yes|No ; |
trick.exec_set_thread_cpu_affinity(<id>, <n>) | RUN PROCESS <id> ONLY ON CPU # <n> | |||
sys.exec.in.rt_enable_clock_reset = Yes|No ; | NOT IMPLEMENTED | AUTOMATICALLY ADJUST CLOCK WHEN ITIMERS USED (PRIOR TO LINUX 2.6) | |||
sys.exec.in.rt_exttimer = Yes|No ; | N/A : derive your class from Trick's Timer class (see ITimer) | ALLOW EXTERNAL TIMER INTERRUPTS TO CONTROL REALTIME | |||
sys.exec.in.rt_isolate_proc[<id>] = Yes|No ; | NOT IMPLEMENTED | ISOLATE PROCESS <id>'s CPU FROM OTHER INTERRUPTS/PROCESSES | |||
sys.exec.in.rt_itimer = Yes|No ; sys.exec.in.rt_itimer_pause = Yes|No ; |
trick.itimer_enable() OR trick.itimer_disable() | TURN ITIMER ON AND USE PAUSE() | |||
sys.exec.in.rt_itimer_frame {s} = 1.0e37|<sec> ; | N/A : it is set to same as rt_software_frame | ITIMER FRAME: DELTA TIME BETWEEN ITIMER SIGNALS | |||
sys.exec.in.rt_lock_memory[<id>] = Yes|No ; | trick.exec_set_lock_memory(True|False) | LOCK PROCESS <id> IN MEMORY (NOTE NO <id> IN TRICK 10, ALL LOCKED) | |||
sys.exec.in.rt_max_overrun_cnt = 100000000|<n> ; | real_time.rt_sync.rt_max_overrun_cnt = 100000000|<n> | MAX CONSECTUTIVE OVERRUNS ALLOWED BEFORE SHUTDOWN | |||
sys.exec.in.rt_max_overrun_time = 1.0e37|<sec> ; | real_time.rt_sync.rt_max_overrun_time = 1.0e37|<sec> | MAX OVERRUN TIME PER ANY FRAME BEFORE SHUTDOWN | |||
sys.exec.in.rt_nap = Yes|No ; | trick.exec_set_rt_nap(True|False) | RELEASE PROCESSOR WHEN WAITING FOR REALTIME OR CHILDREN | |||
sys.exec.in.rt_overrun_freeze = Yes|No ; | real_time.rt_sync.rt_overrun_freeze = True|False | FREEZE INSTEAD OF SHUTDOWN WHEN MAX OVERRUN CNT/TIME | |||
sys.exec.in.rt_priority[<id>]
= 20|<n> ; sys.exec.in.rt_nond_pri[<id>] = Yes|No ; |
trick.exec_set_thread_priority(<id>, 0|<n>) | PROCESS <id>'s SYSTEM SCHEDULING (NON-DEGRADING) PRIORITY | |||
sys.exec.in.rt_semaphores[<id>] = Yes|No ; | IMPLEMENTED but not settable, all children default to True | USE PTHREAD MUTEXES WHEN CHILDREN ARE IDLE | |||
sys.exec.in.rt_software_frame = 1.0e37|<sec> ; | trick.real_time_enable()
OR trick.real_time_disable() trick.exec_set_software_frame(1.0|<sec>) |
TURN REALTIME ON/OFF & SET REALTIME FRAME | |||
trick.exec_set_thread_process_type(<id>, trick.PROCESS_TYPE_SCHEDULED| trick.PROCESS_TYPE_ASYNC_CHILD| trick.PROCESS_TYPE_AMF_CHILD) |
SCHEDULING TYPE FOR CHILD THREAD <id> | ||||
trick.exec_set_thread_amf_cycle_time(<id>, <sec>) | RATE AT WHICH TO SYNC AMF CHILD(REN) THREAD WITH MAIN THREAD | ||||
sys.exec.in.safestore_checkpoint = Yes|No ; | trick.checkpoint_safestore_set_enabled(True|False) | DUMP CHECKPOINT PERIODICALLY | |||
sys.exec.in.safestore_period = <sec> ; | trick.checkpoint_safestore(<sec>) | THE PERIOD TO DUMP SAFESTORE CHECKPOINT | |||
sys.exec.in.shutdown_wait_async = Yes|No ; | trick.exec_set_thread_async_wait(<id>, True|False) | WAIT FOR CHILD (TRICK7: ALL, TRICK10: <id>) BEFORE SHUTDOWN JOBS RUN | |||
sys.exec.in.sim_name = "<my_sim_name>" ; | message.mpublisher.sim_name = "<my_sim_name>" | USER PROVIDED SIMULATION NAME TO DISPLAY IN MSGS (DEFAULT IS BLANK) | |||
sys.exec.in.stack_trace = Yes|No ; | trick.exec_set_stack_trace(True|False) | PRINT DEBUGGER STACK TRACE IF SEG FAULT | |||
sys.exec.in.stripchart_input_file = "<mystrip_filename>" ; | trick_vs.stripchart.set_input_file("<mystrip_filename>") | LAUNCH STRIPCHART WITH FILE SPECIFYING STRIPCHART VARIABLES | |||
sys.exec.in.stripchart_sample_rate = 0.1|<sec> ; | NOT IMPLEMENTED | RATE AT WHICH STRIPCHART VARIABLES ARE SAMPLED | |||
sys.exec.in.time_tic = 0.000000001|<sec> ; | trick.exec_set_time_tic_value(1000000|<val>) | SIMULATION TIME RESOLUTION (TRICK10: 1/<val> IS A TIC) | |||
sys.exec.in.trap_sigbus = Yes|No ; | trick.exec_set_trap_sigbus(True|False) | ENABLE TRAP OF SIGBUS SIGNAL & GRACEFUL SHUTDOWN | |||
sys.exec.in.trap_sigfpe = Yes|No ; | trick.exec_set_trap_sigfpe(True|False) | ENABLE TRAP OF SIGFPE SIGNAL & GRACEFUL SHUTDOWN | |||
sys.exec.in.trap_sigsegv = Yes|No ; | trick.exec_set_trap_sigsegv(True|False) | ENABLE TRAP OF SIGSEGV SIGNAL & GRACEFUL SHUTDOWN | |||
sys.exec.in.tv = Yes|No ; | trick.trick_view_set_enabled(True|False) | START TRICK TV AUTOMATICALLY | |||
sys.exec.in.tv_input_file = "<mytv_filename>" ; | trick.trick_view_add_auto_load_file("<mytv_filename>") | AUXILIARY INPUT FILE SPECIFYING TV VARIABLES | |||
SYS EXEC WORK TRICK 7 |
TRICK 10 | DESCRIPTION | |||
sys.exec.work.event_malf_broadcast = Yes|No ; | trick.set_event_info_msg_on()
OR trick.set_event_info_msg_off() |
SAVE WHEN EVENT/MALF TRIGGERED TO SEND_HS FILE IN RUN DIR (TRICK10: MESSAGES ARE PUBLISHED SO THEY ARE SENT TO THE SCREEN IN ADDITION TO THE SEND_HS FILE) | |||
sys.exec.work.cmdline_name | trick.command_line_args_get_cmdline_name() | COMMAND LINE EXECUTABLE COMMAND USED TO INVOKE SIM | |||
sys.exec.work.default_dir | trick.command_line_args_get_default_dir() | CURRENT SIMULATION DIRECTORY NAME | |||
sys.exec.work.freeze_command = Yes|No ; | trick.exec_set_freeze_command(True|False) | START SIM IN FREEZE MODE | |||
sys.exec.work.include_dir | N/A : use Python sys.path for includes | COMMAND LINE ARGUMENT (-I) INCLUDE PATH NAME (TRICK7 ONLY) | |||
sys.exec.work.input_file | trick.command_line_args_get_input_file() | COMMAND LINE ARGUMENT RUN INPUT FILE NAME | |||
sys.exec.work.mode | trick.exec_get_mode() | CURRENT SIMULATION COMMAND MODE | |||
sys.exec.work.output_dir | GET: trick.command_line_args_get_output_dir() SET: trick.set_output_dir("RUN_<rundir>|<mydir>") |
COMMAND LINE ARGUMENT (-O) OUTPUT DIRECTORY NAME WHERE SIM OUTPUT IS STORED | |||
sys.exec.work.run_dir | trick_cmd_args.cmd_args.run_dir | COMMAND LINE ARGUMENT RUN DIRECTORY NAME | |||
sys.exec.work.save_send_hs_buffer = Yes|No ; | trick.message_file_subscribe() OR trick.message_file_unsubscribe() | SAVE HEALTH & STATUS (H&S) MSGS TO SEND_HS FILE IN RUN DIR | |||
sys.exec.work.save_var_server_msgs = Yes|No ; | trick.set_var_server_info_msg_on()
OR trick.set_var_server_info_msg_off() |
SAVE VARIABLE SERVER MESSAGES TO SEND_HS FILE IN RUN DIR (TRICK10: MESSAGES ARE PUBLISHED SO THEY ARE SENT TO THE SCREEN IN ADDITION TO THE SEND_HS FILE) | |||
sys.exec.work.send_hs_buffer_size = 1000000|<n> ; | NOT IMPLEMENTED | BUFFER SIZE FOR SAVING H&S | |||
sys.exec.work.send_hs_buffering
= DR_Buffer|DR_No_Buffer|DR_Ring_Buffer ; |
NOT IMPLEMENTED | BUFFER METHOD FOR SAVING H&S (SAME AS DATA RECORDING) | |||
sys.exec.work.terminate_time | trick.exec_get_terminate_time() | SIMULATION TERMINATION TIME | |||
sys.exec.work.var_serve_listen_dev.port = 7000|<n> ; | <my_int> =
trick.var_server_get_port() trick.var_server_set_port(<my_int>) default is random port set by system |
PORT ON WHICH CLIENTS CONNECT TO THE VARIABLE SERVER | |||
sys.exec.work.verify_input = Yes|No ; | Use the -d command line option: S_main_<hostcpu>.exe <run_input_file> -d | ECHO INPUT FILE AS IT IS PARSED WITHOUT EXECUTING SIM | |||
sys.exec.work.xtra_derivative = Yes|No ; | <simobj>.<myinteg>.set_last_step_deriv(True|False) | FORCE DERIVATIVE JOBS TO RUN AFTER LAST PASS OF INTEGRATION JOBS | |||
SYS EXEC MISCELLANEOUS TRICK 7 |
TRICK 10 | DESCRIPTION | |||
sys.exec.ip.echo_input = Yes|No ; | NOT IMPLEMENTED | ECHO INPUT FILE AS IT IS PARSED | |||
sys.exec.ip.print_deprecated = Yes|No ; | NOT IMPLEMENTED | DISPLAY WARNING WHEN DEPRECATED VARIABLE USED | |||
sys.exec.out.time | trick.exec_get_sim_time() | CURRENT SIMULATION TIME | |||
sys.exec.sim_com.monitor_on = Yes|No ; | trick.sim_control_panel_set_enabled(True|False) | TURN SIM CONTROL PANEL ON | |||
SYS EXEC DATA RECORDING TRICK 7 |
TRICK 10 | DESCRIPTION | |||
sys.exec.in.synchronous_dr_writer = Yes|No ; | NOT IMPLEMENTED; DR_Buffer groups are written asynchronously | MAKE THE DATA RECORDING WRITER FUNCTION SYNCHRONOUS | |||
sys.exec.in.user_dr_writer = Yes|No ; | N/A : derive your class from Trick's DataRecordBuffering class (see DataRecordThreaded) | CALL USER PROVIDED DATA RECORDING WRITER FUNCTION INSTEAD OF TRICK'S | |||
sys.exec.record.directory = "RUN_<rundir>|<mydir>" ; | trick.set_output_dir("RUN_<rundir>|<mydir>") | DIRECTORY WHERE RECORDING DATA FILES ARE SAVED | |||
sys.exec.record.group[<id>].ascii_label[<n>] = "<mylabel>" ; | NOT IMPLEMENTED | CHANGED VARIABLE'S DISPLAYED NAME (DR_ASCII) | |||
sys.exec.record.group[<id>].buffering
= DR_Buffer|DR_No_Buffer|DR_Ring_Buffer ; |
trick.add_data_record_group(<groupobj>, trick.DR_Buffer|trick.DR_No_Buffer|trick.DR_Ring_Buffer) | BUFFER METHOD FOR RECORDING DATA | |||
sys.exec.record.group[<id>].change_ref[<n>] = "<varname>" ; | <groupobj>.add_change_variable("<varname>") | TRICK VARIABLE NAMES TO TRIGGER RECORDING (DR_CHANGES) | |||
sys.exec.record.group[<id>].cycle = 1.0|<sec> ; | <groupobj>.set_cycle(0.1|<sec) | RATE AT WHICH DATA IS RECORDED FOR THIS GROUP | |||
sys.exec.record.group[<id>].freq
= DR_Always|DR_Changes|DR_Changes_Step ; |
<groupobj>.set_freq( trick.DR_Always|trick.DR_Changes|trick.DR_Changes_Step) |
SPECIFY WHEN DATA IS RECORDED | |||
sys.exec.record.group[<id>].max_buffer_size = 1000000|<n> ; | <groupobj>.set_max_buffer_size(100000|<n>) | BUFFER SIZE FOR RECORDING GROUP DATA | |||
sys.exec.record.group[<id>].name
= "<mygroupname>" ; sys.exec.record.group[<id>].format = DR_Binary|DR_Ascii|Dr_Fixed_Ascii ; |
<groupobj> =
trick.DRBinary("<mygroupname>") OR <groupobj> = trick.DRAscii("<mygroupname>") OR <groupobj> = trick.DRHDF5("<mygroupname>") |
SPECIFY UNIQUE NAME FOR
GROUP OUTPUT FILE SPECIFY RECORDING OUTPUT FORMAT |
|||
sys.exec.record.group[<id>].record = Yes|No ; | <groupobj>.enable() OR <groupobj>.disable() | ENABLE RECORDING OF DATA | |||
sys.exec.record.group[<id>].ref[<n>] = "<varname>" ; | <groupobj>.add_variable("<varname>") | TRICK VARIABLE NAMES TO RECORD | |||
sys.exec.record.group[<id>].single_prec_only = Yes|No ; | <groupobj>.set_single_prec_only(True|False) | RECORD ALL DOUBLES AS FLOATS | |||
sys.exec.record.group[<id>].start = 0.0|<sec>; | NOT IMPLEMENTED; use enable/disable with read | SIM TIME TO START RECORDING | |||
sys.exec.record.group[<id>].struct_extract_bits = Yes|No ; | NOT IMPLEMENTED | EXTRACT BIT FIELDS WHEN RECORDING AN ENTIRE STRUCTURE | |||
sys.exec.record.group[<id>].user_alloc = Yes|No ; | NOT IMPLEMENTED this may work in Trick10 so not needed? | SET UP RECORDING AFTER INIT JOBS (FOR USER ALLOCED VARIABLE) | |||
sys.exec.record.num_groups = "16|<n>" ; | N/A : groups are instantiated as needed | NUMBER OF RECORDING GROUPS (16 ALLOCATED BY TRICK) | |||
sys.exec.record.terminate_on_bad_ref = Yes|No ; | NOT IMPLEMENTED | TERMINATE SIM WHEN RECORDING VARIABLE CANNOT BE FOUND | |||
<groupobj>.set_job_class("data_record|<jobclass>") | JOB CLASS OF THE DATA RECORDING JOB FOR THIS GROUP | ||||
SYS EXEC MASTER / SLAVE TRICK 7 |
TRICK 10 | DESCRIPTION | |||
sys.exec.in.activate_slave[<n>] = Yes|No ; | <new_slave> =
trick.SlaveInfo() master_slave.master.add_slave(<new_slave>) |
ACTIVATE SLAVE # <n> (TRICK10: CREATE SLAVE OBJECT AND ACTIVATE) | |||
sys.exec.in.ms_sync = No_sync|Master_sync|Slave_sync ; | trick.ms_master_enable() OR trick.ms_master_disable() (sync types are N/A because the master / slave code is separate) |
RUN MASTER SIM ONLY (DEFAULT), OR RUN & SYNC WITH SLAVES | |||
sys.exec.in.remote_shell
= TRICK_SSH|TRICK_RSH|TRICK_USER_REMOTE_SH |
<new_slave>.remote_shell
= trick.TRICK_SSH|trick.TRICK_RSH| trick.TRICK_USER_REMOTE_SH |
TYPE OF SHELL TO BRING UP
SLAVE(S) WITH; THE COMMAND STRING = <remote_shell> <remote_shell_args> <machine_name> setenv DISPLAY <display_name>; cd <sim_path>; <S_main_name> <run_input_file> <connection args> -u <other_args> & |
|||
sys.exec.in.remote_shell_args = "<args>" ; | <new_slave>.remote_shell_args = "<args>" | OPTIONAL ARGUMENTS TO USE WITH remote_shell CMD | |||
sys.exec.in.rt_sync_frame = 1.0e37|<sec> ; | NOT IMPLEMENTED; sync every frame (according to master) | MASTER/SLAVE SYNC FRAME | |||
sys.exec.in.slave_cnt = <num> ; | N/A do not set because slaves instantiated as
needed, but can get : <my_int> = master_slave.master.num_slaves |
NUMBER OF SLAVES DEFINED FOR A MASTER/SLAVE SIM | |||
sys.exec.in.slaves[<n>].machine_display
= $DISPLAY|"<display>" ; |
<new_slave>.machine_display = $DISPLAY|"<display>" | SLAVE'S X DISPLAY NAME | |||
sys.exec.in.slaves[<n>].machine_name
= gethostname()|"<name>" ; |
<new_slave>.machine_name = "localhost|<name>" | SLAVE'S REMOTE CONNECTION HOSTNAME | |||
<my_int> = sys.exec.in.slaves[<n>].overruns ; | NOT IMPLEMENTED | SLAVE'S NUMBER OF OVERRUNS THAT HAVE OCCURRED | |||
sys.exec.in.slaves[<n>].S_main_args[25]
= "<rundir>/<inputfile> <args>" ; |
<new_slave>.run_input_file =
"<rundir>/<inputfile>" <new_slave>.other_args = "<args>" |
SLAVE'S REMOTE EXECUTABLE RUN INPUT FILE AND CMD LINE -u ARGUMENTS | |||
sys.exec.in.slaves[<n>].S_main_name
= "./S_main_${TRICK_HOST_CPU}.exe|<name>" ; |
<new_slave>.S_main_name
= "./S_main_${TRICK_HOST_CPU}.exe|<name>" |
SLAVE'S REMOTE EXECUTABLE NAME | |||
sys.exec.in.slaves[<n>].sim_path = "<dir>" ; | <new_slave>.sim_path = "<dir>" | SLAVE'S REMOTE EXECUTABLE DIRECTORY PATH | |||
sys.exec.in.sync_error_terminate = Yes|No ; | <new_slave>.sync_error_terminate = False|True | MASTER/SLAVE SIM WILL TERMINATE ON SYNC ERROR | |||
sys.exec.in.sync_wait_limit = 1.0e37|<sec> ; | <new_slave>.sync_wait_limit = 0.0|<sec> | MAXIMUM TIME MASTER/SLAVE CONNECTION WILL WAIT FOR SYNC SIGNAL | |||
sys.exec.in.user_remote_shell = "<shell_cmd>" ; | <new_slave>.remote_shell = "<shell_cmd>" | USER DEFINED REMOTE SHELL CMD WHEN remote_shell IS TRICK_USER_REMOTE_SH | |||
SYS EXEC MONTE CARLO TRICK 7 |
TRICK 10 | DESCRIPTION | |||
sys.exec.monte.in.activate = Yes|No ; | trick.mc_set_enabled(True|False) | ACTIVATE MONTE CARLO | |||
sys.exec.monte.in.dryrun = Yes|No ; | trick.mc_set_dry_run(True|False) | GENERATE monte_runs FILE CONTAINING RUNS THAT WOULD OCCUR WITHOUT ACTUALLY RUNNING | |||
sys.exec.monte.in.input_files[<n>] = "<monte_input_file>" ; | N/A monte input data set up using input file commands (see section 7.6) | AUXILIARY INPUT FILE(S) SPECIFYING MONTE INPUT DATA | |||
sys.exec.monte.in.localhost_as_remote = Yes|No ; | trick.mc_set_localhost_as_remote(True|False) | IF LOCALHOST SPECIFIED AS A SLAVE, USE REMOTE SHELL INSTEAD OF LOCAL SHELL | |||
sys.exec.monte.in.max_tries = 3|<n> ; | trick.mc_set_max_tries(2|<n>) | NUMBER OF TIMES TO TRY DISPATCHING SLAVE BEFORE GIVING UP | |||
sys.exec.monte.in.sequential_runs = Yes|No ; | N/A the Trick 10 implementation works implilcitly without this option | DISPATCH SLAVES SEQUENTIALLY (NEEDED WHEN OPTIMIZING WITH CALC VARIABLES) | |||
sys.exec.monte.in.slaves = alloc(<number of slaves>) ; | <new_slave> =
trick.MonteSlave("<machine_name>") trick_sys.sched.add_slave(<new_slave>) |
CREATE SLAVE(S) TO PERFORM RUNS | |||
sys.exec.monte.in.slaves[<n>].disable = Yes|No ; | trick_sys.sched.disable_slave("<machine_name>", True|False) | DO NOT USE THIS SLAVE | |||
sys.exec.monte.in.slaves[<n>].machine_name | <new_slave>.machine_name | SAME AS IN MASTER/SLAVE - SEE ABOVE | |||
sys.exec.monte.in.slaves[<n>].multiplier = 1|<n> ; | <new_slave>.multiplier = 1|<n> | CONSIDER SLAVE TO BE TIMED OUT multiplier TIMES FASTER THAN timeout VALUE | |||
sys.exec.monte.in.slaves[<n>].remote_shell | <new_slave>.remote_shell | SAME AS IN MASTER/SLAVE -
SEE ABOVE; THE COMMAND STRING = <remote_shell> <remote_shell_args> <machine_name> <user_cmd_string>; cd <sim_path>; <S_main_name> <run_input_file> <misc monte args> -O & |
|||
sys.exec.monte.in.slaves[<n>].remote_shell_args | <new_slave>.remote_shell_args | SAME AS IN MASTER/SLAVE - SEE ABOVE | |||
sys.exec.monte.in.slaves[<n>].S_main_name | <new_slave>.S_main_name | SAME AS IN MASTER/SLAVE - SEE ABOVE | |||
sys.exec.monte.in.slaves[<n>].sim_path | <new_slave>.sim_path | SAME AS IN MASTER/SLAVE - SEE ABOVE | |||
sys.exec.monte.in.slaves[<n>].user_remote_shell | <new_slave>.user_remote_shell | SAME AS IN MASTER/SLAVE - SEE ABOVE | |||
sys.exec.monte.in.timeout = 120.0|<sec> ; | trick.mc_set_timeout(120.0|<sec>) | TIME GIVEN TO DISPATCH & RECEIVE RESULTS FROM EACH SLAVE | |||
sys.exec.monte.in.user_cmd_string = "<args>" ; | trick.mc_set_user_cmd_string("<args>") | OPTIONAL ARGUMENTS APPENDED TO END OF remote_shell CMD | |||
TRICK 10 SWIG NOTES |
|||||
Certain advanced features of C++ such as nested classes are not yet supported. | |||||
Swig cannot provide access to C++ private/protected
data. You can get around this if you need to assign private/protected data by
using Trick's checkpoint reader: trick.read_checkpoint_from_string("<private_var> = <val>;") |
|||||