Geometry Entry
A very usable 2D geometry capability for Field Marshal can be developed
using Python objects. FM geometric objects (GOs) would be composite
entities consisting of other GOs and primitive geometric elements
(PGEs). PGEs would be the foundation elements of geometry input, e.g.
lines, circular arcs, etc. The PGEs are what eventually get plotted and
projected onto grids. The GOs provide a way of managing the geometry
and attaching properties to particular elements.
GOs would have certain “methods” associated with them. An initial list
would include: translate, rotate, scale, duplicate. Methods provide
some very useful capabilities for both geometry construction and for
library use. The GOs would also have “attributes”. Attributes would
include material properties, entry point, exit point, bounding box and
other useful information.
The PGEs would have associated (mathematical) parameters. These would
be the data necessary to uniquely define the geometric entity. In
addition to the parameters PGEs will also require methods, for example
Tangent, Normal, y_FofX ( y = f(x) ) and x_GofY ( x = f -1(y) ). These
methods will be used to locate boundary points on grids.
Geometry input would consist of entering names and parameters in a
“tabbed” table. An example is shown below. Here an object called
“Cathode” is being entered. This object has the “translate” method
applied and has a material “attribute” of PEC (perfect electric
conductor). “Cathode” consists of three additional objects: Emitter,
Focus Electrode and Shank. Each of these objects inherits the methods
and attributes applied to “Cathode”. The three GOs consist of one or
more PGEs. The PGEs would have parameters sufficient to uniquely
specify them.
Cathode
M: Trans=+1.5
A: Mat=PEC
Emitter
arc_cir2 (1.0, 1.0), (2.0, 2.0), (.7, .7)
Focus Electrode
line (2.0, 2.0), (2.0, 3.0)
hline (2.0, 3.0) (4.0)
arc_cir4 (2.0,4.0), (6.0,7.0), (.5, .5)
arc_cir1 (2.0, 2.0),(1.0,1.0), (3.3,3.4)
hline (3.3,3.4), (3.7)
Shank
arc_cir2 (2.0,4.0), (6.0,7.0), (.5, .5)
hline (3.3,3.4), (3.7)
arc_cir4 (2.0,4.0), (6.0,7.0), (.5, .5)
The PGE parameters in this list will generally be either numbers or
empty; however, there are good reasons to provide a bit more
flexibility. Parameter entry will also provide the options “Last”,
“Next” and “Label”. “Last” means pick up the value from the
corresponding last value of the previous PGE (i.e. from the Exit_Point
attribute). For example, a line might need an initial point specified.
The user might choose to get the x-value of that point from the last
x-value of the previous element. In a similar vein, “Next” picks up the
equivalent value from the next PGE (i.e. from the Entry_Point
attribute). The “Label” allows a text label to be used. This can be
used for parametric studies by replacing the label in the text file
with a sequence of values.
To display a geometry, the “tabbed” table is parsed and the resulting
PGEs are written to a text file. All of the methods are applied to the
PGEs during the parsing process and a GO list is attached so that
geometric elements can be linked back to properties. This is the set of
geometric primitives that are then plotted. (Note that for cases where
labels have been used nominal values will have to be provided for
display purposes.) For example:
| col 01 | Col 11 | Col 21 |
|---|
| arc_cir2 | par1, par2, … | GO1, GO2, … |
| line | par1, par2, … | GO1, GO2, … |
| hline | par1, par2, … | GO1, GO2, … |
| arc_cir4 | par1, par2, … | GO1, GO2, … |
| arc_cir1 | par1, par2, … | GO1, GO2, … |
| hline | par1, par2, … | GO1, GO2, … |
| arc_cir2 | par1, par2, … | GO1, GO2, … |
| arc_cir4 | par1, par2, … | GO1, GO2, … |
| hline
| par1, par2, … | GO1, GO2, … |
The tabbed display of objects needs to be changeable to List By Object,
List By Method, and List By Attribute. For example one might want to
see all objects that are perfect electric conductors. The tabbed
display and the plot of the geometry need to be linked so that things
can be highlighted in one window and automatically be highlighted in
the other.
There are details to be filled in here many of which really require trial implementations and testing.
Grid and Boundary Generation
The first step in this process is the creation of a “CutBox”. A CutBox
is a rectangular box outlining a specific portion of the geometry and
linking it to a specific simulation tool. CutBoxes are special
geometric objects with methods and attributes that differ from standard
GOs. They are entered in the tabbed display just like any other GO.
When a CutBox is activated a sub-geometry is created consisting of all
the objects whose BoundingBox attribute intersects the CutBox. Further
processing “trims” the geometric objects so that only the portions
lying within the CutBox are kept. The geometry then consists of the
trimmed objects and the rectangular boundary of the CutBox. At this
point a new window is created with the CutBox geometry and several
input options.
Things have been fairly generic up to this point. To go beyond this
requires that options and data be specialized for the particular tool
that is attached to the CutBox. The text file describing tool variables
(GVT) is loaded into the CUI and presented to the user for parameter
input. It is also necessary to specify what geometry/grid capabilities
the tool has or can deal with. For example:
- Does the tool use geometry elements or boundary points (i.e. does the tool compute its own grid or must it be input)?
-
If the tool requires geometry then must describe how to translate FM
geometry to tool geometry (probably requires a program to do this)
- If the tool requires boundary points then must describe data and format
- Does the tool need grid information that is not contained in the tool’s GVT?
- Can the tool work with grid blocks?
- Can the tool work with multiple grid levels?
- Can the tool work with grid patches?
For tools that do their own gridding, the Poisson Group codes for
example, a translator tool is activated and a compatible geometry file
is generated. The CUI is activated, parameters are entered by the user
and the tool is executed.
For tools that take full advantage of the FM environment, the user is
asked to specify a background grid (square?) and then rectangular grid
blocks. The grid blocks are where the actual gridding and solution will
be done. The blocks must be conformal to the background grid, i.e.
block sides are integral numbers of background cells. Blocks must also
share at least part of one side with another block if more than one
block is used. The user then sets the number of grid refinements for
each block (always a doubling of cells in each direction).
Within grid blocks users are also asked to specify any grid patches.
Grid patches provide enhanced grid resolution over a restricted area
when that level of resolution is not needed over the entire block. A
patch must be contained completely within a grid block and must also be
conformal to the background grid. The user sets the number of
refinements that will be applied to the patch. Patch refinement
actually starts at the highest refinement of the block that contains it
and goes from there. This provides a capability to analyze restricted
areas at very high resolution, e.g. field emitter tips within a larger
device. As the user specifies each of these items (background grid,
blocks, patches, etc.) they are displayed in the geometry plot to
provide visual feedback.
When the user has finished defining the grid blocks and patches then
the boundary is computed, specifically the points of intersection of
each of the PGEs with the block and patch grids at each level of
resolution. The boundary is stored for each grid region at each
resolution for later use. The information that is stored contains a
link for each boundary point back to the PGE (and hence the GO) that
produced it.
Connecting data, geometry and tools
- The entered data must be moved to the simulation codes. This process
will be different for legacy versus new tools. Use numarray for new
tools??? Create input files for legacy codes. (other wrapper tools?)
- Linkage of physical properties (from data entry) to geometry elements
- Linkage of specific (rectangular) areas to specific tools