Surface Evolver Newsletter no. 18

Back to top of Surface Evolver documentation.

                         Surface Evolver Newsletter 18
                              October 13, 2004 
                     by Ken Brakke, brakke@susqu.edu


Surface Evolver version 2.24 is available for download at
http://facstaff.susqu.edu/brakke/evolver.
This is the first release since version 2.20 in August, 2003 (although
version 2.23 was posted unannounced in June).

For those who compile Evolver themselves, the same makefile may
be used, except there is an additional source file method5.c.

Trinity College Workshop - While on sabbatical at Trinity College, Dublin,
I gave a six-session Evolver workshop.  The web pages and datafiles are
available at http://facstaff.susqu.edu/brakke/evolver/workshop.

New features in version 2.24:

 Added on_quantity and on_method_instance element attributes,
 e.g. "list vertex where on_quantity bigvol".

 Named quantities and method instances, constraints and boundaries can
 be defined at runtime by using "define" followed by the definition
 as in the top of a datafile.   

 Added readable quantity attributes fixed, energy, info_only, conserved.

 New t1_edgeswap command. String model T1 topology change; flips an edge
 joining two triple points.

 New topology changing commands in soapfilm model:
  pop_quad_to_quad
  pop_tri_to_edge
  pop_edge_to_tri

 Pop control toggles:
  pop_disjoin - films separate with no new film generated between
  pop_to_face - forces six-triple edge vertex pop to triangle
  pop_to_edge - forces six-triple edge vertex pop to edge

 Added vertex_merge(v1,v2), edge_merge(e1,e2), and facet_merge(f1,f2)
 for gluing bits of surface together.  The first of the pair is the 
 one kept.  Tensions do not add; you should set them yourself if needed.

 Added commands matrix_multiply and matrix_inverse to help working with
 arrays.

 New named methods for working with a string network on a sphere:
 spherical_arc_length, spherical_arc_area_n, spherical_arc_area_s
 These work in the linear string model.

 Circular_arc mode does exact postscript arc drawing.

 New named method for integral of squared mean curvature:
 star_perp_sq_mean_curvature
 Designed so that its zeros are the equilibria of gradient descent with
 normal_motion in effect and hessian with hessian_normal. Now the 
 recommended method for squared mean curvature.

 All the "star_..." varieties of squared mean curvature now work with 
 partial stars, i.e. you can bound the surface with mirror symmetry
 planes, and the curvature will be correctly calculated on the sides
 and in the corners.

 hessian_menu now has a subshell command, "=", to make it easier to do
 things in the middle of looking at eigenmodes and stuff. Good for
 making postscript files of perturbations and then returning to the
 original.

 Added ps_labelsize read-write variable to control the relative size
 of labels in PostScript files. Default value 3.

 full_bounding_box toggle writes the bounding box in a postscript file
 as the grapics window boundary rather than the actual bounding box
 of the surface.  Good for creating a series of images with the same
 bounding box.

 Added list quantity, list constraint, list boundary, list method_instance,
 so you can see what one of these is at runtime without doing a whole
 list topinfo.

 For really high-resolution timing, there is now the cpu_counter variable,
 which reports the value of the CPU cycle counter.  Currently implemented
 only on x86 architecture.

 valid_element(etype[index]) function to query whether an element of
 a given number exists.

 The Windows version is now compiled to use a 3GB address space, if 
 the system supports it.  Windows defaults to only 2GB user address 
 space per process, but you can up that to 3GB by adding the /3GB option 
 to the boot line in your boot.ini. (if you don't know what this means, 
 you shouldn't be fiddling with it.) If your physical memory is 1GB or 
 above, I advise you to do this, since virtual memory space tends to
 get fragmented.
 
 The "set" command can now be used to put vertices, edges, and facets
 on parametric boundaries.  Set the vertex boundary parameters p1, p2, etc. 
 as needed first.

 Added display_periods for controlling display of sheared torus
 unit cells.  

 Added window_aspect_ratio variable to lock graphics window aspect ratio; 
 GLUT version only.
 
 Added stokes2d method for doing 2D viscous flow.
 Added stokes2d_laplacian info only method to extract stream function
   laplacian conveniently.

 Added general_linear_elastic method for doing non-isotropic elastic surfaces.

 New sample command files (see the top of each file for more information):
    wetfoam2.cmd - create Plateau borders on a dry foam; update of wetfoam.cmd
    rewrap.cmd - adjust vertices in 3D torus model back to unit cell
    rewrap2.cmd - adjust vertices in 2D torus model back to unit cell
    gaussmap.cmd - convert surface to its Gauss map
    gaussref.cmd - refine according to area on Gauss map
    multiplicate.cmd - print datafile for full surface shown by view transforms
    band.cmd - draw colored bands along designated edges
    unshear.cmd - adjust a 2D sheared torus unit cell back toward squareness
    xray.cmd - make xray image of the Plateau borders of a wet foam

Changed features:

  torus mode connected bodies changed to keep bodies in same places
  when topological changes made. May be some initial differences in
  display; old way technically had a bug in it anyway.

  is_defined() now runtime evaluation.  Be careful in using this to
  detect previously defined variables, since the complete command is
  parsed before is_defined() is executed.  Try  "define variablename type"
  and then testing for the default initial value.

  10 argument limit on printf and sprintf removed.

  pop vertex modified for touching cones to do merging instead of
  splitting if cones wide enough.  Septum depends on body agreement.

  Added ! in transform_expr to indicate single transform necessary.
  ! after single transform means use it, not alternate with identity.
  ! at start of transform string means do not include identity transform.

  Changed semantics of autorecalc.  Now controls doing of recalc at
  end of exec() when recalc_flag has been set.  Default changed to ON.
  Old uses of SURFACE_PARAMETER recalculation causing recalc() when
  autorecalc on now sets recalc_flag.

  Bezier_basis mode now changes control points to maintain curve image
  during refinement and order change.  Note this means old control points
  move, so have to be careful with alignment constraints.  And facets.

  "smooth_graph" toggles smoother segmented drawing of Lagrange model.
  And in bezier_basis. And quadratic string mode. 
  But not in torus connected mode, nor quadratic soapfilm mode.

  Made current state of quiet_flag propagate to read files, but reverts
  when file done.

  The vertexnormals vertex attribute now projects the normal to constraints.

  Limited vertex averaging in Lagrange model added; internal to facets
  and edges only.

  Individual facet areas in string model.

  Got vertex.facet working for string model.  Facets reported as having
  positive orientation.  And only one reported per edge.
  
  Overhaul of count reporting.  About 20 count variables now:
  equi_count;
  edge_delete_count;
  facet_delete_count;
  edge_refine_count;
  facet_refine_count;
  vertex_dissolve_count;
  edge_dissolve_count;
  facet_dissolve_count;
  body_dissolve_count;
  vertex_pop_count;
  edge_pop_count;
  facet_pop_count;
  pop_tri_to_edge_count;
  pop_edge_to_tri_count;
  pop_quad_to_quad_count;
  where_count;
  edgeswap_count;
  t1_edgeswap_count;
  fix_count;
  unfix_count;
  skinny_refine_count;
  notch_count;
  
  "list procedures" lists prototypes but not bodies of procedures.
  
  'o' reports edge and vertex pop counts seperately; was adding edge pops
  to vertex pops.
  
  "pop vertices" has special consideration for vertices on constraints.
  Put in special pop handlers for cube cone and tri-prism cone (formerly
  kraynikpop).
  
  "delete facet" really works in string model now.
  
  augmented_hessian default state on for at least 50 constraints, off for less.

End of Newsletter 18