5.2 KiB
Thermo-elastic/Mechanical Topology Optimization/Simuation
(Optional) temperature limits, optimization of voxel mesh.
This is the implementation of the paper Thermo-elastic topology optimization with stress and temperature constraints. By the way, this procedure realized the thermo-elastic TO(topology optimization)(Thermo-elastic topology optimization with stress and temperature constraints., mechanical TO(top3d.pdf) and corresponding simulations.
Files
3rd/
: third-party libraryassets/
: user-defined assetsexamples/
: several teaching examplesdefined_model_writer
: User defined voxel mesh/model as TO/simulation input.clamped_model_writer
: Clamped to 0 or 1 of the optimized density.sim_mechanical
: Mechanical simulation.sim_thermoelastic
: Thermo-elastic simulation.top_mechanical
: Mechanical TO.top_thermoelastic
: Thermoelastic TO.
output/
: output directoryref/
: reference materialsrc/
: source codecmake/
: CMake files
Dependencies
Inside libraries:
- mma: constrained optimization algorithm
- Eigen: linear algebra
- libigl: basic geometry functions
- AMGCL: Linear solver. Optional.
- json: parsing input JSON scenes
- spdlog: logging information
- OpenMP: CPU parallel processing.
sudo apt install libomp-dev
The following dependencies require user installation:
- SuiteSparse: Linear solver. Optional, NOTE: Use of the Intel MKL BLAS is strongly recommended.
- CUDA Toolkit: CUDA support. Optional (Strongly recommend).
Select a Linear solver
If your matrix has less than 50w of freedom, then it is recommended to choose a direct solver (e.g. SuiteSparse):
- install SuiteSparse.
- Set
ENABLE_AMGCL
toOFF
and setENABLE_SUITESPARSE
toON
in CMakeLists.txt.
Otherwise, it is recommended to choose an iterative solver (e.g. AMGCL),in CPU:
- install OpenMP and AMGCL.
- Set
ENABLE_AMGCL
toON
,ENABLE_AMGCL_CUDA
toOFF
andENABLE_SUITESPARSE
toOFF
in CMakeLists.txt.
Further, CUDA can be used to speed up the iterative solver:
- install OpenMP, CUDA Toolkit and AMGCL.
- Set
ENABLE_AMGCL
toON
,ENABLE_AMGCL_CUDA
toON
andENABLE_SUITESPARSE
toOFF
in CMakeLists.txt.
Finally, if all options are set to OFF
, then the Eigen build-in iterative solver will be chosen.(not recommended).
Build
- set path in CMakeLists.txt.
set(CMAKE_CUDA_COMPILER "/path/to/nvcc") # set path to nvcc(if AMGCL_CUDA is ON)
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j 16
Usage
24/5/8 updated: extract sequence vtk for topo-optimization
Usage:
- set
extract_inner_vtk
totrue
inexample/top_mechanical/main.cpp
orexample/top_thermoelastic/main.cpp
.
// example/top_mechanical/main.cpp or
// example/top_thermoelastic/main.cpp
bool extract_inner_vtk = true;
- run
example/top_mechanical
orexample/top_thermoelastic
. - see
docs/paraview_extract_animation.webm
for how to extract animation in Paraview.
updated: top and sim sequence
- Use
example/defined_model_writer
to generate a user-defined voxel mesh/model as TO input. - Use
example/top_mechanical
to run mechanical TO. - Use
example/top_thermoelastic
to run thermo-elastic TO.(||Fth|| / ||Fm||
means the ratio of the thermal force to the mechanical force, the value suggested is0.1-10
). - Use
example/clamped_model_writer
to clamp the optimized density to 0 or 1(select a suitable threshold) as SIM input. - Use
example/sim_mechanical
to run mechanical simulation. - Use
example/sim_thermoelastic
to run thermo-elastic simulation.
Note:
- open
*.vtk
via Paraview. - Input
- Set parameters in *.json. see comments in
assets/top-thermoelastic-*.json
(see comments inassets/config_biclamed.json
and ref paper for MeTh parameters; see comments inassets/top/config_Lshape.json
) - Redirect in
main.cpp
ormain.cu
if ENABLE_AMGCL_CUDA is ON: "//*"
inconfig_*.json
file mean comments.
- Set parameters in *.json. see comments in
- Output see
output/txt/${example_name}
,output/txt/${example_name}/${clamed_example_name*}/
andoutput/vtk/${example_name}/${clamed_example_name*}/
. - you can modify
OUTPUT_DIR
andASSETS_DIR
inCMAKEList.txt
. - you can modify the linear solver arguments
prm.solver.tol
andprm.solver.maxiter
insrc/LinearSolver/Amgcl.h
orsrc/LinearSolver/AmgclCuda.h
. - you should modify example content in
*.cpp
rather than*.cu
, the latter is copied from the former by cmake.