# Surface Evolver Newsletter no. 7

Back to top of Surface Evolver documentation.

                          Surface Evolver Newsletter Number 7
                                  January 24, 1994

                        Editor: Ken Brakke, brakke@geom.umn.edu

    Contents:
    Version 1.94.
    Minimization via Hessian.
    New features.
    Bibliography update.

    Version 1.94:

    Version 1.94 is now available for ftp.  Still no new Mac version.
    And be wary of the NeXT version, since I made some changes that
    might possibly affect behavior of the NeXT interface, and I don't have
    access to a NeXT at the moment to test it.

    The uncompressed version of evolver.tar is being dropped from the
    ftp directory.  If this causes anybody problems, let me know.

    Minimization via Hessian:

      The Evolver's usual gradient descent method is a first order method,
    using just the first derivative of energy.  A second order method might
    give faster convergence, and furthermore tell the stability of a critical
    point.  By using the Hessian matrix of second derivatives along with
    the gradient, one has a quadratic approximation to the energy that one
    can solve for a minimum (or other critical point).  The Evolver has had
    an embryonic capability to do this for a while, but I did not publicize it
    because it was very limited.  Now it has been improved to the point of
    maybe being useful.

      The command to do one iteration is "hessian".  There are some restrictions
    on  its use.  The energies it applies to are area, constraint edge integrals,
    simplex model facet areas, and these named quantity methods: edge_tension,
    edge_length, facet_tension, facet_area, vertex_scalar_integral,
    edge_scalar_integral, edge_vector_integral, facet_scalar_integral,
    facet_vector_integral, facet_2form_integral, and gravity_method.  Note
    particularly it does not apply to the string model or to ordinary gravity.
    One can fake strings in the soapfilm model with edge_length quantity, and use
    gravity_method instead of ordinary gravity.  The constraints that are handled
    are body volumes, level set constraints, and fixed named quantities involving
    the afore mentioned methods.  Unfixed vertices on parameterized boundaries are
    not handled.  Some of these restrictions will be removed in future versions.

      The Hessian method should be tried only when the surface is extremely close
    to a minimum (or some critical point).  I advise evolving with other methods
    (like conjugate gradient) until the energy has converged to 8 places or so.
    If you do try the Hessian from too far away, it is likely to explode your
    surface.  But if you do "check_increase ON", the surface will be restored to
    its previous state if the Hessian method would increase its energy.

      Running the Hessian method is liable to produce a number of warning messages
    when the matrix is not positive definite.  This is normal when there are
    constraints (such as volumes) or degenerate critical points (for example,
    due to translational degrees of freedom).  A message like
      WARNING: sdrv: Not positive definite. Diag[25] = -3.84845;
    indicates the raw energy Hessian is indefinite.  If the constraints don't make
    the net Hessian positive semidefinite, then you will get a message like
      WARNING: Constrained Hessian not positive definite. Index 3
    where the index is the number of negative eigenvalues.  This may show up in
    the first few iterations.  Don't worry about it unless it shows up when the
    Hessian method has converged all the way.

      For degenerate critical points, nullspace directions generate messages like
        WARNING: sdrv: Diag[39] = 3.28904e-15; max in row: 3.1778e-15; adding 1
    As long as the max in row is also small, all is fine. The ``adding 1'' is just
    an internal gimmick to get a nonzero pivot.

      The criterion for treating a value as zero in solving the Hessian is set
    by the variable "hessian_epsilon".  Its default value is 1e-8.

      To get a feel for the Hessian method, try it out with cube.fe.
    For more details, see the Hessian section of the Technical Reference chapter
    of the Manual.

    New features:

      New named quantity methods: vertex_scalar_integrand, facet_2form_integral.

      Hessians for named quantity methods: edge_length, facet_area,
      vertex_scalar_integral, edge_scalar_integral, edge_vector_integral,
      facet_scalar_integral, facet_vector_integral, facet_2form_integral,
      gravity_method.

      Added edge wrap as readable attribute.

      Added coordinate attributes for edges and facets.  Interpreted as
      edge vector components and facet normal components.

      Commands are added to history list after being successfully parsed,
      rather than after successful execution.

      Unfound files are treated as errors rather than prompting for new
      name, except for datafiles.

      New arithmetic operators: mod (synonym for %), imod, idiv.
      New arithmetic function: atan2(y,x).

      "Show" conditions for edges and facets are saved in "read" section
      of dump file.

      Total energy is in a comment at the top of a dump file.

      PostScript output in case of string model in 3D has option for doing
      bordered crossings.

      w is synonym for coordinate x4.

    Bibliography update:

    X. Michalet, B. Fourcade and D. Bensimon, "Fluctuating vesicles of
    nonspherical topology," Phys. Rev. Lett. 72, 168, 1994.

    End of Newsletter 7.

Back to top of Surface Evolver documentation.