SimplexGridFactory
Contains convenience interfaces to triangle (via Triangulate.jl) and TetGen via TetGen.jl. Code using it needs to pass the Triangulate or the TetGen modules as parameters to the constructor of SimplexGridBuilder and thus needs to adhere to their respective license conditions. This package itself is MIT licensed.
API Documentation
Mesh generator interface
ExtendableGrids.simplexgrid
— Methodsimplexgrid(::Type{SimplexGridFactory.TriangulateType}, Triangulate::Any, input::Any; kwargs...) -> ExtendableGrid{_A,_B} where _B where _A
Create Grid from Triangle input data.
See default_options
for available kwargs
.
SimplexGridFactory.triangulateio
— Methodtriangulateio(Triangulate::Any; points, bfaces, bfaceregions, regionpoints, regionnumbers, regionvolumes) -> Any
Create a TriangulateIO structure from a number of input arrays. The 2D input arrays are transposed if necessary and converted to the proper data types for Triangulate.
This conversion is not performed if the data types are those indicated in the defaults and the leading dimension of 2D arrays corresponds to the space dimension.
SimplexGridFactory.triangulateio
— Methodtriangulateio(this::SimplexGridBuilder) -> Any
Create triangle input from the current state of the builder.
ExtendableGrids.simplexgrid
— Methodsimplexgrid(::Type{SimplexGridFactory.TetGenType}, TetGen::Any, input::Any; kwargs...) -> ExtendableGrid{_A,_B} where _B where _A
Create Grid from TetGen data.
See default_options
for available kwargs
.
SimplexGridFactory.tetgenio
— Methodtetgenio(TetGen::Any; points, bfaces, bfaceregions, regionpoints, regionnumbers, regionvolumes) -> Any
Create a RawTetGenIO structure from a number of input arrays. The 2D input arrays are transposed if necessary and converted to the proper data types for TetGen.
This conversion is not performed if the data types are those indicated in the defaults and the leading dimension of 2D arrays corresponds to the space dimension.
SimplexGridFactory.tetgenio
— Methodtetgenio(this::SimplexGridBuilder) -> Any
Create tetgen input from the current state of the builder.
SimplexGridFactory.default_options
— Methoddefault_options()
Create dictionary of mesh generation options with default values. These at once describe the keyword arguments available to the methods of the package and are listed in the following table:
keyword | default | 2D | 3D | Explanation |
---|---|---|---|---|
PLC | true | -p | -p | Triangulate/tetraheralize PLSG/PLC |
refine | false | -r | -r | Refines a previously generated mesh. |
quality | true | -q | -q | Quality mesh generation |
minangle | 20 | Minimum angle for quality | ||
volumecontrol | true | -a | -a | Maximum area constraint |
maxvolume | Inf | Value of area/volume constraint if less than Inf | ||
attributes | true | -A | -A | Regional attribute to each simplex. |
confdelaunay | true | -D | Ensure that all circumcenter lie within the domain. | |
nosteiner | false | -Y | -Y | Prohibits insertion of Steiner points on the mesh boundary |
quiet | true | -Q | -Q | Suppress all output unless an error occurs. |
verbose | false | -V | -V | Give detailed information. |
debugfacets | true | -d | Detects self-intersections of facets of the PLC. | |
check | false | -C | -C | Checks the consistency of the final mesh. |
optlevel | 1 | -O | Specifies the level of mesh optimization. | |
unsuitable | nothing | Unsuitable function | ||
addflags | "" | Additional flags | ||
flags | nothing | Set flags, overwrite all other options |
For mesh generation, these are turned into mesh generator control flags. This process can be completely ovewritten by specifying the flags parameter.
For the flags parameter in 2D see the short resp. long documentation of the Triangle control flags.
For the 3D case, see the corresponding TetGen flags
The unsuitable
parameter should be a function, see triunsuitable
.
ExtendableGrids.simplexgrid
— Methodfunction simplexgrid(Generator;
points=Array{Cdouble,2}(undef,0,0),
bfaces=Array{Cint,2}(undef,0,0),
bfaceregions=Array{Cint,1}(undef,0),
regionpoints=Array{Cdouble,2}(undef,0,0),
regionnumbers=Array{Cint,1}(undef,0),
regionvolumes=Array{Cdouble,1}(undef,0);
kwargs...
)
Create Grid from a number of input arrays. The 2D input arrays are transposed if necessary and converted to the proper data types for Triangulate or TetGen
This conversion is not performed if the data types are those indicated in the defaults and the leading dimension of 2D arrays corresponds to the space dimension.
See default_options
for available kwargs
.
SimplexGridBuilder
SimplexGridFactory.SimplexGridBuilder
— Typemutable struct SimplexGridBuilder
Simplex grid builder: wrapper around array based mesh generator interface. It allows to build up the input data incrementally.
Up to now the implementation complexity is far from optimal.
SimplexGridFactory.SimplexGridBuilder
— MethodSimplexGridBuilder(; Generator, tol, checkexisting)
Create a SimplexGridBuilder.
ExtendableGrids.simplexgrid
— Methodsimplexgrid(this::SimplexGridBuilder; kwargs...) -> ExtendableGrid{_A,_B} where _B where _A
Build simplex grid from the current state of the builder. See default_options
for available kwargs
.
SimplexGridFactory.cellregion!
— Methodcellregion!(this::SimplexGridBuilder, i::Any) -> Any
Set the current cell region (acts on subsequent regionpoint() calls)
SimplexGridFactory.checkexisting!
— Methodcheckexisting!(builder, b)
Whether to check for already existing points
SimplexGridFactory.facet!
— Methodfacet!(this::SimplexGridBuilder, i1::Any, i2::Any, i3::Any, i4::Any) -> Int64
Add a facet via the corresponding point indices.
SimplexGridFactory.facet!
— Methodfacet!(this::SimplexGridBuilder, i1::Any, i2::Any, i3::Any) -> Int64
Add a facet via the corresponding point indices.
SimplexGridFactory.facet!
— Methodfacet!(this::SimplexGridBuilder, i1::Any, i2::Any) -> Int64
Add a facet via the corresponding point indices.
SimplexGridFactory.facet!
— Methodfacet!(this::SimplexGridBuilder, p::Union{Tuple, Array{T,1} where T}) -> Int64
Add a facet via the corresponding point indices.
SimplexGridFactory.facet!
— Methodfacet!(this::SimplexGridBuilder) -> Int64
Add a facet via the corresponding point indices.
SimplexGridFactory.facetregion!
— Methodfacetregion!(this::SimplexGridBuilder, i::Any) -> Any
Set the current cell region (acts on subsequent regionpoint() calls)
SimplexGridFactory.holepoint!
— Methodholepoint!(this::SimplexGridBuilder, x::Any, y::Any, z::Any)
Add a point marking a hole region
SimplexGridFactory.holepoint!
— Methodholepoint!(this::SimplexGridBuilder, x::Any, y::Any)
Add a point marking a hole region
SimplexGridFactory.holepoint!
— Methodholepoint!(this::SimplexGridBuilder, x::Any)
Add a point marking a hole region
SimplexGridFactory.holepoint!
— Methodholepoint!(this::SimplexGridBuilder, p::Union{Tuple, Array{T,1} where T})
Add a point marking a hole region
SimplexGridFactory.maxvolume!
— Methodmaxvolume!(this::SimplexGridBuilder, vol::Any) -> Any
Set the current cell volume (acts on subsequent regionpoint() calls)
SimplexGridFactory.options!
— Methodoptions!(this; kwargs...)
Set some mesh generation options, see default_options
SimplexGridFactory.point!
— Methodpoint!(this::SimplexGridBuilder, x::Any, y::Any, z::Any) -> Any
Add point or merge with already existing point. Return its index.
SimplexGridFactory.point!
— Methodpoint!(this, x, y)
Add point or merge with already existing point. Return its index.
SimplexGridFactory.point!
— Methodpoint!(this, x)
Add point or merge with already existing point. Return its index.
SimplexGridFactory.point!
— Methodpoint!(this::SimplexGridBuilder, p::Union{Tuple, AbstractArray{T,1} where T}) -> Any
Add point or merge with already existing point. Return its index.
SimplexGridFactory.regionpoint!
— Methodregionpoint!(this::SimplexGridBuilder, x::Any, y::Any, z::Any) -> Array{Int32,1}
Add a region point marking a region, using current cell volume an cell region
SimplexGridFactory.regionpoint!
— Methodregionpoint!(this::SimplexGridBuilder, x::Any, y::Any) -> Array{Int32,1}
Add a region point marking a region, using current cell volume an cell region
SimplexGridFactory.regionpoint!
— Methodregionpoint!(this::SimplexGridBuilder, x::Any) -> Any
SimplexGridFactory.regionpoint!
— Methodregionpoint!(this::SimplexGridBuilder, p::Union{Tuple, Array{T,1} where T}) -> Any
Add a region point marking a region, using current cell volume an cell region
SimplexGridFactory.builderplot
— Methodbuilderplot(gb::SimplexGridBuilder; Plotter, kwargs...)
Two panel visualization of gridfactory with input and resulting grid See default_options
for available kwargs
.
BinnedPointList
SimplexGridFactory.BinnedPointList
— Typemutable struct BinnedPointList{T}
Binned point list structure allowing for fast check for already existing points.
This provides better performance for indendifying already inserted points than the naive linear search.
OTOH the implementation is still quite naive - it dynamically maintains a cuboid bining region with a fixed number of bins.
Probably tree based adaptive methods (a la octree) will be more efficient, however they will be harder to implement.
In an ideal world, we would maintain a dynamic Delaunay triangulation, which at once could be the starting point of mesh generation which will follow here anyway.
SimplexGridFactory.BinnedPointList
— MethodBinnedPointList(dim; kwargs...)
Create and initialize binned point list
SimplexGridFactory.BinnedPointList
— MethodBinnedPointList(, dim; tol, number_of_directional_bins, binning_region_increase_factor, num_allowed_unbinned_points, max_unbinned_ratio)
BinnedPointList(dim; kwargs...)
Create and initialize binned point list
Base.insert!
— Methodinsert!(bpl, p)
If another point with distance less the tol from p is in pointlist, return its index. Otherwise, insert point into pointlist.
SimplexGridFactory.points
— Methodpoints(bpl)
Return the array of points in the point list.