mimi
is IGA solid mechanics solver leveraging MFEM's NURBS discritization techniques.
It implements implicit nonlinear structural dynamics and contact mechanics with a rigid body, with an option for shared memory parallelization.
Python integration was part of a design to support seamless integration to existing scientific python piplines; through a thin python wrapper, it also enables easy data exchange and dynamic runtime controls.
The main use-case involves investigating and prototyping solid models in multiphysics scenarios, emphasizing fluid-structure-contact interaction.
First, dependencies. Starting with splinepy
cd third_party/splinepy
pip install . -v --config-settings=cmake.args="-DSPLINEPY_MORE=OFF;"
For SuiteSparse
, you can use conda
:
conda install -c conda-forge suitesparse
or you can get it from any package distribution. For example:
# brew (mac)
brew install suite-sparse
# ubuntu
sudo apt-get install libsuitesparse-dev
Now, mimi
git submodule update --init --recursive
python3 setup.py develop
You can pass build variables with your command. For example:
# 1. for debug build
DEBUG=1 python3 setup.py develop
# 2. cmake arguments
CMAKE_ARGS="-DCMAKE_PREFIX_PATH=/path/to/mydir;/usr/dir2 -DMIMI_USE_OMP=False" python3 setup.py develop
Finally, try examples - currently those need to be called at mimi's root
python3 examples/nonlinear_solid.py
Some of the functions and implementations are motivated/adapted/extracted from the following amazing open-source projects. Please check them out!