Closed nschloe closed 3 years ago
Awesome, thank you for the hints. 👍
Okay lets break these comments down:
You speak of "modifications of distmesh". What modifications are these, exactly? Please go into more detail in the article. (If the mods aren't too small.) If the mods are small, don't mention them.
Okay fair enough. I'll remove "modifications". Although I meant that the parallelism was never really an option in the DistMesh
so it's a modification to the algorithm to support parallelism.
I think you need to make clearer that SeismicMesh is a parellel distmesh implementation plus a mesh density function generator. I would like to hear why distmesh_ and not some other algorithm?
Proposed new summary:
SeismicMesh
is a Python package containing a parallel triangular mesh generator and mesh sizing function creator for two and three dimensional domains such as those encountered in seismology. C++ code is wrapped with Python for performance without losing ease-of-use. Mesh generation is performed in either serial or using distributed memory parallelism with an implementation of DistMesh
[@doi:10.1137/S0036144503429121; @peterka2014high]. DistMesh
is an uncomplicated algorithm that is known to produce high-quality cells, can be easily parallelized, and does not require explicit domain geometry information, which can be useful for people unfamiliar with mesh generation. Our implementation uses the Computational Geometry Algorithms Library [@cgal:hs-chdt3-20a] to perform many geometric operations quickly.
I'm thinking about how to revise the Statement of Need
to incorporate your other suggestions.
I tried to make it a bit more crisp (feel free to use or dismiss):
SeismicMesh is a Python package for simplex mesh generation in two or three dimensions. As an implementation of DistMesh [@doi:10.1137/S0036144503429121; @peterka2014high], it produces high-quality meshes at the expense of speed. For increased efficiency, the core package is written in C++, works in parallel, and uses the Computational Geometry Algorithms Library [@CGAL:hs-chdt3-20a]. SeismicMesh can also produce mesh-density functions from seismological data to be used in the mesh generator.
That's excellent, thank you Nico.
This paragraph is a little more challenging for me, but I think it's better below. I think the point you make is quite interesting about querying sizing functions.
Besides that it would be nice to perhaps highlight the implicit functions that I use make the geometry creation a lot easier than hand drawing an STL. I haven't yet determined where best to put that or if I will put that in.
Why don't you simply use Gmsh, right? Aha, you find that Gmsh is slow for your use case! Why? Because your density function is so complicated and it heavily benefits from vectorization. Gmsh's algorithm doesn't allow for vectorization, distmesh does. ==> For complicated density functions, distmesh is better.
The success of many finite element methods in geophysics hinges on the creation of a variable resolution and quality triangular mesh. Despite the fact that many mesh generation programs exist such as Gmsh and CGAL, it is rare to find capabilities that incorporate geophysical data directly into the mesh generation process to appropriately size elements. This in part contributes to the reality that automatic mesh generation for geophysical domains largely still remains an unsolved problem.
However recently some freely available packages have been created to script mesh generation from geophysical datasets such as in coastal ocean modeling [e.g., @roberts2019oceanmesh2d; GMT and Terreno @gorman2008systematic] and reservoir modeling [e.g., MeshIT @cacace2015meshit]. Following in a similar direction to those programs to ease the burden of mesh development for geophysical problems, the aim of this package is to provide a simple-to-use Python package to script mesh generation directly from geophysical datasets. This is accomplished first by building a mesh density function directly from seismic velocity models and then supplying these inputs to a mesh generator that can use these inputs while operating at scale.
Our mesh density functions can be used with other mesh generators however the usage of a particular sizing function can have significant implications on mesh generation performance. For example, Gmsh's advancing front and Delaunay refinement methods construct the mesh incrementally and do not permit vectorization which leads to significant slow downs at scale in 2D/3D mesh generation. In contrast, the DistMesh algorithm takes advantage of vectorization when querying a complex mesh density function making it more efficient and competitive to Gmsh and CGAL for this kind of meshing problem.
Okay, I did several iterations of the above and liked how it flowed. I also rewrote the performance section to take into consideration the improved 2D minimum cell qualities. It's now merged into main.
Do you have any more comments on this article @nschloe ? The latest paper is on the main branch.
@nschloe Can we close this issue?
I will check as soon as I have time.
thanks
Okay, closing.
Important:
Less important: