GithubHelp home page GithubHelp logo

byd-biyandong / mesh-sphere-packing Goto Github PK

View Code? Open in Web Editor NEW

This project forked from chrisk314/mesh-sphere-packing

0.0 0.0 0.0 254 KB

Mesh generator for producing tetrahedral meshes with periodic boundaries from packings of spheres.

License: MIT License

Python 100.00%

mesh-sphere-packing's Introduction

mesh-sphere-packing

MeshSpherePacking is a mesh generator for producing quality tetrahedral meshes with periodic boundaries from packings of spheres for use in finite volume simulations. The code was produced during my PhD research to enable highly resolved CFD simulations of fluid flow in the interstitial spaces of densely packed, idealized sand grain packings. In order to apply periodic boundary conditions (PBCs) along a given axis, some CFD packages require congruence of all boundary triangles at either end of the domain. I didn't find an existing package to meet my (very bespoke!) requirements, so this imaginatively named project was born!

Below is a rendering of a fluid velocity field at low Reynolds number using an MSP mesh with over 600 particles and about 8 million tetrahedral elements. It took around 5 minutes to build the mesh on a single HPC node and another 5 minutes to output the mesh in .vtk format.

fluid velocity field

The mesh generator produces tetrahedral meshes of the interstitial, or void, space between collections of spheres which reside in a cuboid shaped spatial domain. Periodic boundaries can be applied along any axis. Periodic boundaries are achieved by identifying intersections of the particle geometry with any of the domain boundaries and splitting the particles into "pieces" along the intersection planes. For an axis along which periodic boundaries are in effect, intersections occur at the lower boundary with "ghost" particles which are duplicated from the upper boundary. The domain boundaries are triangulated (just the lower boundaries in the case of PBCs) using Shewchuk's Triangle library, taking into account any holes produced by the intersections. Where PBCs are applied the triangulated lower boundaries are then duplicated at the corresponding upper boundary, hence achieving the required congruency of boundary triangles across the periodic boundary. A Piecewise Linear Complex is then formed of all the sphere pieces and boundaries which is triangulated using TetGen. The wrapper library MeshPy provides the Python interface to Triangle and TetGen.

Usage

To install simply clone and pip install like so

git clone [email protected]:chrisk314/mesh-sphere-packing.git
cd mesh-sphere-packing
pip install .
export PATH=${PATH}:${PWD}/bin

Particle coordinates and radii must be specified along with the domain side lengths and periodic boundary flags in a file like below

# particles.msp
2.0e-03 2.0e-03 2.0e-03
1 1 1
00 1.0e-03 2.0e-04 3.0e-04 5.0e-04
01 5.0e-04 1.0e-03 1.5e-04 3.0e-04
02 1.2e-03 1.2e-03 1.2e-03 5.0e-04
03 1.5e-03 1.0e-04 1.5e-03 3.0e-04
04 5.0e-04 1.9e-03 8.0e-04 2.0e-04 
05 1.0e-04 3.0e-04 1.8e-03 4.0e-04
06 8.0e-04 8.0e-04 7.0e-04 2.0e-04
07 1.3e-03 1.3e-03 2.0e-04 4.0e-04 
08 1.9e-03 1.5e-03 1.6e-03 3.0e-04
09 1.8e-03 6.0e-04 8.0e-04 4.0e-04
10 2.2e-04 1.5e-03 6.0e-04 2.0e-04
11 5.0e-04 1.5e-03 1.8e-03 3.0e-04

This example specifies 12 particles in a 2mm x 2mm x 2mm domain and periodic boundaries along the x, y, and z axes. Here's an image of this particle configuration

12 spheres in a box

In order to control the sphere refinement process and the parameters used by TetGen during the tetrahedral mesh generation a .yaml config file should be provided as below

# config.yml
allow_overlaps: false
duplicate_particles: [false, false, false]
output_format: [vtk]
particle_file: particles.msp
segment_length: 3.3e-05       # Controls sphere refinement
tetgen_max_volume: 5.0e-13    # Controls tetrahedron volume
tetgen_min_angle: 18.0        # Minimum allowed face angle for tetrahedra
tetgen_rad_edge_ratio: 1.4    # Target radius:edge ratio for tetrahedra

Default values are specified by the program but as the mesh quality is dependent on both the length scale of the input geometry and the characteristic edge length scale specified by segment_length, these values should be set in a config file on a case by case basis.

The build process is initiated using a config file config.yml and a particle file particles.msp, such as those provided in the example directory, like so

mspbuild -c config.yml -p particles.msp

This produces the below log output on stdout which is also written to msp.log, additionally the stdout from TetGen is redirected to tet.out.

MSP-Build  INFO     25-10-18 17:08:02.839  :    Reading program inputs
MSP-Build  INFO     25-10-18 17:08:02.844  :    Starting mesh build process
MSP-Build  INFO     25-10-18 17:08:02.844  :    Splitting input particles
MSP-Build  INFO     25-10-18 17:08:03.293  :    Triangulating domain boundaries
MSP-Build  INFO     25-10-18 17:08:06.518  :    Building tetrahedral mesh
MSP-Build  INFO     25-10-18 17:08:06.519  :        -> building vertex list...
MSP-Build  INFO     25-10-18 17:08:07.616  :        -> calling TetGen (writing log to ./tet.log)
MSP-Build  INFO     25-10-18 17:08:14.799  :    Built mesh with 64944 points, 316378 tetrahedra, 659834 faces, and 408396 edges
MSP-Build  INFO     25-10-18 17:08:14.807  :    Completed mesh build
MSP-Build  INFO     25-10-18 17:08:14.807  :    Outputting mesh in formats: vtk
MSP-Build  INFO     25-10-18 17:08:23.414  :    Finished

Output was specified in .vtk format in the config file so an output file particles,a_5.00e-13,s_3.30e-05.vtk containing the mesh geometry and topology is also created. It's possible to specify multiple output formats. The currently supported output formats are: Polygon .ply, Geomview .msh, TetGen .poly, legacy VTK .vtk, MultiFlow .h5. The output .vtk mesh can be viewed in ParaView and is shown below

periodic tetrahedral mesh

mesh-sphere-packing's People

Contributors

chrisk314 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.