Skip to content

Commit

Permalink
Topology optimization with homogenized level set (#58)
Browse files Browse the repository at this point in the history
* -- Added two classes for subelement refinement that look for element intersection with level set boundary and add new elements to the mesh inside each subelement.

* -- Bug-fixes for sub element refinement.

* -- Modifying the behavior of if_elem_has_positive_phi_region() in level set elem intersection.

* -- Bug-fix for stress assembly.

* removing commented code from level set nonlinear implicit assembly class.

* -- Bug-fixes for sub element refinement.

* -- Modified example 5 to use the sub-element refinement class.

* -- Added methods to compute topology sensitivity callable from nonlinear implicit assembly.
-- Modifications in elem operation classes to support this.

* -- Added nanoFlann KD-tree based geometry filter initialization

* -- Added iteration counter to function evaluation.

* -- Minor fix

* -- refactored topology optimization examples by moving each model to an independent file and making the driver functions in the example templated so that the models can be easily switched out.

* -- Added reference volume calculation to the topology models.

* -- Added structural null-space vector to SIMP topology optimization so that AMG solvers can be used.
-- Added problem_type in SIM topology optimization example so that objective/constraint function can be modified using user options.

* -- Added null space vector object to level-set topology optimization example
-- Added problem_type to level-set topology optimization example.

* -- Removed unnecessary output call from FunctionEvaluation::evaluate

* Removing errors introduced during merging of master.

* Added a dof-constraint for the hanging node created with element intersection.

* -- Bug-fix for sub-element hanging node constraint.

* -- Added ability to specify element subdomain ids that will be excluded in the global assembly routines.

* Added level-set interface point search and normal computation at a point on level-set function.

* -- Minor fixes.

* -- Added traction shifted boundary condition to all topology optimization examples
-- Added method in level-set topology optimization example to mark  shifted boundaries for application of traction boundary condition.
-- Added traction boundary condition in structural analysis. Currently only implemented for 2D inplane structural analysis.
-- Added a shifted boundary application of traction boundary condition. Currently only implemented for 2D inplane structural analysis.
-- Added option for computation of second order spatial derivative for side integration.
-- Damped the Newton-step for identification of point on shifted boundary.
-- Added method in level-set element intersection class to identify the sides of the element on material.
-- Bug-fixes in sub-element mesh refinement class.

* -- Minor fixes.

* -- added methods to compute sensitivity of shifted boundary traction.
-- added supporting methods in level-set boundary velocity object and mesh function.

* -- Added sensitivity of shifted boundary traction residual for 2D elements.

* -- Bug-fix for volume sensitivity in compliance minimization part of  example 5

* -- bug-fix

* -- Bug-fixes for example 5.

* Minor edit in example 5.

* Minor fix in structural element 2D.

* Added damping factor to boundary point search.

* -- Changed Node to Point in plot utility.

* The level set boundary point search can lack convergence in regions of high curvature when the searched point moves from one element to another since the gradient of the level-set function can be very different between the two adjacent elements. In this case the point is searched starting from the most recent unconverged point. This is allowed only once.

* -- bug-fix for sensitivity of surface normal on level set boundary.

* -- bug-fixes in topology optimization examples.

* -- Bug-fixes for 2d structural elem.

* -- Added methods to remove side and volume loads in physics discipline.

* -- Bug-fixes in example 5.

* -- Bug-fix in sensitivity of boundary normal computed in level set boundary velocity class
-- Added a Hessian approximation in interface point search to improve robustness of point search when the search point ends up in a different element with jump in slope (in regions of high curvature).

* -- Added the ability to obtain nearest intersection points on an element based on the intersection computed on an element.

* Removing shifted boundary initializations from example 5.

* -- Removed _assembly as a member of the ElemBase class.

* -- Added classes to compute homogenized element volume fraction from level set function.

* added example 7 for homogenized level-set based topology optimization

* various bug-fixes for homogenized level-set-based topology optimization.

* Fixes for memory errors in example 7.

* -- Level-set-based Homogenized volume fraction sensitivity initialization now uses the geometric filter information to improve the computational efficiency.

* -- Bug-fix in heaviside function based homogenization
-- Modified the element modulus function in example 7 to use a penalty parameter similar to SIMP.

* -- Updated example 7 for homogenized level-set-based topology optimization with different penalization of modulus of elasticity for static analysis and stress analysis.
-- Updated smoothing width for approximate Heaviside to 0.1.
-- Minor fixes for compatibility with libMesh changes to parallel communicator API.

* integrating homogenized level-set topology optimization example as example 8

* reintegrated commits lost during rebase. Nastran example is enabled only if NastranIO is enabled.

* commiting files missed in previous commit

* -- Minor changes to the topology example titles.

* adding fix for timpi

* -- Bug-fixes for compilation of nastranIO with conditional compilation of mast with pynastran
-- Modified upper/lower limit of level-set in example 8 to +/- 10

* removing pynastran_io.cpp and pynastran_io.h from repository since these are created by cython during each compilation.

* undoing the previous change of removing the pynastran_io* files in src/mesh.

* -- Fixes for backwards compatibility to libMesh.

* -- Fix for lib mesh backwards compatibility.

* -- More fixes for backwards compatibility.
  • Loading branch information
manavbhatia authored Jan 30, 2020
1 parent e33b692 commit 04f3389
Show file tree
Hide file tree
Showing 110 changed files with 10,665 additions and 3,420 deletions.
4 changes: 4 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@ if (ENABLE_NASTRANIO)
else()
message(STATUS " Numpy package found")
endif()

set (MAST_ENABLE_NASTRANIO 1)
else()
set (MAST_ENABLE_NASTRANIO 0)
endif()

# THIRD PARTY/CONTRIB
Expand Down
34 changes: 33 additions & 1 deletion cmake/FindlibMesh.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,35 @@ find_library(libMesh_dbg_LIBRARY
NAMES mesh_dbg
HINTS ${libMesh_DIR}/lib)

find_library(timpi_opt_LIBRARY
NAMES timpi_opt
HINTS ${libMesh_DIR}/lib)

find_library(timpi_dbg_LIBRARY
NAMES timpi_dbg
HINTS ${libMesh_DIR}/lib)

if (NOT timpi_opt_LIBRARY)
find_library(timpi_opt_LIBRARY
NAMES mesh_opt
HINTS ${libMesh_DIR}/lib)
endif()

if (NOT timpi_dbg_LIBRARY)
find_library(timpi_dbg_LIBRARY
NAMES mesh_dbg
HINTS ${libMesh_DIR}/lib)
endif()

# If debug library is not available then set it to the optimized library
if(NOT libMesh_dbg_LIBRARY)
message("-- WARN: Did not find libmesh_dbg using libmesh_opt for debug version.")
find_library(libMesh_dbg_LIBRARY
NAMES mesh_opt
HINTS ${libMesh_DIR}/lib)
find_library(timpi_dbg_LIBRARY
NAMES timpi_opt
HINTS ${libMesh_DIR}/lib)
endif()


Expand Down Expand Up @@ -52,15 +75,24 @@ endif()
# Set variables.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(libMesh
REQUIRED_VARS libMesh_dbg_LIBRARY libMesh_opt_LIBRARY libMesh_INCLUDE_DIR
REQUIRED_VARS
libMesh_dbg_LIBRARY
libMesh_opt_LIBRARY
timpi_dbg_LIBRARY
timpi_opt_LIBRARY
libMesh_INCLUDE_DIR
VERSION_VAR libMesh_VERSION)

