mandel - display of Mandelbrot and Julia set images
mandel [-fjmopv] [-c <coord>] [-i max_iterations]
[-n num_local_processes] [fname]
Mandel is a program for exploring the Mandelbrot set and displaying
Mandelbrot and Julia images. The demo consists of two executables:
mandel and mandelzoom. The mandel program does mandelbrot calculations
and also displays the resulting images. By default, it does this on a
single host. However, mandel is capable of connecting to remote hosts
which can contribute to the calculations. For this to happen, the
mandelzoom program must exist on the desired remote host(s). mandel can
then cause the remote mandelzoom programs to start executing, and it can
connect to them.
Resource File [Toc] [Back]
When mandel executes, it looks for a file named '.mandelrc,' first in the
current working directory and then in the home directory. This file
contains a list of host names and directory names where mandelzoom can be
found, and also the values of some other options. See the
mandelrc.sample file in the /usr/demos/General_Demos/mandel directory as
If no .mandelrc file exists, mandel simply creates one or more processes
on the local machine to do the calculations, and it connects to these
process using unix pipes. The number of processes depends on the number
Within the .mandelrc file you may specify initial values for some of the
options used by the mandel program. Allowable types of lines are as
1. zoomdir: dirname
"dirname" is the directory name where mandelzoom resides. The
default zoomdir is /usr/demos/General_Demos/mandel.
2. logname: lname
"lname" will be used as the default login name when making
connections to hosts.
3. passwd: defpasswd
This specifies the default passwd to be used with the default login
name. Two quotes ("") denote an empty string.
(Currently passwd is ignored.)
4. remhosts: hostname [-l loginname] [-p passwd] [dirname]
mandelzoom is expected to reside in "dirname" on the host
"hostname." If a directory name is not specified, then zoomdir is
5. color dir: dirname
"dirname" is the pathname of the directory containing mandel color
6. row delta: <n>
7. rows per farmout: <n>
8. interpolate data: "yes" or "no"
9. sparse rows: "yes" or "no" or "use threshold"
10. sparse thresh: <n>
11. num local procs: <n>
This is the number of local process created to do mandel/julia
calculations. This is done entirely within mandel. This count does
not include any mandelzoom executions.
12. rexec timeout: <n>
This is the maximum number of seconds mandel will take in starting
up a mandelzoom execution before it gives up.
13. color distrib: "linear" or "maximize [n]"
where n is 1, 2, or 3 (or n may be omitted).
Default values are used if none of the above are given.
14. A comment line, denoted by a "#" as the first character in a line.
The mandelzoom program can be placed on up to MAXHOSTS remote hosts.
MAXHOSTS is initialized to be 50. For those users who installed the demo
source, MAXHOSTS is defined in mangfx.h.
Options [Toc] [Back]
The mandel program may take options and arguments.
-c <coord> A coordinate is to follow instead of fname.
Coord format: xcorner ycorner side [seedr seedi]
xcorner, ycorner (xcorner, ycorner) = complex coordinate of
the lower left corner of the rectangle. In screen (pixel)
coordinates, the rectangle has corners (0, ymin) and
side side = horizontal length of the complex rectangle.
seedr, seedi (seedr, seedi) = coordinate of the (Julia)
seed point. seedr & seedi exist only in the "extended
format" implied by the -j option.
-f Use a fixed-size window. fname is displayed with the same
size as when it was saved.
-i <n> Specify number of iterations to use for calculations.
-j Do Julia calculations instead of Mandelbrot. Only
applicable if coordinate is given. Also, implies that
coord is an "extended coordinate" containing a seed point.
-m max-precision floating point (128-bits).
-n <n> Number of local (non-network) processes mandel uses for
-o Compatibility with some old IRIS GL programs which use
color cells 256 - 640.
-p Calculation processes will send compressed data. (Useful
if network bandwith is a limitation).
-v Variable-size window.
fname Name of file containing mandelbrot data. If fname is
omitted, the image will be generated.
The mandelzoom program does not take any command line options. However,
it reads various commands from stdin, and it writes mandelbrot data to
Operation [Toc] [Back]
The left mouse button is used to drag out a rectangular area which will
be zoomed. (This operation may be cancelled by pressing either middle
mouse or the ESCAPE key while left mouse is still down.)
The right mouse button brings up the menu. The menu items are as
generate allows you to re-generate the current picture (either
zoomed or not), or to re-generate the previous image. From
this menu, selecting current causes the current picture to
be re-generated. Previous re-creates the previously
displayed picture. First pic displays the first image.
Home displays the initial mandelbrot set. Zoom out allows
you to zoom out from the current image by one of a given
range of zoom values.
change colors allows you to select one of several color ramps.
specifies how mandel maps the number of colors from the
mandel data onto the number of display colors. The choices
maximize colors 1
maximize colors 2
maximize colors 3.
If there are 32768 mandel data colors and, say, 4096
display colors, then linear causes the first 8 colors 0 - 7
to be mapped to color 0 of the display, colors 8 - 15 to be
mapped to display color 1, etc. Unfortunately, the mandel
data for a small rectangle might contain only some of the
possible values 0 - 32767, and then the image displayed can
appear to be mostly all the same color. Choosing one of
the maximize colors selections remedies this situation.
Internally, a histogram is created from the mandel data,
and then the data is mapped to the display such that the
resulting picture should have a good distribution of
colors. As n increases in "maximize colors n", the less
skewed the distribution of colors.
Note that the various "maximize colors n" selections behave
differently only if the number of distinct values in the
mandel data is less than the number of display colors used
by the mandel program. (If the hardware has more than 8
bit planes, mandel does 12-bit color-index drawing, and
uses somewhat less than the 4096 entries in the colormap.)
So, ... if an image was generated with a large iteration
count, and if that image contains lots of different color
values, then the 3 "maximize colors" selections will all do
the same thing, which will still be different than the
#iterations selects the number of iterations to be performed from a
range of values.
save allows you to save the current image in one of 2 formats:
mandel format or SGI RGB format. A file saved in the
"mandel format" contains coordinate data, and if such a
file is given as an argument to mandel, mandel will allow
further zoom-in operations, etc., to be done on the
displayed picture. Alternatively, the coordinate data for
the current picture can be saved to a file. (If the latter
is done, the picture can be re-generated with
mandel -c `cat fname`
where fname is the name of the file containing the
mode selects Mandelbrot or Julia set. If Julia is selected, a
crosshair cursor appears for selecting the seed point. Use
the left mouse button to pick a point.
floating pt prec
Choose between double precision floating point (64-bit) or
long double (128-bit).
configuration allows the user to select from the following submenu.
interpolate. If row delta (see below) is > n, the picture
is generated in n passes. Eventually, every scanline of
the picture is generated. However, each pass contains only
1/n-th (approx.) of the total scanlines, and up till the
final pass, there are gaps in the picture. As a scanline
is generated, if there is a gap between that scanline and
the one below or above it, and if interpolate is set to
"yes," this causes the gaps to be filled in with
"reasonable" mandelbrot data (by interpolating between the
row delta. If delta = 1, then rows are computed in the
order ymin, ymin+1, ymin+2, ... However, if delta > 1,
then rows are computed in the order ymin, ymin + d, ymin +
d*2, ..., followed by ymin + k, ymin + d + k, ymin + d*2 +
k, ... for appropriate k's until the picture is done.
(Note: If row delta > 1 and "interpolate" is "yes," this
allows an approximately accurate picture to be generated n
times faster than by generating the entire picture with no
rows per farmout specifies the number of rows at a time
which each host is given to calculate. If equal to 1, the
computation is most equally divided among the hosts;
however, this causes more network overhead, since mandel
has to send out a command (to some remote host) for every
sparse passes. If "sparse passes" is "yes," this causes the
first pass (and only the first pass) to be split into 2
"sparse" passes, where each sparse pass is done by
computing every other pixel of the scanline. For example,
with row delta = 2 and "sparse rows" set to "yes", we have:
pass 1a - every even pixel of scanlines 1, 3, 5, ...
pass 1b - every odd pixel of scanlines 1, 3, 5, ...
pass 2 - scanlines 2, 4, 6, ...
The default is that the first pass is split into two sparse
passes only if
(#pixels per scanline) * (max iterations per pixel) >=
where "threshold" = 1,000,000. The idea is that the
threshold will be exceeded only if the picture becomes
large and computationally expensive to generate. The
default threshold can be modified by specifying an
alternate value in the .mandelrc file.
stop drawing causes the processes doing calculations to stop, and causes
the current image to stop drawing.
exit quits the program.
Error Handling [Toc] [Back]
When mandel encounters an error when reading data from a remote host, it
will stop reading from that host for the duration of the current picture
generation, but will try to use that host again next time, for the next
Color files [Toc] [Back]
mandel contains several default color maps, but it will look for
alternate or additional color maps in data files beginning with the name
"color". If you have a file named "colorxy," then "xy" will show up in
the colors menu.
By default these color files are searched for in the directory named
"colors", but you may specify a different directory name by having a
"color dir" entry in .mandelrc.
Each line in a "color" file specifies a color by
<red intensity> <blue intensity> <blue intensity>
with intensities ranging from 0 to 255. Intensities may be delimited by
commas, spaces, or tabs.
The first color is that of the mandelbrot set and is usually black
(0,0,0). Smooth ramps are made between the remaining colors, and the
non-black part of the picture is drawn using those ramps.
Example of color file contents:
0 0 0
40 0 0
240 0 0
240, 240, 0
240, 240, 240
Region Selections with the Mouse [Toc] [Back]
After a picture is displayed, the left mouse button can be used to select
a new region to zoom in on. If the "Julia" mode is selected after first
displaying a mandelbrot image, then the left mouse button is used for
selecting a seed point for the Julia calculations.
When the left mouse button is being used to select a region or seed
point, the selection can be aborted by depressing either the middle or
right mouse buttons or the escape key.
Building [Toc] [Back]
If you chose to install the demo source, you will have received the
source code for the mandelzoom program and a generic Makefile to build
the binary. The mandelzoom source files are very portable (except for
assumptions about sizes of certain data types). If you copy the
mandelzoom source files (*), along with Makefile.generic, to just about
any unix machine, and type
make -f Makefile.generic mandelzoom
the resulting mandelzoom program should work.
(*) The file "zoomsrc" contains a list of the mandelzoom source files.
PPPPaaaaggggeeee 7777 [ Back ]