# Surface Evolver Documentation

Back to top of Surface Evolver documentation. Index.

## Single letter main commands

The oldest and most commonly used Surface Evolver commands are just single letters. Case is significant for these. Single letters are always interpreted as commands, so you may not use single letters for variable names. Single letter commands may be redefined.

Single letter commands may be summarized in five groups:

- Reporting:
  - C Run consistency checks.
  - c Report count of elements.
  - e Extrapolate.
  - i Information on status.
  - v Report volumes.
  - v List extra attributes.
  - z Do curvature test.
- Model characteristics:
  - A Display and set variables and various parameters.
  - a Toggle area normalization
  - b Set body pressures.
  - f Set diffusion constant.
  - G Set gravity.
  - J Toggle jiggling on every move.
  - k Set boundary gap constant.
  - M Toggle linear/quadratic model.
  - m Toggle fixed motion scale.
  - p Set ambient pressure.
  - Q Report or set quantities.
  - U Toggle conjugate gradient method.
  - W Homothety toggle.
- Surface modification
  - g Go one iteration step. Often followed by a repetition count.
  - j Jiggle once.
  - K Skinny triangle long edge divide.
  - l Subdivide long edges.
  - N Set target volumes to actual.
  - n Notch ridges and valleys.
  - O Pop non-minimal edges.
  - o Pop non-minimal vertices.
  - r Refine triangulation.
  - t Remove tiny edges.
  - u Equiangulate.
  - V Vertex averaging.
  - w Weed out small triangles.
  - y Torus duplication.
  - Z Zoom in on vertex.
- Output:
  - D Toggle display every iteration.
  - d Dump surface to datafile.
  - P Graphics output (geomview, Postscript, etc.).
  - s Screen display (native graphics).
- Miscellaneous:
  - F Toggle command logging.
  - H,h,? Help screen.
  - q,x Exit.

## Single letter redefinition

It is possible to reassign a single letter to your own command by the syntax

     letter :::= command

but this should only be used in special circumstances, such as redefining 'r' to do additional actions along with refinement. The standard meaning can be restored with a null assignment:

     letter :::=

Use single quotes around the letter to get the standard meaning, i.e. 'r' will do a standard refine when r has been redefined. Redefinitions are cleared when a new surface is loaded. Be careful when using redefined commands in defining other commands. Redefinition is effective on execution of the redefinition command, not on parsing. Redefinition is not retroactive to uses in previously defined commands, but restoring the standard meaning is retroactive. Examples:

       V :::= { fix vertex[5]; 'V'; unfix vertex[5] }
       r :::= { divisions := divisions * 2;
                hooke_length := hooke_length/2; 'r' }

## A

Single letter main command. Lists the current values of variables and named quantity values, moduli, and targets. Only explicitly user-defined named quantities are shown unless show_all_quantities is toggled on. You are allowed you to enter new values (except quantity values). The new value is entered as the number of the variable (from the list) and the new value. Exit by hitting RETURN on a blank line. All changes that can be made here can also be made with assignment commands.

## a

Single letter main command. Toggles area normalization of vertex forces and other gradients, to model motion by mean curvature. Meant to be used with a fixed scale factor. Be sure you have a small enough scale factor or else things tend to blow up. Reduce the scale factor temporarily after refinement, since triangle areas are cut by a factor of 4 but the old creases remain. When this option is ON, there is an optional check that can be made for facets that move too much. This is done by computing the ratio of the length of the normal change to the length of the old normal. If this exceeds the user-specified value, then all vertices are restored to their previous position. The user should reduce the motion scale factor and iterate again.

## b

Single letter main command. Permits user to interactively change body prescribed volumes or pressures. Prints old value for each body and prompts for new.

## C

Single letter main command. Runs various internal consistency checks. Synonym: check. If no problems, just prints "Checks completed." The number of errors found is stored in the variable check_count. The checks are:

- Element list integrity - checks that data structures are intact. This kind of error is probably an Evolver bug and should be reported.
- Facet-edge check - that if a facet adjoins an edge, then the edge adjoins the facet, and that the three edges around a facet link up. This kind of error is probably an Evolver bug and should be reported.
- Facet-body check - whether adjacent facets have the same body on the same side. Probably a user problem due to mis-oriented faces in body definitions in the datafile, or due to the surface getting kinked up at triple lines.
- Collapsed elements - check if endpoints of an edge are the same, and whether neighboring facets share more than one edge and two vertices. Not illegal, but you probably want to avoid.

