Surface Evolver Newsletter no. 20

Back to top of Surface Evolver documentation.

                         Surface Evolver Newsletter 20 
                              January 1, 2008
                     by Ken Brakke, brakke@susqu.edu


Surface Evolver version 2.30 available for download at
http://www.susqu.edu/brakke/evolver.
This is the first release since version 2.26 in August, 2005.

For those who compile Evolver themselves, the same makefile may be used.

New features in version 2.30:

Clip view:
  The graphics display now has user-controlled clipping planes, so you
  can see inside your surface.  In the OpenGL graphics window, if you 
  hit the 'l' key (lower case 'L'), a clipping plane will appear. Dragging 
  the mouse will translate the clipping plane, and hitting 'k' will let you 
  rotate the clipping plane.  See "clip view" in the documentation for more.

Slice view:
  There is also a slice view mode, that works like clip view, except it
  produces a two-dimensional cross-section of the surface.  To initiate it,
  use the "slice_view" toggle command; thereafter the 'l' and 'k' keys
  control the mouse mode.

Movie viewer:
  For scrolling through stages of an evolution in full 3D fashion, I have
  written a program "evmovie" that reads simple geometry files and makes
  an Evolver-like display, so you can manipulate the surface with the mouse
  (with clipping plane!) and scroll through the files.  It can handle
  hundreds or even thousands of files pretty smoothly.  There is a new
  Evolver command "binary_off_file" for producing files for evmovie.
  To download and see documentation, go to
  http://www.susqu.edu/brakke/evmovie.

Loading multiple surfaces:
  The "addload" command will load a new datefile without deleting the
  current surface.  Good for building up a surface from several component
  parts, particularly if one componont is repeated in multiple places.
  See the addload_example.fe datafile in the distribution for an example.

Graphics text:
  You can display simple text in graphics (OpenGL and PostScript graphics,
  anyway). Syntax:

     text_id := display_text(x,y,string)

  The x,y coordinates of the start of the string are in window units, i.e.
  the window coordinates run from (0,0) in the lower left to (1,1) in the
  upper right. The return value should be saved in a variable in case you want
  to delete the text later with delete_text(text_id); even if you don't want to
  delete it, you must have something on the left of the assignment for syntax
  purposes. No font size control or font type or color implemented. Meant for
  captioning images, for example a timer in frames of a movie.

Showing string facets:
  In the string model, facets will now be displayed according to the
  "show facet where expr" command.  Facets can be colored and picked.
  If the facet edge loop is not closed, then a closing edge will be
  assumed.  May not work too well for non-convex facets.

Array operations:
  Several basic operations that work on whole arrays have been added
  to the Evolver command language, so scripts can avoid tedious "for"
  loops:

    array := array
    array := scalar
    array := scalar * array
    array := array + array
    array := array - array
    vector dot_product vector

  These work on element attributes that are vectors or arrays, as well
  as stand-alone arrays.  I decided to use "dot_product" as the name of
  the inner product operator instead of just "dot" since I had several 
  scripts using "dot" as a variable, and I assume other people do also,
  and I didn't want to break those. There are also matrix_inverse() and 
  matrix_determinant() functions.  

  NOTE: the matrix_inverse() function is now a function returning 0 for
  singular and 1 for nonsingular matrix, rather than a procedure not 
  returning a value. This means that scripts using matrix_inverse() will 
  have to assign the return value to a variable.

Element array attributes:
  For use with the whole-array commands, these element attributes
  are defined as 1-dimensional arrays:
  vertices: __x (coordinates), __p (boundary parameters), __vertex_normal
  edges: __edge_vector
  facets: __facet_normal
 
Local names:
  The syntax for declaring identifiers to have local scope has been extended
  to permit multiple names in the same declaration, such as
     local ax,bx,cx,ay,by,by,cx,cy,cz;
  
Deeper recursive calls:
  The stack mechanism of the expression interpreter has been modified
  to permit much deeper recursion, for example in geometric search
  algorithms. 

Debugging scripts:
  Several features have been added to help in debugging scripts:

  "subcommand" command: Displays a command prompt and accepts user
   commands.  At "exit", it resumes the script.

  "abort" ends all script execution and returns to the main
   command prompt.

  "breakpoint" can be used to cause a command prompt to appear when
   execution reaches a certain line in a script.  The syntax is
       breakpoint scriptname linenumber
   where scriptname is hte name of the procedure or function and 
   linenumber is the line number in the file the procedure is defined in.
   There is also an "unset breakpoint" commmand.

  "whereami" at a subcommand or breakpoint prompt will print a stack
   trace so you can tell where you are in your scripts.

Expression profiling: 
  On systems where Evolver has cpu_counter available and Evolver has been
  compiled with the manifest constant PROF_EVALS defined, the expression
  evaluator inside Evolver keeps track of the clock cycles elapsed during
  each expression evaluation. These expressions include procedures,
  functions, constraint and boundary formulas, content integrands, energy
  integrands, quantity integrands, etc; everything that prints out as code in
  a dump file. The "print profiling" command will print the accumulated CPU
  cycles so far for each type of expression. The times are inclusive of any
  child functions or procedures.  The command reset_profiling will set all 
  the cycle values back to 0.


New named methods:

  dirichlet_elastic: to do conformal mapping by minimizing Dirichlet energy.

  laplacian_mean_curvature: to do motion by the laplacian of the
    mean curvature.

New toggle:
   function_quantity_sparse: uses sparse matrices with function-type quantities.

Warning suppression:
  If your datafile or script generates harmless warnings, you can suppress
  particular warnings by number.  Syntax:
     suppress_warning number
     unsuppress_warning number

Validity checking:
  To help in scripts that want to iterate over constraints or boundaries,
  there are read-only variables high_constraint and high_boundary for the
  maximum constraint and boundary numbers (remember that for named 
  constraints and boundaries, the names are synonyms for numbers),
  and there are boolean functions valid_constraint() and valid_boundary()
  that take numbers or names as arguments. 


Autopop and autochop improvements:

  Autopop in the soapfilm model now deletes small facets.
 
  The immediate_autopop toggle causes deletion of short edges or facets 
  to be done immediately on detection before proceeding with detetecting
  further small edges or facets.

  The read-write internal variahle autochop_length can be used to read or
  set the autochop critical length without changing the autochop toggle
  state.

Edge deletion options:

  Toggle force_deletion will force edge or facet deletion to happen
  even if it creates two edges with the same endpoints.

  Togglw star_fcnagling will refine edges that would otherwise wind
  up with same endpoints due to an edge or facet deleteon.

End of Newsletter 20