Software Design#
Interactions between macroscopic components#
OpenPisco provides three main components:
The optimization engine, used to drive the optimization iterations
The level set engine, to handle the evolution and the computation of the level set function \(\phi\)
A collection of various criteria of interest, in the context of topology optimization
The figure below describes the interactions between this components from a macroscopical point of view.

Fig. 19 Interactions between OpenPisco main components#
Focus on criteria#
Within OpenPisco semantic, a criterion take as an input a levelSet and should be able to:
Compute its value
Compute its associated sensitivity

Fig. 20 Inner API used when updating criteria#
Note that:
When a criterion is used within an optimization problem, it makes no difference whether it is used as the objective or a constraint.
Each criterion defines its internal physical simulator and potential adjoint solvers, if required.
RST directory Tree#
We introduce briefly the repositories within the module and refer to the respective documentation for more details. The library is organized as follows
OpenPisco
├── Actions
├── MuscatExtentions
├── CLApp
├── Demos
├── ExternalTools
│ ├── Code_Aster
│ ├── FreeFem
│ ├── Zset
├── Optim
│ ├── Algorithms
│ ├── Criteria
│ ├── Problems
├── PhysicalSolvers
├── QtApp
├── Structured
├── TestData
├── Unstructured
Actions#
It is a collection of encapsulated operations used frequently to run a topology optimization problem with level sets but not exclusively.
MuscatExtentions#
Its content and features are somehow similar to Muscat 1, there are mainly:
Support for the MED format, used with Code_Aster in particular
Support for Code_Aster integration scheme
Mesh quality related tools
CLApp#
Implementation of OpenPisco Domain Specific Language (DSL) based on a XML-like syntax.
Demos#
Collection of topology optimization examples from the scientific literature
ExternalTools#
Scripts related to the external tools used within the platform, mainly the physical solvers. For instance, this is where one can find:
For Code_Aster, the .comm and .export files
For FreeFem, some .edp files
The core implementation of the physical analysis supported by the platform and relying on each solver DSL are there.
Optim#
As one could infer from the subdirectories name, there are:
The optimization algorithms to pilot the optimization process
The optimization criteria, both physical and geometrical, to evaluate a shape
The optimization problem, to encapsulate all the components inherent to the optimization process (design space, objective, constraints…)
PhysicalSolvers#
Implementation of the physical analysis available within the platform using the external solvers (Code_aster,FreeFem, Zset) or internal solver (Muscat Solver 1).
QtApp#
Implementation of the OpenPisco Graphic User Interface
Structured#
Various scripts to handle level set on structured meshes
TestData#
Some data
Unstructured#
Script related to level set operations for unstructured meshes. That includes, in particular:
The redistanciation
The remeshing tools
The advection