After "C" or "check" command finishes, there are some variables that hold the number of errors of various types that were found:

- bad_next_prev_count - bad links in element linked lists.
- inconsistent_bodies_count - violations of adjacent facets having same bodies.
- edge_loop_count - edges that are loops on single vertices.
- edges_same_vertices_count - edge pairs with the same endpoints.
- facets_same_vertices_count - facet pairs with the same endpoints.
- bad_error_count - sum of the various types of errors that I consider serious enough that you should revise your evolution to avoid them. Bad links within element lists, and bad links between elements.

## c

Single letter main command. Prints count of elements and memory used. The memory is just the total of the element structures. On some systems, enabling "memdebug" will print more complete statistics on total memory usage. Synonym: counts.

## D

Single letter main command. Toggles updating graphics every iteration or other surface change. Default is to display. Status can also be changed or queried with the autodisplay toggle.

## d

Single letter main command. Dumps data to ASCII file in same format as initial data file. You will be prompted for a filename. An empty reponse will use the default dump name, which is the datafile name with a ".dmp" extension. Same as the dump command, except the dump command requires the filename as part of the command. Useful for checking your input is being read correctly, for saving current configuration, and for debugging.

## e

Single letter main command. Extrapolates total energy to infinite refinement if at least two r commands have been done. Uses last energy values at three successive levels of refinement, and uses a power law fit for the error. For best results, use only the r command to refine, and iterate to complete convergence at each level of refinement. Synonym: extrapolate.

## F

Single letter main command. Toggle logging of commands in file. If starting logging, you will be prompted for the name of a log file. Any existing file of that name will be appended to. Logging stops automatically when the surface is exited. Only correctly parsed commands are logged. Output resulting from commands is not logged. Responses to interactive single-letter commands are logged, but not responses to other interactive commands.

## f

Single letter main command. Sets diffusion constant. Prints old and prompts for new.

## G

Single letter main command. Toggles gravity on or off. Gravity starts ON if any body has a nonzero density; otherwise OFF. If followed by a value, sets gravity to that value. Otherwise prints old value of gravitational constant and prompts for new.

## g

Single letter main command. Do one iteration step. The output consists of the number of iterations left (for people who wonder how close their 1000 iterations are to ending), the area and energy, and the scale factor. `g` is commonly used with an iteration count, as in "`g 100`". The user can abort repeated iterations by sending an interrupt to the process (SIGINT, to be precise; CTRL-C or whatever on your keyboard). As a special dispensation to lazy users, the syntax "`g` n" is equivalent to "`g` n". Synonym: go

## H,h,?

Single letter main command. Prints a very primitive help message listing common commands. help is much better, as it accesses the full HTML documentation. Or best, use a separate HTML browser on this documentation.

## i

Single letter main command. Prints miscellaneous information:

- Name of datafile
- Total energy
- Total area of facets
- Count of elements and memory usage
- Area normalization, if on
- LINEAR or QUADRATIC model
- Whether conjugate gradient on
- Order of numerical integration
- Scale factor value and option (fixed or optimizing)
- Diffusion option and diffusion constant value
- Gravity option and gravitational constant value
- Jiggling status and temperature
- Gap constant (for gap energy, if active)
- Ambient pressure (if ideal gas model in effect)

## J

Single letter main command. Toggles jiggling on every iteration of the g command. If jiggling gets turned on, prompts for temperature value. Default temperature is the value of the temperature internal variable.

## j

Single letter main command. Jiggles all vertices once. Meant to be used for simulated annealing. Useful for shaking up surfaces that get in a rut, especially crystalline integrands. You will be prompted for a "temperature" which is used as a scaling factor, if you don't give a temperature with the command. Default temperature is the value of the jiggle_temperature internal variable, which starts as 0.05. The actual jiggle is a random displacement of each vertex independently with a Gaussian distribution with deviation being the temperature times the mean edge length. See the longj command for a user-definable perturbation.

