Curvilinear Grid

We present Curvilinear Grid, a parallel curvilinear grid manager designed for modelling 3D PDE on large curvilinear unstructured grids. Curvilinear Grid is based on Dune library, and, besides the Dune pre-requisites, also uses ParMetis library.
Curvilinear Grid is and will remain open-source. CurvilinearGrid is owned, developed and maintained by LSPR AG, namely, its original developers. Curvilinear Grid adopts the DUNE project license. Commercial use must consider pre-requisite libraries (e.g. ParMetis). Curvilinear Grid is an ongoing project. We warmly welcome contributions for the community.
The revolution is not an apple that falls when ripe. You have to make it fall.- Ernesto Che Guevara
News
12.12.2016 - First version of Curvilinear Grid documentation submitted to Arxiv
29.09.2015 - First stable version of Curvilinear Grid is presented at Dune user meeting
Current Features
Below presented is a brief list of most important features of Curvilinear Grid and Curvilinear Geometry. Curvilinear Geometry- Numeric Lagrange Interpolation of simplex geometries dimension 1 to 3 orders 1 to 5
- Analytic Lagrange Interpolation of simplex geometries of arbitrary order
- Analytic polynomials of arbitrary dimension and order. Includes arithmetic, partial derivatives, exact integrals over reference element, caching
- Local-to-global mapping for simplex elements via Lagrange Polynomials
- Global-to-local mapping via Newton method
- Analytic differential quantities: jacobians, integration elements, surface normals
- Recursive integration for non-polynomial integrands. Based on quadrature rules provided by dune-geometry
- Recursive integration of vector and matrix quantities for efficiency
- Geometry caching
- Reads .msh meshes produced by GMSH
- Reads curvilinear meshes order 1-5
- Scalable reading of large parallel meshes with no memory bottleneck
- Automatic mesh partitioning via ParMetis
- Provides GridFactory with all vertices, elements and boundary segments.
- Provides GlobalIndex for vertices, elements and boundary segments, reused from .msh file
- Provides Tag for all elements and boundary segments. The tag is used by GMSH to distinguish between elements and faces of different type (e.g. material properties, subdomains, interior surfaces)
- Writes Grids or individual elements in parallel to VTK, VTU and PVTU files. Such files can be visualised by, e.g. ParaView or VisIt
- Can write entities of any codimension separately
- For each entity additional scalar data is provided for better visualisation: partition type, containing process rank and tag
- Flexible virtual refinement for visualisation of curvature
- Arbitrary number of user-defined vector fields can be added to the same grid
- Mesh explosion option to better visualise individual elements
- Self-contained parallel grid manager
- Entities provide curvature order and physical tag
- GlobalIndex for entities of all codimensions
- Ghost elements
- Grid diagnostics: VTK, element self-intersection test, statistics on element quality (in future, also mesh balance)
- LoggingMessage for runtime text output with flexible parallel output and compile-time controllable verbosity
- LoggingTimer for parallel timing of parts of code. Sums up multiple uses of same code. Reports parallel statistics
- Communication via DataHandle for all codimensions and all protocols prescribed by DataHandle interface
- Wrapper for MPI-3 Neighbor All-to-all communication methods
Nearest Future
We are currently working on the following features, which should see light within the coming months- Utility for calculating singular integrals - useful, for examile, in Surface Integral Methods
- Improvement of curvilinear geometry interpolation for p-convergence
Documentation
The documentation as of 12.12.2016 is available on Arxiv. The documentation source code is located in the /doc/manual/ folder of the Curvilinear Grid Module. We regularly update this documentation. This section will contain the most recent PDF version of the documentation when the Arxiv one is no longer representative. We are aware that the documentation is currently incomplete, so we recommend the user to read the source code or contact us in case of further questions. The comments given directly in the source code will provide additional support.Examples
Curvilinear VTK Writer naturally outputs grid entities of different structural type. Below images demonstrate total mesh, as well as interior elements, domain boundaries, processor boundaries and ghost elements in the corresponding order. Note that ParaView does not naturally support output of curvilinear entities, so a virtual refinement is used to visualise smooth surfaces. Hence the elements appear to consist of linear triangles, while the are actually smooth








- Herzian dipole, radiating into free space
- Mie scattering of plane waves by a gold nanosphere in vacuum
Download
Currently the Curvilinear Grid is available in the trunk version. Note that the Curvilinear Grid requires Curvilinear Geometry. Please usegit clone https://github.com/LSPR-AG/dune-curvilineargeometry.git
git clone https://github.com/LSPR-AG/dune-curvilineargrid.git
to clone both modules into the folder already containing the core dune modules. Click here for detailed installation instructions.
Contribute
Since Curvilinear Grid is open-source, we are open to contributions from the community. We are also interested in supervising Masters Thesis and summer projects for students interested in numerical methods and their application to modeling. Please contact us for more details.Contact us
Curvilinear Grid is developed by LSPR AG
Grubenstrasse 9,
CH-8045 Zürich,
Switzerland
Email: curvilineargrid at lspr dot ch
Phone: +41 43 366 90 74
Follow @curvgrid
The original authors of Curvilinear Grid are
Aleksejs Fomins (aleksejs dot fomins at lspr dot ch)
Benedikt Oswald (benedikt dot oswald at lspr dot ch)
Do not hesitate to contact us with enquiries, suggestions, proposals, bug reports, etc
Last Update: 12 Dec 2016