Optimize

The optimize package contains a number of functions and classes to perform shape optimization.

OptimizationProblem

An OptimizationProblem object defines an optimization problem, which may include functionals to optimize as well as global and local constraints.

Create an OptimizationProblem with a mesh:

var problem = OptimizationProblem(mesh)

Add an energy:

var la = Area()
problem.addenergy(la)

Add an energy that operates on a selected region, and with an optional prefactor:

problem.addenergy(la, selection=sel, prefactor=2)

Add a constraint:

problem.addconstraint(la)

Add a local constraint (here a onesided level set constraint):

var ls = ScalarPotential(fn (x,y,z) z, fn (x,y,z) Matrix([0,0,1]))
problem.addlocalconstraint(ls, onesided=true)

Optimizer

Optimizer objects are used to optimize Meshes and Fields. You should use the appropriate subclass: ShapeOptimizer or FieldOptimizer respectively.

ShapeOptimizer

A ShapeOptimizer object performs shape optimization: it moves the vertex positions to reduce an overall energy.

Create a ShapeOptimizer object with an OptimizationProblem and a Mesh:

var sopt = ShapeOptimizer(problem, m)

Take a step down the gradient with fixed stepsize:

sopt.relax(5) // Takes five steps

Linesearch down the gradient:

sopt.linesearch(5) // Performs five linesearches

Perform conjugate gradient (usually gives faster convergence):

sopt.conjugategradient(5) // Performs five conjugate gradient steps.

Control a number of properties of the optimizer:

sopt.stepsize=0.1 // The stepsize to take
sopt.steplimit=0.5 // Maximum stepsize for optimizing methods
sopt.etol = 1e-8 // Energy convergence tolerance
sopt.ctol = 1e-9 // Tolerance to which constraints are satisfied
sopt.maxconstraintsteps = 20 // Maximum number of constraint steps to use

FieldOptimizer

A FieldOptimizer object performs field optimization: it changes elements of a Field to reduce an overall energy.

Create a FieldOptimizer object with an OptimizationProblem and a Field:

var sopt = FieldOptimizer(problem, fld)

Field optimizers provide the same options and methods as Shape optimizers: see the ShapeOptimizer documentation for details.