## K

Single letter main command. Finds skinny triangles whose smallest angle is less than a specified cutoff. You will be prompted for a value if you don't give a value on the command line. Such triangles will have their longest edge subdivided. Should be followed with tiny edge removal (t) and equiangulation (u). By default, the long edge is subdivided at its midpoint, but if you do "k_altitude_mode on" then it will be subdivided at the foot of the altitude from the opposite vertex.

## k

Single letter main command. Sets "gap constant" for gap energy for convex constraints. Adds energy roughly proportional to area between edge and boundary. You will be prompted for a value if you don't give a value on the command line. Normal values are on the order of magnitude of unity. Value k = 1 is closest to true area. Use 0 to eliminate the energy.

## l (lower case L)

Single letter main command. Subdivides long edges, creating new facets as necessary. You will be prompted for a cutoff edge length, if you don't give a value with the command. Existing edges longer than the cutoff will be divided once only. Newly created edges will not be divided. Hence there may be some long edges left afterward. If you enter h, you will get a histogram of edge lengths. If you hit RETURN with no value, nothing will be done. It is much better to use the refine command r than to subdivide all edges. A synonym for "`l` value" is "`edge_divide` value". This command does not respect the no_refine attribute.

## M

Single letter main command. Sets model type to linear , quadratic, or Lagrange. Changing from LINEAR to QUADRATIC adds vertices at the midpoints of each edge. Changing from QUADRATIC to LINEAR deletes the midpoints. Optionally takes new model type ( 1 for LINEAR, 2 for QUADRATIC, > 2 for Lagrange. ) on command line. Otherwise will prompt you.

## m

Single letter main command. Toggles quadratic search for optimal global motion scale factor. If search is toggled OFF, you will be prompted for a fixed scale factor. If you give a value with the command, then you are setting a fixed scale factor.

## N

Single letter main command. Set body target volumes to current actual volumes.

## n

Single letter main command. Notching ridges and valleys. Finds edges that have two adjacent facets, and those facets' normals make an angle greater than some cutoff angle. You will be prompted for the cutoff angle (radians) if you don't give a value with the command. Qualifying edges will have the adjacent facets subdivided by putting a new vertex in the center. Should follow with equiangulation. In the string model, it will refine edges next to vertices with angle between edges (parallel orientation) exceeding the given value. Optionally takes cutoff angle on command line.

## O

Single letter main command. Pop non-minimal edges. Scans for edges with more than three facets attached. Splits such edges into triple-facet edges. Splits propagate along a multiple edge until they run into some obstacle. This command is meant for surfaces that have equal tension on all facets. Also tries to pop edges on walls properly. For finer control on which edges to try, use the pop command. Try octa.fe for an example.

## o

Single letter main command. Pop non-minimal vertices. This command scans the surface for vertices that don't have the topologies of one of the three minimal tangent cones that are legal in soap films (plane, triple edge, tetrahedral point). These are "popped" to proper local topologies. The algorithm is to replace the vertex with a sphere. The facets into the original vertex are truncated at the sphere surface. The sphere is divided into cells by those facets, and the largest cell is deleted, which preserves the topology of the complement of the surface. A special case is two cones meeting at a vertex; if the cones are broad enough, they will be merged, otherwise they will be split. In case of merging cones, if both cone interiors are defined to be part of the same body, then no facet is placed across the neck created by the merger; if they are different bodies or no bodies, a facet will be placed across the neck. Only vertices in the interior of a surface, not fixed or on constraints or boundaries, are tested. Try popstr.fe and octa.fe for examples.

## P

Single letter main command. Produce graphics output files. "P" is for "picture". This brings up a menu, unless you give the menu option on the command line. For the 2D graphics options, the view is the same as seen with the s command. For options that output to a file, you will be prompted for a filename. Some other possible options you may be asked:

`Display raw cells, connected bodies or clipped cells? (0,1,2)`
  If you are doing torus model, you will be asked for a display option, unless you have already set one.
`Do normal interpolation?`
  Some formats are capable of doing interpolation between vertex normals for smoother shading, and you will be asked if you want to do that.
