# Membrane Dynamics in 3D using Discrete Differential Geometry (Mem3DG)
[![Testing and release](https://github.com/RangamaniLabUCSD/Mem3DG/actions/workflows/ci.yaml/badge.svg?branch=main)](https://github.com/RangamaniLabUCSD/Mem3DG/actions/workflows/ci.yaml)
[![Zenodo](https://zenodo.org/badge/244037679.svg)](https://zenodo.org/doi/10.5281/zenodo.10359392)
[![PyPI](https://img.shields.io/pypi/v/pymem3dg)](https://pypi.org/project/pymem3dg/)
[![Conda-forge](https://anaconda.org/conda-forge/pymem3dg/badges/version.svg)](https://anaconda.org/conda-forge/pymem3dg)
Mem3DG is a flexible software package to model the membrane and its dynamics using unstructured meshes.
This work is currently under heavy development, please star this repository to follow along!
## Installation
The core of Mem3DG is written in C++ with functions exposed to a Python interface using pybind11.
The python interface and helper utilities for visualization and analysis are bundled together into a python package called pymem3dg.
pymem3dg can be obtained using pip (`pip install pymem3dg`) or conda (`conda install pymem3dg`) from their respective repositories.
For the majority of users who wish to develop models, this is the recommended installation procedure.
### Dependencies
We acknowledge the use of helpful external libraries including:
* [Geometry-Central](https://geometry-central.net/), the core mesh data structure
* [libigl](https://libigl.github.io/), some geometry input generation
* [pybind11](https://pybind11.readthedocs.io/en/stable/), for Python-C++ interoperability
* [Polyscope](https://polyscope.run/py/), trajectory visualization GUI
* [PCG](https://www.pcg-random.org/index.html), random number generation
* [NetCDF-cxx4](https://github.com/Unidata/netcdf-cxx4), binary trajectory I/O
While the majority of these libraries are either included in this repository
### Building for development
For advanced users who seek to modify the code, develop simulations in C++ directly, or produce/link to Mem3DG shared libraries, Mem3DG can be configured and built using CMake.
After cloning the repository, initialize submodules and their dependencies, and follow the standard CMake out-of-source configuration and build procedures.
```bash
git submodule update --init --recursive
mkdir build
cd build
cmake -DWITH_NETCDF=ON -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release
```
There are several CMake options which you can configure.
Further options can be discovered by inspecting the CMakeLists.txt or using a utility like `ccmake` or `cmake -LAH`.
These options can be passed during the configuration step (e.g., `-DWITH_NETCDF=ON`).
```cmake
option(BUILD_PYMEM3DG "Build the python extensions?" ON)
option(WITH_NETCDF "Build with NetCDF (binary trajectory output)?" ON)
option(BUILD_MEM3DG_DOCS "Configure documentation" OFF)
option(M3DG_GET_OWN_EIGEN "Download own Eigen" ON)
option(M3DG_GET_OWN_PYBIND11 "Download own pybind11" ON)
option(WITH_LIBUNWIND "Link libunwind for stack traces" OFF)
option(WITH_OPENMP "Build with OpenMP support" OFF)
option(LINK_PROFILER "Link profiler gperftools" OFF)
option(MEM3DG_PEDANTIC "Be extremely pedantic while compiling" OFF)
```
### Building `pymem3dg`
While the pymem3dg extension module can be built directly with CMake, packaging and installing in a matter which conforms with guidelines from the [Python packaging authority](https://packaging.python.org/en/latest/) is best done using python tooling.
We use [`scikit-build-core`](https://scikit-build-core.readthedocs.io/en/latest/) to bridge between CMake and the Python build system.
Typical Python metadata and details are specified in `pyproject.toml`.
pymem3dg can be built and installed by using pip from the root of this repository.
```bash
git submodule update --init --recursive
pip install -v .
```
Extra dependencies for building the documentation and tests can be installed as well `pip install -v .[docs,tests]`.
Other options can be passed to CMake by modifying config-settings in pip.
`pip install . --config-settings=cmake.build-type="Debug"`
## Acknowledging your use of Mem3DG
Mem3DG is developed by [Cuncheng Zhu](https://github.com/cuzhucuncheng), [Christopher T. Lee](https://ctlee.github.io/), with contributions from others.
Development of Mem3DG is funded in part by AFOSR MURI FA9550-18-1-0051, and a Hartwell Foundation Postdoctoral Fellowship.
Raw data
{
"_id": null,
"home_page": null,
"name": "pymem3dg",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "meshing membrane mechanics discrete differential geometry Helfrich",
"author": null,
"author_email": "Cuncheng Zhu <cuzhu@ucsd.edu>, Christopher T. Lee <ctlee@ucsd.edu>",
"download_url": "https://files.pythonhosted.org/packages/6c/9b/2b8bede4d6340fe6d6a8910c178925d43c75d5d5ed47a9a461f9bb537f2c/pymem3dg-0.0.7.tar.gz",
"platform": null,
"description": "# Membrane Dynamics in 3D using Discrete Differential Geometry (Mem3DG)\n\n[![Testing and release](https://github.com/RangamaniLabUCSD/Mem3DG/actions/workflows/ci.yaml/badge.svg?branch=main)](https://github.com/RangamaniLabUCSD/Mem3DG/actions/workflows/ci.yaml)\n[![Zenodo](https://zenodo.org/badge/244037679.svg)](https://zenodo.org/doi/10.5281/zenodo.10359392)\n[![PyPI](https://img.shields.io/pypi/v/pymem3dg)](https://pypi.org/project/pymem3dg/)\n[![Conda-forge](https://anaconda.org/conda-forge/pymem3dg/badges/version.svg)](https://anaconda.org/conda-forge/pymem3dg)\n\nMem3DG is a flexible software package to model the membrane and its dynamics using unstructured meshes.\nThis work is currently under heavy development, please star this repository to follow along!\n\n## Installation\n\nThe core of Mem3DG is written in C++ with functions exposed to a Python interface using pybind11.\nThe python interface and helper utilities for visualization and analysis are bundled together into a python package called pymem3dg.\npymem3dg can be obtained using pip (`pip install pymem3dg`) or conda (`conda install pymem3dg`) from their respective repositories.\nFor the majority of users who wish to develop models, this is the recommended installation procedure.\n\n### Dependencies\n\nWe acknowledge the use of helpful external libraries including:\n\n* [Geometry-Central](https://geometry-central.net/), the core mesh data structure\n* [libigl](https://libigl.github.io/), some geometry input generation\n* [pybind11](https://pybind11.readthedocs.io/en/stable/), for Python-C++ interoperability\n* [Polyscope](https://polyscope.run/py/), trajectory visualization GUI\n* [PCG](https://www.pcg-random.org/index.html), random number generation\n* [NetCDF-cxx4](https://github.com/Unidata/netcdf-cxx4), binary trajectory I/O\n\nWhile the majority of these libraries are either included in this repository\n\n### Building for development\n\nFor advanced users who seek to modify the code, develop simulations in C++ directly, or produce/link to Mem3DG shared libraries, Mem3DG can be configured and built using CMake.\nAfter cloning the repository, initialize submodules and their dependencies, and follow the standard CMake out-of-source configuration and build procedures.\n\n```bash\ngit submodule update --init --recursive\nmkdir build\ncd build\ncmake -DWITH_NETCDF=ON -DCMAKE_BUILD_TYPE=Release ..\ncmake --build . --config Release\n```\n\nThere are several CMake options which you can configure.\nFurther options can be discovered by inspecting the CMakeLists.txt or using a utility like `ccmake` or `cmake -LAH`.\nThese options can be passed during the configuration step (e.g., `-DWITH_NETCDF=ON`).\n```cmake\noption(BUILD_PYMEM3DG \"Build the python extensions?\" ON)\noption(WITH_NETCDF \"Build with NetCDF (binary trajectory output)?\" ON)\noption(BUILD_MEM3DG_DOCS \"Configure documentation\" OFF)\noption(M3DG_GET_OWN_EIGEN \"Download own Eigen\" ON)\noption(M3DG_GET_OWN_PYBIND11 \"Download own pybind11\" ON)\noption(WITH_LIBUNWIND \"Link libunwind for stack traces\" OFF)\noption(WITH_OPENMP \"Build with OpenMP support\" OFF)\noption(LINK_PROFILER \"Link profiler gperftools\" OFF)\noption(MEM3DG_PEDANTIC \"Be extremely pedantic while compiling\" OFF)\n```\n\n### Building `pymem3dg`\n\nWhile the pymem3dg extension module can be built directly with CMake, packaging and installing in a matter which conforms with guidelines from the [Python packaging authority](https://packaging.python.org/en/latest/) is best done using python tooling.\nWe use [`scikit-build-core`](https://scikit-build-core.readthedocs.io/en/latest/) to bridge between CMake and the Python build system.\nTypical Python metadata and details are specified in `pyproject.toml`.\n\npymem3dg can be built and installed by using pip from the root of this repository.\n```bash\ngit submodule update --init --recursive\npip install -v .\n```\nExtra dependencies for building the documentation and tests can be installed as well `pip install -v .[docs,tests]`.\nOther options can be passed to CMake by modifying config-settings in pip.\n`pip install . --config-settings=cmake.build-type=\"Debug\"`\n\n## Acknowledging your use of Mem3DG\n\nMem3DG is developed by [Cuncheng Zhu](https://github.com/cuzhucuncheng), [Christopher T. Lee](https://ctlee.github.io/), with contributions from others.\nDevelopment of Mem3DG is funded in part by AFOSR MURI FA9550-18-1-0051, and a Hartwell Foundation Postdoctoral Fellowship.\n",
"bugtrack_url": null,
"license": "Mozilla Public License 2.0 (MPL 2.0)",
"summary": "PyMem3DG: Membrane Dynamics in 3D using Discrete Differential Geometry",
"version": "0.0.7",
"project_urls": null,
"split_keywords": [
"meshing",
"membrane",
"mechanics",
"discrete",
"differential",
"geometry",
"helfrich"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "6c9b2b8bede4d6340fe6d6a8910c178925d43c75d5d5ed47a9a461f9bb537f2c",
"md5": "78ff3827a67070a30eef96440055a1dd",
"sha256": "f49e5d4eb4f836fae50763f85ce7d7c088bd7a64ce7a8392a0501cccd9d7966b"
},
"downloads": -1,
"filename": "pymem3dg-0.0.7.tar.gz",
"has_sig": false,
"md5_digest": "78ff3827a67070a30eef96440055a1dd",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 32153085,
"upload_time": "2024-04-12T20:38:28",
"upload_time_iso_8601": "2024-04-12T20:38:28.586112Z",
"url": "https://files.pythonhosted.org/packages/6c/9b/2b8bede4d6340fe6d6a8910c178925d43c75d5d5ed47a9a461f9bb537f2c/pymem3dg-0.0.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-04-12 20:38:28",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "pymem3dg"
}