mark_as_advanced(libMesh_INCLUDE_DIR
libMesh_dbg_LIBRARY
libMesh_opt_LIBRARY
timpi_dbg_LIBRARY
timpi_opt_LIBRARY
libMesh_VERSION
libMesh_FOUND)

set(libMesh_dbg_LIBRARIES ${libMesh_dbg_LIBRARY})
set(libMesh_opt_LIBRARIES ${libMesh_opt_LIBRARY})
set(timpi_dbg_LIBRARIES ${timpi_dbg_LIBRARY})
set(timpi_opt_LIBRARIES ${timpi_opt_LIBRARY})
set(libMesh_INCLUDE_DIRS ${libMesh_INCLUDE_DIR})
1 change: 1 addition & 0 deletions doc/tutorials.dox
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
- \subpage structural_example_4
- \subpage structural_example_5
- \subpage structural_example_6
- \subpage structural_example_8
- \subpage structural_example_7
- \subpage fluid_example_1
- \subpage fsi_example_1
Expand Down
5 changes: 3 additions & 2 deletions examples/structural/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ add_subdirectory(example_1) # bar extension
add_subdirectory(example_2) # continuation solver
add_subdirectory(example_3) # thermoelastic plate bending
add_subdirectory(example_4) # tie-constraints
add_subdirectory(example_5) # 2D topology optimization
add_subdirectory(example_6) # 2D SIMP topology optimization
add_subdirectory(example_5) # topology optimization
add_subdirectory(example_6) # SIMP topology optimization
add_subdirectory(example_7) # NastranIO input for Nastran BDF mesh
add_subdirectory(example_8) # Homogenized level-set topology optimization
Loading

0 comments on commit 04f3389

Please sign in to comment.