`Do inner, outer, or all surfaces? (i,o,a)`
  When bodies are present, there is an option to plot the inner surfaces(adjacent to two bodies), outer surfaces (adjacent to 0 or 1 bodies), or all surfaces of the bodies.
`Do body colors?`
  This gives you a chance to color the bodies differently. If you do, the current colormap file will be used to color the bodies according to id number. This scheme is a relict of early days of the Evolver, and it is suggested that you use the color, frontcolor and backcolor facet attributes instead.
`Enter name of colormap file:`
  If there is no current colormap file, you will be prompted. The colormap file has the format of RGB values, one set per line, values between 0 and 1. (This map may not be effective on all devices.)
`Thicken? (n | y [thickness(0.001)])`
  You may also be asked if you want thickening. If you do, each facet will be recorded twice, with opposite orientations, with vertices moved from their original positions by the thickening distance (which the option lets you enter) in the normal direction. The normal used at each vertex is the same as used for normal interpolation, so all the facets around a planar vertex will have that vertex moved the same amount. Triple junctions will be separated. Thickening is good for rendering programs that insist on consistently oriented surfaces, or that have problems with show-through of the backside of a surface. Choosing 'y' or 'n' will reset the thicken toggle. If you answer 'y', you can optionally specify the thickness, which defaults to the value of the thickness internal variable.

The menu choices for types of output are:

`1. Pixar file`
  For Pixar format. Actually same format as option 2.
`2. OOGL file`
  This is a file in a file format used by geomview, which is Object Oriented Graphics Language. Suitable for direct input into geomview.
`3. PostScript file`
  Generates a PostScript file.
`4. Triangle file`
  A private format file, just listing data. Not much use any more.
`5. Softimage file`
  Output file in Softimage format.
`8. Start simultaneous geomview`
  If you have the geomview package installed, this command will start geomview and display the current surface. Changes to the surface are automatically displayed unless autodisplay is toggled off.
`9. End simultaneous geomview`
  Terminates any geomview program or pipe.
`A. Start OOGL pipe.`
  Geomview uses a pipe interface at the moment. This starts a named pipe with geomview output, but without invoking geomview. You will be told the name of the pipe, and it is up to you to start a pipe reader. Evolver blocks until a pipe reader is started. This is useful for having a second instance of Evolver feed a second surface to geomview by having geomview load the pipe. Also good for checking exactly what Evolver is sending to geomview. The geompipe command does the same thing. Terminate the pipe with "P 9". Note that only one geomview output at a time is possible, so you can't have a geomview display and separate pipe active at the same time.
`B. End OOGL pipe.`
  Same as option 9.

## p

Single letter main command. Sets ambient pressure in ideal gas model. If you don't give a value with the command, you will be prompted. A large value gives more incompressible bodies.

## Q

Single letter main command. Report current values of user-defined method instances and named quantities. If the show_all_quantities toggle is on, then internal quantities and method instances are also shown. This is particularly informative if convert_to_quantities has been done (same as -q command line option), since then internal values such as constraint integrals are in the form of method instances.

## q

Single letter main command. Syntax:

        q
        q expr

Alone, "q" brings up a prompt to enter a new datafile. At this prompt, hitting the Enter key will return to the current surface, another "q" will exit Evolver, and anything else will be taken to be the name of a new datafile. When "quit" is followed by a value, Evolver exits immediately, and uses the value as the exit code, which is useful when running Evolver in a script or from some other program. Quitting Evolver automatically closes any graphics windows, and does not save anything. Same as "quit" command. "quit", "bye", and "exit" are synonyms.

## r

Single letter main command. Refines the triangulation. Edges are divided in two, and facets are divided into four facets with inherited attributes. Edges and facets with the no_refine attribute set are not refined. Reports the number of element structures and amount of memory used by those structures.

## s

Single letter main command. Shows the surface with screen graphics. Goes into the graphics command mode. Torus model surfaces have display options you will be asked for the first time. The graphics window may be closed with the close_show command.

## t

Single letter main command. Eliminates tiny edges and their adjacent facets. You will be prompted for a cutoff edge length if you don't give a value with the command. If you enter h, you will get an edge length histogram. If you hit RETURN without a value, nothing will happen. Some edges may not be eliminable due to being FIXED or endpoints having different attrtibutes from the edge.

