# jigsaw **Repository Path**: cywang_thu/jigsaw ## Basic Information - **Project Name**: jigsaw - **Description**: JIGSAW is a Delaunay-based unstructured mesh generator for two- and three-dimensional geometries. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-02-16 - **Last Updated**: 2024-12-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## `JIGSAW: An unstructured mesh generator`

     

`JIGSAW` is a computational library for unstructured mesh generation and tessellation; designed to generate high-quality triangulations and polyhedral decompositions of general planar, surface and volumetric domains. `JIGSAW` includes `refinement`-based algorithms for the construction of new meshes, `optimisation`-driven techniques for the improvement of existing grids, as well as routines to assemble (restricted) Delaunay tessellations and Voronoi complexes. This package provides the underlying `C++` source for `JIGSAW`; defining a basic command-line interface and a `C`-format `API`. A `MATLAB` / `OCTAVE` based scripting interface, including a range of additional facilities for file I/O, mesh visualisation and post-processing operations can be found here. `JIGSAW` has been compiled and tested on various `64-bit` `Linux` , `Windows` and `Mac` based platforms. ## `Code Structure` `JIGSAW` is written as a `header-only` library in `C++`. Both a basic command-line interface and a `C`-format `API` are defined: JIGSAW:: ├── src -- JIGSAW src code ├── inc -- JIGSAW header files (for libjigsaw) ├── bin -- put JIGSAW exe binaries here ├── lib -- put JIGSAW lib binaries here ├── geo -- geometry definitions and input data ├── out -- default folder for JIGSAW output └── uni -- unit tests and libjigsaw example programs ## `Getting Started` The first step is to compile the code! The `JIGSAW` src can be found in `../jigsaw/src/`. `JIGSAW` is a `header-only` package - there is only the single main `jigsaw.cpp` file that simply `#include`'s the rest of the library as headers. The resulting build process should be fairly straight-forward as a result. `JIGSAW` does not currently dependent on any external packages or libraries. #### `On Linux/Mac` `JIGSAW` has been successfully built using various versions of the `g++` and `llvm` compilers. Since the build process is a simple one-liner, there's no `make` script - instead: g++ -std=c++11 -pedantic -Wall -s -O3 -flto -D NDEBUG -D __cmd_jigsaw -static-libstdc++ jigsaw.cpp -o jigsaw64r will build the main `JIGSAW` cmd-line executable, g++ -std=c++11 -pedantic -Wall -s -O3 -flto -D NDEBUG -D __cmd_tripod -static-libstdc++ jigsaw.cpp -o tripod64r will build the `TRIPOD` cmd-line utility (`JIGSAW`'s tessellation infrastructure) and, g++ -std=c++11 -pedantic -Wall -O3 -flto -fPIC -D NDEBUG -D __lib_jigsaw -static-libstdc++ jigsaw.cpp -shared -o libjigsaw64r.so will build `JIGSAW` as shared library. See the headers in `../jigsaw/inc/` for details on the `API`. #### `On Windows` `JIGSAW` has been successfully built using various versions of the `msvc` compiler. I do not provide a sample `msvc` project, but the following steps can be used to create one: * Create a new, empty MSVC project. * Import the jigsaw.cpp file, this contains the main() entry-point. #### `Folder Structure` Once you have built the `JIGSAW` binaries, place them in the appropriate sub-folders in`../jigsaw/bin/` and/or `../jigsaw/lib/` directories, so that they can be found by the unit tests in `../jigsaw/uni/`. ## `A Simple Example` After compiling the code, run the following command-line example to get started: ```` On WIN-64 platforms: \bin\WIN-64\jigsaw64r.exe example.jig On LNX-64 platforms: /bin/LNX-64/jigsaw64r example.jig ```` In this example, a high-quality tetrahedral mesh is generated for the 'stanford-bunny' geometry and the result is written to file. The input geometry is specified as a triangulated surface, and is read from `../jigsaw/geo/bunny.msh`. The volume and surface mesh outputs are written to `../jigsaw/out/bunny.msh`. Edit `example.jig` for a description of `JIGSAW`'s configuration options. A set of unit-tests and `libjigsaw` example programs are contained in `../uni/`. The `JIGSAW-API` is documented via the header files in `../inc/`. A repository of 3D surface models generated using `JIGSAW` can be found here. ## `License` This program may be freely redistributed under the condition that the copyright notices (including this entire header) are not removed, and no compensation is received through use of the software. Private, research, and institutional use is free. You may distribute modified versions of this code `UNDER THE CONDITION THAT THIS CODE AND ANY MODIFICATIONS MADE TO IT IN THE SAME FILE REMAIN UNDER COPYRIGHT OF THE ORIGINAL AUTHOR, BOTH SOURCE AND OBJECT CODE ARE MADE FREELY AVAILABLE WITHOUT CHARGE, AND CLEAR NOTICE IS GIVEN OF THE MODIFICATIONS`. Distribution of this code as part of a commercial system is permissible `ONLY BY DIRECT ARRANGEMENT WITH THE AUTHOR`. (If you are not directly supplying this code to a customer, and you are instead telling them how they can obtain it for free, then you are not required to make any arrangement with me.) `DISCLAIMER`: Neither I nor: Columbia University, the Massachusetts Institute of Technology, the University of Sydney, nor the National Aeronautics and Space Administration warrant this code in any way whatsoever. This code is provided "as-is" to be used at your own risk. ## `References` There are a number of publications that describe the algorithms used in `JIGSAW` in detail. If you make use of `JIGSAW` in your work, please consider including a reference to the following: `[1]` - Darren Engwirda: Generalised primal-dual grids for unstructured co-volume schemes, J. Comp. Phys., 375, pp. 155-176, https://doi.org/10.1016/j.jcp.2018.07.025, 2018. `[2]` - Darren Engwirda, Conforming Restricted Delaunay Mesh Generation for Piecewise Smooth Complexes, Procedia Engineering, 163, pp. 84-96, https://doi.org/10.1016/j.proeng.2016.11.024, 2016. `[3]` - Darren Engwirda, Voronoi-based Point-placement for Three-dimensional Delaunay-refinement, Procedia Engineering, 124, pp. 330-342, http://dx.doi.org/10.1016/j.proeng.2015.10.143, 2015. `[4]` - Darren Engwirda, David Ivers, Off-centre Steiner points for Delaunay-refinement on curved surfaces, Computer-Aided Design, 72, pp. 157-171, http://dx.doi.org/10.1016/j.cad.2015.10.007, 2016. `[5]` - Darren Engwirda, Locally-optimal Delaunay-refinement and optimisation-based mesh generation, Ph.D. Thesis, School of Mathematics and Statistics, The University of Sydney, http://hdl.handle.net/2123/13148, 2014.