-
Notifications
You must be signed in to change notification settings - Fork 247
Theory of node based shape optimization
ShapeOptimizationApplication solves a discretized optimization problem through node-based shape optimization. Any given discretized optimization problem can be stated as:
with F the objective function, and G as inequality and H equality sets of constraints. They are functions of the vector s of design variables and the vector u of ndof discrete state variables. The state variables u are a solution of a set S of state equations that are calculated previously. This equation can be expressed in Lagrangian form:
The objective of the optimization process is often the calculation of the derivative of the Lagrangian, as to update the design variables. In a general way, this can be calculated as:
In an optimum, the Karush-Kuhn-Tucker (KKT) conditions are fulfilled:
where λ, μ and u* are vectors of Lagrange multipliers for the function L. This optimization problem is solved using steepest gradient descent method. To this end, the gradient dF/ds must be calculated, generally through sensitivity analysis methods. Once dF/ds is obtained, it is used for updating the values of s with the scheme
where αs is a line search factor,Δt is the timestep size and d is the negative gradient dF/ds. This process is solved iteratively until reaching a minimum. Being a numerical approach, the KKT conditions are never fully fulfilled, and the objective is to approach the minimum up to a reasonable accuracy degree.
Therefore, the general shape optimization loop would be:
- Solve primal problem.
- Calculate response values for F and their gradient using sensitivity analysis.
- Update design values.
- Check convergence.
In node-based shape optimization, the nodes of the geometry discretization are directly related with the shape design variables. The differences in the methods lie in the discretization and sensitivity analysis approaches.
- Bletzinger, K.-U. (2017). Shape Optimization. In Encyclopedia of Computational Mechanics Second Edition (eds E. Stein, R. Borst and T.J.R. Hughes). https://doi.org/10.1002/9781119176817.ecm2109
- Getting Kratos (Last compiled Release)
- Compiling Kratos
- Running an example from GiD
- Kratos input files and I/O
- Data management
- Solving strategies
- Manipulating solution values
- Multiphysics
- Video tutorials
- Style Guide
- Authorship of Kratos files
- Configure .gitignore
- How to configure clang-format
- How to use smart pointer in Kratos
- How to define adjoint elements and response functions
- Visibility and Exposure
- Namespaces and Static Classes
Kratos structure
Conventions
Solvers
Debugging, profiling and testing
- Compiling Kratos in debug mode
- Debugging Kratos using GDB
- Cross-debugging Kratos under Windows
- Debugging Kratos C++ under Windows
- Checking memory usage with Valgind
- Profiling Kratos with MAQAO
- Creating unitary tests
- Using ThreadSanitizer to detect OMP data race bugs
- Debugging Memory with ASAN
HOW TOs
- How to create applications
- Python Tutorials
- Kratos For Dummies (I)
- List of classes and variables accessible via python
- How to use Logger
- How to Create a New Application using cmake
- How to write a JSON configuration file
- How to Access DataBase
- How to use quaternions in Kratos
- How to do Mapping between nonmatching meshes
- How to use Clang-Tidy to automatically correct code
- How to use the Constitutive Law class
- How to use Serialization
- How to use GlobalPointerCommunicator
- How to use PointerMapCommunicator
- How to use the Geometry
- How to use processes for BCs
- How to use Parallel Utilities in futureproofing the code
- Porting to Pybind11 (LEGACY CODE)
- Porting to AMatrix
- How to use Cotire
- Applications: Python-modules
- How to run multiple cases using PyCOMPSs
- How to apply a function to a list of variables
- How to use Kratos Native sparse linear algebra
Utilities
Kratos API
Kratos Structural Mechanics API