JavaView® v2.12

jvx.numeric
Class PnEnergyMinimizer

java.lang.Object
  |
  +--jv.object.PsObject
        |
        +--jvx.numeric.PnEnergyMinimizer
All Implemented Interfaces:
java.lang.Cloneable, PsUpdateIf, java.lang.Runnable, java.io.Serializable

public class PnEnergyMinimizer
extends PsObject
implements java.lang.Runnable

Main class to vary a surface to minimize a given energy functional. Minimization runs in a separate thread. For Dirichlet and Area minimization support for hessian and eigenvalues included.

Version:
17.01.01, 1.60 revised (ep) Thread handling slightly corrected. More coming later.
04.01.01, 1.50 revised (kp) Domain geometry may be missing.
08.11.00, 2.10 revised (kp) Replace formatting with PuString rather than Fmt.
21.07.99, 2.00 revised (kp)
00.00.98, 1.00 created (kp)
Author:
Konrad Polthier
See Also:
Serialized Form

Field Summary
static int AREA
           
static int CONFORMAL
           
static int DIRICHLET
           
static int SPRING
           
 
Fields inherited from class jv.object.PsObject
HAS_CONFIG_PANEL, HAS_INFO_PANEL, HAS_MATERIAL_PANEL, HAS_TEXTURE_PANEL, INSPECTOR_INFO, INSPECTOR_INFO_EXT, IS_DELETED, IS_FIXED, IS_SELECTED, IS_USED, NUM_TAGS
 
Constructor Summary
PnEnergyMinimizer()
           
 
Method Summary
 void computeEigenvectors()
           
 void enableUpdateDomain(boolean flag)
          Flag whether domain is updated after each CG-minization loop.
 PgElementSet getDomain()
           
 PnEnergy getEnergy()
          Get current energy.
 PgElementSet getSurface()
           
 void init()
          If instance has missing name then assign default name 'object_NUMBER' where number is the total number of already created instances.
 boolean isRunning()
          Check whether energy minimizer will be stopped.
 boolean isStopped()
          Check whether energy minimizer is currently NOT running a minimizing thread.
 double minimize()
          Minimize energy by invoking conjugate gradient method in a loop.
 void printEigenvalues()
           
 void printEigenvectors()
           
 void printGradient()
           
 void printHessian()
           
 void run()
          Do energy minimization until m_numLoops are done or until a call of stop().
 void setEnergy(PnEnergy energy)
          Set new energy and clear all vector fields.
 void setNumLoops(int numLoops)
          Set number of calls of conjugate gradient method to be performed during each call to PnEnergyMinimizer#minimize().
 boolean setSurface(PgElementSet domain, PgElementSet surface)
          Set references to domain and image surface.
 void setUpdateDomain(boolean flag)
           
 void showEigenvector(int ind)
           
 void showGradient()
           
 void showNone()
           
 void start()
          Start energy minimization in separate thread.
 void step()
          Move vertices in negative gradient direction a certain amount.
 void step(int numSteps)
          Move vertices in negative gradient direction a certain amount.
 void stop()
          Stop energy minimization in separate thread.
 boolean update(java.lang.Object event)
          Update the class whenever a child has changed.
 
Methods inherited from class jv.object.PsObject
addInspector, addUpdateListener, assureInspector, clearTag, clone, clone, clone, copy, getFather, getInfoPanel, getInspector, getName, getNumObjects, hasInspector, hasTag, hasUpdateListener, instanceOf, instanceOf, removeInspector, removeUpdateListener, setName, setParent, setTag, toString, updatePanels
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DIRICHLET

public static final int DIRICHLET

AREA

public static final int AREA

CONFORMAL

public static final int CONFORMAL

SPRING

public static final int SPRING
Constructor Detail

PnEnergyMinimizer

public PnEnergyMinimizer()
Method Detail

init

public void init()
Description copied from class: PsObject
If instance has missing name then assign default name 'object_NUMBER' where number is the total number of already created instances.
Overrides:
init in class PsObject

update

public boolean update(java.lang.Object event)
Update the class whenever a child has changed. Method is usually invoked from the children.
Overrides:
update in class PsObject
Following copied from class: jv.object.PsObject
See Also:
PsObject.setParent(PsUpdateIf), PsObject.getFather(), PsObject.addUpdateListener(PsUpdateIf)

getEnergy

public PnEnergy getEnergy()
Get current energy.

setEnergy

public void setEnergy(PnEnergy energy)
Set new energy and clear all vector fields. Domain argument maybe null.

enableUpdateDomain

public void enableUpdateDomain(boolean flag)
Flag whether domain is updated after each CG-minization loop. When iteratively computing harmonic maps copy image surface into domain after minimization to update domain metric. Main use is inside Pinkall/Polthier algorithm on computing minimal surfaces by iterating harmonic maps.

getDomain

public PgElementSet getDomain()

getSurface

public PgElementSet getSurface()

setSurface

public boolean setSurface(PgElementSet domain,
                          PgElementSet surface)
Set references to domain and image surface. Image surface is usually being minimized while domain surface is often used when minimizing energy of maps between surfaces. Dimension of vertices of domain and surface may be different, e.g., domain may have 2-dimensional and surface may have 1-dimensional vertices.

Remark: If the geometries are changed outside this energy minimizer, the user must call setSurface() again to update the energy minimizer. Otherwise, further minimization calls will use the old geometry information.


setNumLoops

public void setNumLoops(int numLoops)
Set number of calls of conjugate gradient method to be performed during each call to PnEnergyMinimizer#minimize().

This number of loops is independent of the number of iterations used in each single invocation of the CG-method, which depends on the requested accurracy PnEnergyMinimizer#m_cgEps.

See Also:
minimize()

minimize

public double minimize()
Minimize energy by invoking conjugate gradient method in a loop. A separate thread is started which calls in each step a conjugate gradient method. The number of loops may be set using #setNumLoops(int).
See Also:
setNumLoops(int)

setUpdateDomain

public void setUpdateDomain(boolean flag)

step

public void step()
Move vertices in negative gradient direction a certain amount. Amount is gradient*h with h=0.01. This method is applied numLoops times.
See Also:
step(int)

step

public void step(int numSteps)
Move vertices in negative gradient direction a certain amount. Amount is gradient*h with h=0.01. This method is applied numSteps times.

Method starts a new thread if numSteps>1 which calls step().

See Also:
step()

printGradient

public void printGradient()

showNone

public void showNone()

showGradient

public void showGradient()

printHessian

public void printHessian()

computeEigenvectors

public void computeEigenvectors()

printEigenvalues

public void printEigenvalues()

printEigenvectors

public void printEigenvectors()

showEigenvector

public void showEigenvector(int ind)

isRunning

public boolean isRunning()
Check whether energy minimizer will be stopped.
Returns:
false, if the energy minimizer will stop (just shutting down regularely).

isStopped

public boolean isStopped()
Check whether energy minimizer is currently NOT running a minimizing thread.

start

public void start()
Start energy minimization in separate thread.

stop

public void stop()
Stop energy minimization in separate thread.

run

public void run()
Do energy minimization until m_numLoops are done or until a call of stop().
Specified by:
run in interface java.lang.Runnable

JavaView® v2.12

The software JavaView® is copyright protected. All Rights Reserved.