GoldSim Monthly Webinar Series
Goals Learn the basics of simple scripts Learn the basics of the GoldSim Script Element Not a lesson on numerical methods
What is a Script? A set of instructions Carried out by another program Instructions are executed and something(s) is (usually) returned as output Script languages are easier and faster to code in
Why use the Scripts? Clarify complex logic Nested IF statements Iterate through items of an array Condense equations Repetitive equations Long series of equations Numerical solution required Iterative solvers like bisection
Different Ways in GoldSim GoldSim elements, looping containers Equations in Excel produce output that is read by GoldSim External functions connected to GoldSim DLL Element Write a script inside GoldSim Script Element
Advantages of the Script All in one program Transparent No need to learn a new language
Main Functions Variable definition Variable assignment Flow control (i.e. IF, looping, break) Comments Log Statements
Variable Definition Syntax: Define: peak_price = 0.0 $/m3 Declaration: Number (float: double precision) or Boolean scalar or non-scalar Initialize to a value Description Expose as Output
Variable Assignment Syntax: ~peak_price = 50 $/m3 Result = ~peak_price Local vs. Global variables
For Loop Loop Variable, Start Value, Loop while Condition, Increment by Syntax: FOR (i = 0; ~i < 10; i = ~i + 1) {do some work} END FOR
DO Loop Loop Variable, Start Value, End Value, Increment by Syntax: DO i = 0, 10, 1 {do some work} END DO
REPEAT-UNTIL Loop Loop until true: Some Condition Syntax: REPEAT {do some work} UNTIL (~price > 30 $/m3)
WHILE Loop Loop while true: Some Condition Syntax: WHILE (~price < 10 $/m3) {do some work} END WHILE
BREAK and CONTINUE Only allowed inside Loop structures BREAK Break out of a loop Breaks the nearest enclosing loop CONTINUE Transfer control to the bottom of the loop Used to skip to the next loop without executing block in the loop
Comments Document the operation of the program Intended for others and yourself Max 100 characters Ctrl-Enter extra lines only seen in printout White space
Log Statements Message Message to Run Log No warning Warning Message Warning dialogue message Error Message Simulation is stopped with dialogue message
Prioritize Days By Price Save days as numbers in a vector in order of greatest unit price to lowest. Only show values that meet criteria.
Peak Price Days
Formulation Save all values to an array of days Loop thru the list (array) If the max(list) is <= $0/m3, then done! Stuff the day of max price to temp variable Assign temp to Result Array at current index Remove the current max price from list Loop
Create Table of Best Days Dayprice Best days
Final Result