## U

Single letter main command. This toggles conjugate gradient mode, which will usually give faster convergence to the minimum energy than the default gradient descent mode. The only difference is that motion is along the conjugate gradient direction. The scale factor should be in optimizing mode. The conjugate gradient history vector is reset after every surface modification, such as refinement or equiangulation. After large changes (say, to volume), run without conjugate gradient a few steps to restore sanity.

## u

Single letter main command. This command, called "equiangulation", tries to polish up the triangulation. In the soapfilm model, each edge that has two neighboring facets (and hence is the diagonal of a quadrilateral) is tested to see if switching the quadrilateral diagonal would make the triangles more equiangular. For a plane triangulation, a fully equiangulated triangulation is a Delaunay triangulation, but the test makes sense for skew quadrilaterals in 3-space also. It may be necessary to repeat the command several times to get complete equiangulation. The edgeswap command can force flipping of prescribed edges.

In the simplex model, equiangulation works only for surface dimension 3. There, two types of move are available when a face of a tetrahedron violates the Delaunay void condition: replacing two tetrahedra with a common face by three, or the reverse operation of replacing three tetrahedra around a common edge by two, depending on how the condition is violated. This command is inoperative in the string model.

## V

Single letter main command. Vertex averaging. For each vertex, computes new position as area-weighted average of centroids of adjacent facets. Only adjacent facets with the same constraints and boundaries are used. Preserves volumes, at least to first order. See the rawv command for vertex averaging without volume preservation, and rawestv for ignoring likeness of constraints. Vertices on triple edges are averaged only with adjacent vertices on the triple edge, and then only if there are exactly two neighboring triple edge vertices. Fixed vertices do not move. Vertices on constraints are projected back onto their constraints. The computation of new vertex positions are all done before any vertex is moved. For sequential movement applied to a subset of vertices, see the vertex_average command.

## v

Single letter main command. Shows target volume, actual volume, and pressure of each body. Also shows named quantities. Pressures are really the Lagrange multipliers. Pressures are computed before an iteration, so the reported values are essentially are one iteration behind. Synonym: show_vol

## W

Single letter main command. Toggles homothety. If homothety ON, then after every iteration, the surface is scaled up so that the total volume of all bodies is 1. Meant to be used on surfaces without any blowup constraints of any kind, to see the limiting shape as surface collapses to a point.

## w

Single letter main command. Tries to weed out small triangles. You will be prompted for the cutoff area value if you don't give a value with the command. If you enter h, you will get a histogram of areas to guide you. If you hit RETURN with no value, nothing will be done. Some small triangles may not be eliminable due to constraints or other such obstacles. The action is to eliminate an edge on the triangle, eliminating several facets in the process. Edges will be tried for elimination in shortest to longest order. WARNING: Although checks are made to see if it is reasonable to eliminate an edge, it is predicated on facets being relatively small. If you tell it to eliminate all below area 5, Evolver may eliminate your entire surface without compunction.

## X

Single letter main command. List the current extra attributes, including name, dimension, type, size in bytes, and offset within the element structure. Some internal attributes are also listed, whose names begin with a double underscore.

## x

Single letter main command. Same as q. Exit Evolver, or start new surface.

## y

Single letter main command. Torus duplication. In torus model, prompts for a period number (1,2, or 3) and then doubles the torus unit cell in that direction. Useful for extending simple configurations into more extensive ones.

## Z

Single letter main command. Zooms in on a vertex. Asks for vertex number and radius. Number is as given in vertex list in datafile. Beware that vertex numbers change in a dump (but correct current zoom vertex number will be recorded in dump). Eliminates all elements outside radius distance from vertex 1. New edges at the radius are made FIXED. Meant to investigate tangent cones and intricate behavior, for example, where wire goes through surface in the overhand knot surface. Zooming is only implemented for surfaces without bodies.

## z

Single letter main command. Do curvature test on QUADRATIC model. Supposed to be useful if you're seeking a surface with monotone mean curvature. Currently checks angle of creases along edges and samples curvature on facet interiors. Orientation is with respect the way facets were originally defined. Deprecated.

Back to top of Surface Evolver documentation. Index.