Unconstrained polytopic shape optimization ver 1.0.0
####################################################

The code performs unconstrained shape optimization on an unstructured polytopic
mesh.

## Installation
To utilize the code, simply download all python code files within the folder to
the same directory and run 'main.py'

## Usage
'main.py' contains a basic use of the optimization function as well as the
example used in the paper. If you wish to edit the initial or target functions,
you will have to provide the bivariate functions init(), targ() and dtarg()
which output the initial condition, target level set and the x/y components of
the target level set respectively. Make sure that the sub-level set for both
the initial condition and target level set are restricted to being within
hold-all domain.

#returns basic optimization
problem.set_mesh(31)
problem.levelset(init, targ, dtarg)

#returns optimization from paper
problem.set_mesh(31)
problem.levelset(init, targ, dtarg, npoly=200,sc=1/13000, Mb=30, dMb=5)

NOTE 1: Due to the stochastic nature of the mesh generation, there is a small
probability of the code generating a incompatible arrays for internal computations.
In such situations, simply rerun the code to generate a different mesh.

NOTE 2: Also, be aware that if the velocity norm is too high, it will violate
the CFL condition making the simulation unstable.  In such situations, simply
reduce the velocity scaling variable 'sc' (I have found that having the
velocity norm < 0.1 to work in most instances)
