2. HOW POEMS WORKS
2.1. Program Organization
The POEMS system consists of six parts: the front-end script (poems.cmd), which controls
the whole process, communicating with the user, doing the less CPU-intensive tasks (such
as CAD file generation) and controlling the rest; the FDTD simulation engine (FIDO or
TEMPEST), which takes a simulation description file and produces binary files of simulated
E and H field values; the postprocessor (EMPOST), which takes those huge binary files and
produces secondary binary data and pictures, including VIS5D interactive visualizations;
Vis5D itself, an open-source data visualization program running under the X Window
system; and, optionally, a cluster control script (fidossh) that distributes parameters,
starts the simulator instances, and collects data afterwards. We’ll examine these in turn.
2.2. The Front-End Script: poems.cmd
The front end script poems.cmd is the part of POEMS that the user will interact with
(almost exclusively). It parses the input file, performs error checking, and handles all the
symbols and equations. It generates the intermediate files that are used as input by
FIDO/TEMPEST and EMPOST, and produces log files and console output to keep the user
informed as to the progress of the run. The script is written in REXX, whose advanced
parsing capabilities and very flexible stem processing made it a natural choice. Speed is
not a serious issue, since only a tiny part of the run time is spent in the REXX code;
almost all is used in the FDTD simulation.
2.2.1. Script Operation
The concept underlying the script’s design is that the user should be able to optimize or
step anything he likes, in any combination. Therefore, user-defined functions,
expressions, and variables are accepted anywhere an argument is required; as in a math
program, these variables and functions can depend on each other in any fashion
consistent with top-to-bottom parsing of the input file. This is straightforward in a single
simulation run, but is a little more involved where stepping and optimization is being
used: the program cannot make any assumptions about which simulation parameters can
depend on the controlling variables. Accordingly, an optimization or stepping run is
organized as follows.
a. Enter SETUP mode
b. Parse the input file and set all the variables. Note which variables are to be stepped
or optimized (the controlling variables).
c. Enter OPTIMIZE or STEP mode. For each iteration,
(i)Update the controlling variables for the current iteration
(ii) Parse the input file, setting all the variables except the controlling ones. This
preserves all the dependencies.
(iii) Generate the intermediate files for FIDO/TEMPEST and EMPOST, based on the current
values of all the variables.
(iv)Run FIDO/TEMPEST, capturing its console output to a file.
(v)If FIDO/TEMPEST fails, stop. If it succeeds, call EMPOST to generate the inputs to the
6