General HydroStatics
Ship Stability Software
Command of the Week
(New or interesting aspects of GHS that you may not know about)

Array Variables

For users unfamiliar with programming concepts, an array variable is simply a multi-dimensional variable in which multiple values can be stored and accessed via indexing. For example, think of that spreadsheet you're working with: the workspace can be considered a two-dimensional array, where each value in the array is referenced by its row and column index. Not only are arrays a compact way to store data, but they enable efficient algorithms which may be difficult to implement otherwise.

In GHS, array variables are simply a collection of regular user variables with a common prefix. For example, to create a 1x10 "array" one could use:

macro make_array
 variable %2_%1
.make_array(10,1)1 "A"

...where the macro make_array is being called 10 times, each time incrementing the first parameter (%1) by 1 starting at 1. The second parameter (%2) is the array variable prefix. %1 acts as the index, and is appended to the variable name on each loop to create a unique variable name. If we want to look at our collection of array variables, we might use:

variable /list:A_*

...which would list all variables that start with "A_", as yet undefined:

We can then SET, access, or otherwise manipulate any element of an array by specifying its index as part of its name:

macro count
 set %2_%1=%1
.count(10,1)1 "A"
set A_10={A_6} TIMES {A_7}
\\The answer = {A_10}\

But what about higher dimensional arrays? Easy, just append a second index:

macro make_array2
 macro make_column
  variable %3_%%92_%%91=%4
 macro make_row
  .make_column(%2,1)1 %%91
.make_array2 6 7 "A" 0 `6x7 array "A" initialized to 0

But what about matrix operations, like Gaussian elimination and LU decomposition? Not as easy, but we've done it. Just let us know if you're brave enough to try it too.

Questions, comments, or requests?
Contact Creative Systems, Inc.

USA phone: 360-385-6212 Fax: 360-385-6213
Office hours: 7:00 am - 4:00 pm Pacific Time, Monday - Friday

Mailing address:
PO Box 1910
Port Townsend, WA 98368 USA

Click here for an index to this and previous COWs