gmsh issueshttps://gitlab.onelab.info/gmsh/gmsh/-/issues2024-02-08T09:32:45Zhttps://gitlab.onelab.info/gmsh/gmsh/-/issues/2799can't using OCC in Gmsh2024-02-08T09:32:45ZWENBO ZHANGcan't using OCC in Gmshwhen i compile gmsh source with cmake, why there are no variable “OCC_INC”. there are any information about OCC module,
![屏幕截图_2024-02-07_115914](/uploads/82732948c758b7981b2cfa8649d8005d/屏幕截图_2024-02-07_115914.png)when i compile gmsh source with cmake, why there are no variable “OCC_INC”. there are any information about OCC module,
![屏幕截图_2024-02-07_115914](/uploads/82732948c758b7981b2cfa8649d8005d/屏幕截图_2024-02-07_115914.png)https://gitlab.onelab.info/gmsh/gmsh/-/issues/2798Peculiar behaviour when using HXT with 2 threads2024-02-08T18:40:01ZFadime BekmambetovaPeculiar behaviour when using HXT with 2 threadsWe have encountered a very strange issue that when we use HXT with 2 threads to generate a 3D mesh, the timing of subsequent 2D mesh generation is affected. We thought we should let you know in case this is a symptom of resources not bei...We have encountered a very strange issue that when we use HXT with 2 threads to generate a 3D mesh, the timing of subsequent 2D mesh generation is affected. We thought we should let you know in case this is a symptom of resources not being fully deallocated by the 3D mesh generation or some settings being modified. In our case, the issue appears with python 3.8.18 on Windows and seems to be dependent on the numpy library (e.g. it appears if numpy is not installed).
Please find attached the code that produces the peculiar result along with the .ps1 script that creates a clean environment in a way that causes the issue to appear.
[check_strange_behaviour_at_2_threads.py](/uploads/43401064b04ffca6bf0b3ec9e215ea92/check_strange_behaviour_at_2_threads.py)
[run_script.ps1](/uploads/82fc30e0df902936a7ab3b08158ff889/run_script.ps1)
The output we see is this:
```
2D mesh generation took 1.245 s
2D mesh generation took 5.981 s
2D mesh generation took 5.912 s
```
After the first 2D mesh generation there is a call to gmsh.model.mesh.generate(3), which seems to affect the behaviour of gmsh.model.mesh.generate(2) called afterwards.https://gitlab.onelab.info/gmsh/gmsh/-/issues/2797Extracting 2D Mesh from 3D mesh diff format.2024-02-07T08:51:35ZAHMED OUHAMMOUExtracting 2D Mesh from 3D mesh diff format.Hi,
I've generated a 3D mesh of my geometry and saved it in .diff (3D) format. Now, I'm looking to extract the 2D mesh of the surfaces based on this diff(3D) mesh. Is it possible with Gmsh?
Thanks in advance.Hi,
I've generated a 3D mesh of my geometry and saved it in .diff (3D) format. Now, I'm looking to extract the 2D mesh of the surfaces based on this diff(3D) mesh. Is it possible with Gmsh?
Thanks in advance.https://gitlab.onelab.info/gmsh/gmsh/-/issues/2796Periodic curves and translation/rotation2024-02-06T14:48:01ZJared FrazierPeriodic curves and translation/rotationI am trying to create a puzzle-piece like mesh for which the right curves are periodic copies of the left curves, and the top curves are periodic copies of the bottom curves. Getting the line-curves to be periodic is a straightforward ca...I am trying to create a puzzle-piece like mesh for which the right curves are periodic copies of the left curves, and the top curves are periodic copies of the bottom curves. Getting the line-curves to be periodic is a straightforward call to `Translate`; however, I am having difficulty with the ellipses curves resulting from the boolean difference of the rectangle and disk planes. In my attempt, I have tried getting the top ellipse to be a periodic copy of the bottom ellipse by doing an affine transformation that translates the ellipse 1 unit in the y-direction and rotates it 180 degrees, but I get this error: `Info: Error in transformation from curve 1 (1-2) to 8 (8-9) (minimal transformed node distances 0.5 1.5, tolerance 1.41421e-08)`. And I also don't know how to get the desired periodicity for the left and right ellipses curves since the left side is made up of two ellipses but the right is only a single ellipse.
```geo
//+
SetFactory("OpenCASCADE");
Rectangle(1) = {0, 0, 0, 1, 1, 0};
//+
Disk(2) = {1, 0.5, 0, 0.25, 0.25};
//+
Disk(3) = {-0, 0.5, 0, 0.25, 0.25};
//+
Disk(4) = {0.5, 1, 0, 0.25, 0.25};
//+
Disk(5) = {0.5, -0, 0, 0.25, 0.25};
//+
BooleanDifference{ Surface{1}; Delete; }{ Surface{3}; Surface{4}; Surface{2}; Surface{5}; Delete; }
// Right-side lines are periodic copy of left-side lines
Periodic Curve {10} = {6} Translate {1, 0, 0};
Periodic Curve {12} = {3} Translate {1, 0, 0};
// ----------------------------------------------------
// NEED HELP IN THE SECTIONS FOLLOWING THIS COMMENT!!!!!
// -----------------------------------------------------
// Top-ellipse is periodic copy of bottom-ellipse
// Affine transformation is translate 1 unit in y dir and rotate 180 deg
Periodic Curve {8} = {1} Affine { -1, 0, 0, 0,
0, 1, 0, 1,
0, 0, -1, 0,
0, 0, 0, 1};
// The left ellipse is made up of two different curves but the right
// ellipse is made up of only curve... how to impose periodicity??
// TODO
```
Visually, here is what I am having trouble with:
![image](/uploads/fb0a36ac60f3f55b24b00218717b7c63/image.png)https://gitlab.onelab.info/gmsh/gmsh/-/issues/2795Rotatable labels feature could be considered2024-02-07T12:08:21ZResat SABIQRotatable labels feature could be consideredPlease tell me if i'm wrong, but i've concluded that it's impossible to rotate labels even if they contain some 3D characteristics (like
`{0.5, 1.5, -0.5}`
in x3 tutorial).
This could be considered for an enhancement (also).Please tell me if i'm wrong, but i've concluded that it's impossible to rotate labels even if they contain some 3D characteristics (like
`{0.5, 1.5, -0.5}`
in x3 tutorial).
This could be considered for an enhancement (also).https://gitlab.onelab.info/gmsh/gmsh/-/issues/2794Support for rotating images (currently addable via gmsh::view::addListDataStr...2024-02-07T12:09:44ZResat SABIQSupport for rotating images (currently addable via gmsh::view::addListDataString(...)) could (or should) be enhancedPlease tell me if i'm wrong, but i've concluded the following:
1) it's almost impossible to rotate an image (currently addable via gmsh::view::addListDataString(...)) to match a plane resulting from a rotation;
2) when the rotation (e.g....Please tell me if i'm wrong, but i've concluded the following:
1) it's almost impossible to rotate an image (currently addable via gmsh::view::addListDataString(...)) to match a plane resulting from a rotation;
2) when the rotation (e.g. of everything) is done programmatically, the images are not rotated even if they contain some 3D characteristics; e.g.:
`file://../share/doc/gmsh/tutorials/t4_image.png@0.01x0,0,0,1,0,1,0`
This could be considered for an enhancement.https://gitlab.onelab.info/gmsh/gmsh/-/issues/2793gmsh::model::mesh::getElementByCoordinates() crashes when failing to find point2024-02-03T12:22:54ZLucas Bantinggmsh::model::mesh::getElementByCoordinates() crashes when failing to find pointI have a program where I need to safely be able to search for points that may be outside of a mesh.
I was using gmsh::model::mesh::getElementByCoordinates() to search for second order tetrahedron elements using the julia gmsh api, but g...I have a program where I need to safely be able to search for points that may be outside of a mesh.
I was using gmsh::model::mesh::getElementByCoordinates() to search for second order tetrahedron elements using the julia gmsh api, but gmsh crashes if points are outside the mesh.
It appears the crash behaviour might be different when using first order elements instead of second order elements.https://gitlab.onelab.info/gmsh/gmsh/-/issues/2792Volume not found when creating physical group2024-02-09T02:23:54ZSam LeaderVolume not found when creating physical groupHello,
I'm new to gmsh and I'm building a model of a lunar lander. I started by using the .geo scripting language, but I since switched to using the Python API. I'm having trouble when I'm assigning physical groups at the end of my pro...Hello,
I'm new to gmsh and I'm building a model of a lunar lander. I started by using the .geo scripting language, but I since switched to using the Python API. I'm having trouble when I'm assigning physical groups at the end of my program, I go to get the surfaces of a volume but I get an error saying the volume doesn't exist (Error : Volume 12 does not exist). But, the volume does exist in the model.
I think it has something to do with calling .synchronize() in line 183, but I'm not sure. Also, I'm sure the way I'm programming isn't following best practices, so any feedback there would be appreciated :-)
Thanks in advance,
[lander.py](/uploads/b95e78d756ba2f26189511d5a084395e/lander.py)https://gitlab.onelab.info/gmsh/gmsh/-/issues/2791t4.cpp radius != R1 used in tangent (angle) calculations: addition of calcula...2024-02-01T18:34:59ZResat SABIQt4.cpp radius != R1 used in tangent (angle) calculations: addition of calculation comments likely to be usefulHi,
The radius suggested by the code is as follows[1]:
`R1=0.01`
The radius observed on the UI is different (as follows): 0.0117076
It gets slightly better if +-`R1 * ssin` is used for x coordinates for points 14 & 16: 0.0116577
But it...Hi,
The radius suggested by the code is as follows[1]:
`R1=0.01`
The radius observed on the UI is different (as follows): 0.0117076
It gets slightly better if +-`R1 * ssin` is used for x coordinates for points 14 & 16: 0.0116577
But it's still `!= R1`.
Especially for those who try to follow the calucations, addition of calculation comments is likely to be useful.[2]
P.S.
[1] https://gitlab.onelab.info/gmsh/gmsh/-/blob/master/tutorials/c++/t4.cpp?ref_type=heads
[2] At present, on might try to verify the calculations (given that this seems not to be overly complicated at first glance) & not understand them, or conclude that they are approximative, etc.
[3] In the worst case, something like the following would already be clearer:
`double R1 = 1 * cm /* approximate radius */ // ...`https://gitlab.onelab.info/gmsh/gmsh/-/issues/2790Combining twisting and boolean operators2024-01-31T10:37:31ZSantiago GomezCombining twisting and boolean operatorsHi! I am interested in creating a geometry which combines boolean operations with twisting. Specifically, I want to create a geometry with a "twisted hole", which I would do by taking a boolean difference. However, I noticed that the twi...Hi! I am interested in creating a geometry which combines boolean operations with twisting. Specifically, I want to create a geometry with a "twisted hole", which I would do by taking a boolean difference. However, I noticed that the twist is only possible with the built in kernel, whereas the boolean operators are only available with occ. Is there anyway to combine these two kernels, or get one of the functions running with the other kernel?
Thanks in advance!https://gitlab.onelab.info/gmsh/gmsh/-/issues/2789Non-repeatable meshes for Delaunay or HXT when number of threads is set highe...2024-02-05T22:24:22ZFadime BekmambetovaNon-repeatable meshes for Delaunay or HXT when number of threads is set higher then 1I believe this issue is related to https://gitlab.onelab.info/gmsh/gmsh/-/issues/2255
According to one of the responses on the original issue, the HXT algorithm is supposed to be repeatable if the number of threads is fixed. However, thi...I believe this issue is related to https://gitlab.onelab.info/gmsh/gmsh/-/issues/2255
According to one of the responses on the original issue, the HXT algorithm is supposed to be repeatable if the number of threads is fixed. However, this is not the case in the current version of gmsh or in the development snapshot. I also found that Delaunay algorithm also does not produce repeatable results. The only repeatable results are produced when number of meshes is 1.
Please see the details below obtained by running the attached Python script, which checks repeatability for different versions of gmsh:[check_repeatability.py](/uploads/f254b63fbbcb92f0ce2d504f37c1dd7c/check_repeatability.py)
**Gmsh version: 4.11.1**
Algorithm 1. Number of threads = 1. Repeatable? -> True
Algorithm 1. Number of threads = 2. Repeatable? -> False
Algorithm 1. Number of threads = 4. Repeatable? -> False
Algorithm 1. Number of threads = 8. Repeatable? -> False
Algorithm 10. Number of threads = 1. Repeatable? -> False
Algorithm 10. Number of threads = 2. Repeatable? -> False
Algorithm 10. Number of threads = 4. Repeatable? -> False
Algorithm 10. Number of threads = 8. Repeatable? -> False
**Gmsh version: 4.12.0**
Algorithm 1. Number of threads = 1. Repeatable? -> True
Algorithm 1. Number of threads = 2. Repeatable? -> False
Algorithm 1. Number of threads = 4. Repeatable? -> False
Algorithm 1. Number of threads = 8. Repeatable? -> False
Algorithm 10. Number of threads = 1. Repeatable? -> True
Algorithm 10. Number of threads = 2. Repeatable? -> False
Algorithm 10. Number of threads = 4. Repeatable? -> False
Algorithm 10. Number of threads = 8. Repeatable? -> False
**Gmsh version: 4.12.2**
Algorithm 1. Number of threads = 1. Repeatable? -> True
Algorithm 1. Number of threads = 2. Repeatable? -> False
Algorithm 1. Number of threads = 4. Repeatable? -> False
Algorithm 1. Number of threads = 8. Repeatable? -> False
Algorithm 10. Number of threads = 1. Repeatable? -> True
Algorithm 10. Number of threads = 2. Repeatable? -> False
Algorithm 10. Number of threads = 4. Repeatable? -> False
Algorithm 10. Number of threads = 8. Repeatable? -> False
**Gmsh version: 4.13.0**
Algorithm 1. Number of threads = 1. Repeatable? -> True
Algorithm 1. Number of threads = 2. Repeatable? -> False
Algorithm 1. Number of threads = 4. Repeatable? -> False
Algorithm 1. Number of threads = 8. Repeatable? -> False
Algorithm 10. Number of threads = 1. Repeatable? -> True
Algorithm 10. Number of threads = 2. Repeatable? -> False
Algorithm 10. Number of threads = 4. Repeatable? -> False
Algorithm 10. Number of threads = 8. Repeatable? -> False
The versions were switched via `pip install gmsh==version` or `pip install -i https://gmsh.info/python-packages-dev --force-reinstall --no-cache-dir gmsh`
Many thanks!https://gitlab.onelab.info/gmsh/gmsh/-/issues/2788how to obtain 1D entity information pre-meshing (post gmsh.model.occ.removeAl...2024-02-04T12:32:32ZEddie Wilkinsonhow to obtain 1D entity information pre-meshing (post gmsh.model.occ.removeAllDuplicates())Hi,
I have come across an issue using Gmsh. I use the function gmsh.model.occ.removeAllDuplicates() to get rid of duplicate entities using Boolean Fragments. This creates all new entities with new tags. I wish to then get information ab...Hi,
I have come across an issue using Gmsh. I use the function gmsh.model.occ.removeAllDuplicates() to get rid of duplicate entities using Boolean Fragments. This creates all new entities with new tags. I wish to then get information about these new 1D entities such as: what their lengths are, what 0D entities lie on them or form their ends, what the distance is between their end points, what 2D entities they form the boundaries of etc...
I can find no functions in the documentation that allow a user to get this information. However Gmsh must be storing it. Currently my only way of working out which 1D entity is which is to plot the mesh using the Gmsh GUI where it can be visualised and some of the above info can be viewed (see image).
![Screenshot_2024-01-24_153023](/uploads/56ac4cbec24131e2ac7cd328ff99a91f/Screenshot_2024-01-24_153023.png)
But how do I access this information without having to go into the Gmsh GUI? (I need to know which 1D element is which prior to meshing so that I can set transfinite meshing constraints)
Thank you very much for your time!https://gitlab.onelab.info/gmsh/gmsh/-/issues/2787Automatic boundary detection2024-02-02T16:57:38ZDeshik PutluruAutomatic boundary detectionHi, I wonder if GMSH has any tools for automatically detecting the boundaries/surfaces of mesh. Like for instance, I have a complex biological geometry, all i can generate is a 3D mesh in GMSH. But when importing to CFD software, I would...Hi, I wonder if GMSH has any tools for automatically detecting the boundaries/surfaces of mesh. Like for instance, I have a complex biological geometry, all i can generate is a 3D mesh in GMSH. But when importing to CFD software, I would like boundaries to be tagged such that I can apply my boundary conditions.
[In AutoCAD] I found one algorithm as such, the algorithm iterates all facets, and measures its angle made with its neighbour facets. If the angle is less than threshold, it marks with certain ID. This way they create face groups which are boundaries. I know, this is fully dependent on the way we tune the parameters (eg. threshold angle, number of groups), but it helps a lot. This is only for STL files, i would like to see if there is any for 3D meshes in GMSH.
Thanks.https://gitlab.onelab.info/gmsh/gmsh/-/issues/2786Wrong specification for periodic section in MSH2 format documentation2024-01-29T18:08:40ZThomas ToulorgeWrong specification for periodic section in MSH2 format documentationThe specification of the periodic section for the MSH2 file format in the documentation is not consistent with what Gmsh actually writes: the `<Affine value ...>` line should come after the `dimension entity-tag master-entity-tag` line.The specification of the periodic section for the MSH2 file format in the documentation is not consistent with what Gmsh actually writes: the `<Affine value ...>` line should come after the `dimension entity-tag master-entity-tag` line.Thomas ToulorgeThomas Toulorgehttps://gitlab.onelab.info/gmsh/gmsh/-/issues/2785Add a layer of hexahedrons to a 2D quad mesh2024-02-04T13:36:46ZReza HousseiniAdd a layer of hexahedrons to a 2D quad meshI have the following example to add a layer of hexahedrons to a structured mesh of quadrangles. Everything looks fine, but my physical group does not include the mesh:
```
import gmsh
import numpy as np
import sys
gmsh.initialize(sys.a...I have the following example to add a layer of hexahedrons to a structured mesh of quadrangles. Everything looks fine, but my physical group does not include the mesh:
```
import gmsh
import numpy as np
import sys
gmsh.initialize(sys.argv)
# Choose kernel
option = gmsh.option
model = gmsh.model
occ = model.occ
mesh = model.mesh
def split_list_by(l, N):
return [l[i : i + N] for i in range(0, len(l), N)]
def _get_nodes(dim, tag):
node_tags, coord, _ = mesh.getNodes(dim, tag, True, False)
return dict(zip(node_tags, split_list_by(coord, 3)))
def _get_elements(dim, tag):
element_types, element_tags, node_tags = mesh.getElements(dim, tag)
return {
t: zip(et, split_list_by(nt, element_type_map[t]["nodes"]))
for t, et, nt in zip(element_types, element_tags, node_tags)
}
def get_entitiy_data(dim=-1):
return {
e: {
"boundary": model.getBoundary([e]),
"nodes": _get_nodes(e[0], e[1]),
"elements": _get_elements(e[0], e[1]),
"type": model.getType(e[0], e[1]),
}
for e in model.getEntities(dim)
}
element_type_map = {
15: {"higher": 1, "nodes": 1, "dim": 0, "name": "point"},
1: {"higher": 3, "nodes": 2, "dim": 1, "name": "line"},
3: {"higher": 5, "nodes": 4, "dim": 2, "name": "quadrangle"},
5: {"higher": None, "nodes": 8, "dim": 3, "name": "hexahedron"},
}
def extrude_hexahedron(dx, dy, dz):
m = get_entitiy_data()
faces = model.getEntities(2)
occ.extrude(faces, dx, dy, dz)
occ.synchronize()
offset_node = 1e6
offset_element = 1e6
# cycle all entities sorted by dimension
for entity, v in sorted(m.items()):
up, down = model.getAdjacencies(*entity)
# add new higher dimensional entity
entity_dim = entity[0] + 1
entity_tag = up[0]
# cycle all elements in this entity
for element_type, tags in v["elements"].items():
if element_type == 3:
for element_tag, node_tags in tags:
element_coords = [v["nodes"][t] for t in node_tags]
shifted_element_coords = [
[n[0] + dx, n[1] + dy, n[2] + dz] for n in element_coords
]
new_coords = element_coords + shifted_element_coords
new_node_tags = np.concatenate(
(node_tags, [n + offset_node for n in node_tags])
)
mesh.addNodes(
entity_dim,
entity_tag,
new_node_tags,
[ce for c in new_coords for ce in c],
)
mesh.addElements(
entity_dim,
entity_tag,
[element_type_map[element_type]["higher"]], # higher order type
[[element_tag + offset_element]],
[new_node_tags],
)
occ.addRectangle(0, 0, 0, 1, 1)
occ.synchronize()
mesh.setTransfiniteAutomatic()
mesh.generate(2)
extrude_hexahedron(0, 0, 0.1)
model.addPhysicalGroup(2, [2], name="test")
gmsh.fltk.run()
gmsh.finalize()
```
What am I doing wrong?https://gitlab.onelab.info/gmsh/gmsh/-/issues/2784Partitioning, ghost elements and physical groups2024-01-26T09:33:38ZJames D. TrotterPartitioning, ghost elements and physical groupsHi Christophe,
I'm interested in partitioning a mesh for a problem involving multiple subdomains. At the moment, I am using physical groups to distinguish between the different subdomains, and I have partitioned the mesh using the METIS...Hi Christophe,
I'm interested in partitioning a mesh for a problem involving multiple subdomains. At the moment, I am using physical groups to distinguish between the different subdomains, and I have partitioned the mesh using the METIS-based partitioning built into Gmsh.
My question concerns the ghost elements as they are stored in the MSH4.1 ASCII format whenever the `-part_ghosts` and `-part_split` options are specified. If I understand correctly, any ghost element is added to a new entity block in the `$Elements` section, and this entity block is assigned an entity tag corresponding to a ghost entity. Furthermore, unlike the ordinary partitioned entities, ghost entities are listed separately at the beginning of the `$PartitionedEntities` section and they do not contain any information about physical tags.
In my case, I want to extract ghost elements belonging to a particular physical group. So, I'm wondering if this is a use case you have considered? Do you think it would require changes to the MSH4.1 format? Or can it already be done?https://gitlab.onelab.info/gmsh/gmsh/-/issues/2783Combination of transfinite meshes and full-quad recombination2024-01-26T15:38:32ZFelix RodachCombination of transfinite meshes and full-quad recombinationI got a simple test case with two concentric rings [mesh_test.geo](/uploads/289d0a7ec77799177fa2802d90b2cb08/mesh_test.geo). The inner ring should contain a transfinite mesh (e.g. to resolve a boundary layer) and the outer ring a full-qu...I got a simple test case with two concentric rings [mesh_test.geo](/uploads/289d0a7ec77799177fa2802d90b2cb08/mesh_test.geo). The inner ring should contain a transfinite mesh (e.g. to resolve a boundary layer) and the outer ring a full-quad mesh. Since the progression in the transfinite mesh is subdivided if I activate subdivision, I tried to use the full-quad blossom recombination in this setup. However, I get the following error:
```
Info : Meshing 2D...
Info : Meshing surface 1 (Transfinite)
Info : Meshing surface 2 (Transfinite)
Info : Meshing surface 3 (Plane, Delaunay)
Warning : Full-quad recombination only compatible with transfinite meshes if those are performed first
Error : 1D mesh cannot be divided by 2
Warning : Full-quad recombination only compatible with transfinite meshes if those are performed first
Error : 1D mesh cannot be divided by 2
Warning : Full-quad recombination only compatible with transfinite meshes if those are performed first
Error : 1D mesh cannot be divided by 2
Warning : Full-quad recombination only compatible with transfinite meshes if those are performed first
Error : 1D mesh cannot be divided by 2
Error : The 1D mesh seems not to be forming a closed loop (8 boundary nodes are considered once)
```
Since I am new to gmsh I might need some explaination on the error. Is it generally not possible to combine transfinite with full-quad recombination or did I do something wrong in the setup? FYI: This type of mesh should be generated around an airfoil with a tool using the `gmsh python api` later on.https://gitlab.onelab.info/gmsh/gmsh/-/issues/2781classifySurfaces algorithm2024-02-04T13:37:28ZKorosh GodarziclassifySurfaces algorithmIn the paper "Optimal parametrizations for surface remeshing" https://gmsh.info/doc/preprints/gmsh_stl3_preprint.pdf
different strategies for reparametrization are discussed. I wonder by which algorithm classifySurfaces work and how am ...In the paper "Optimal parametrizations for surface remeshing" https://gmsh.info/doc/preprints/gmsh_stl3_preprint.pdf
different strategies for reparametrization are discussed. I wonder by which algorithm classifySurfaces work and how am I able to use different strategies.
Thanks in advancehttps://gitlab.onelab.info/gmsh/gmsh/-/issues/27802D quasi-structured mesh for triangles2024-01-23T10:49:04ZMichael Ermakovermakov@ipmnet.ru2D quasi-structured mesh for trianglesA new 2D mesh generation function for a triangle [file.cpp](/uploads/f4523ff8aa35e0ae9273405f10efd1ac/file.cpp) .The triangle is splitted into 3 parts and for each part a TFI is employed. A number of mesh point along each curves is requi...A new 2D mesh generation function for a triangle [file.cpp](/uploads/f4523ff8aa35e0ae9273405f10efd1ac/file.cpp) .The triangle is splitted into 3 parts and for each part a TFI is employed. A number of mesh point along each curves is required to be the same and odd. I debuged it in the MeshGFaceTransfinite.cpp.
5 test geo files and figures are attached to demonstrate functionality.
[1.geo](/uploads/ecb75fc3fc8ea5ed04965756f6d2b545/1.geo)
[2.geo](/uploads/80a2f24afabc146f39c790998ddd3c9c/2.geo)
[3.geo](/uploads/f5a0d4e603a48a31bff146d91d6f0099/3.geo)
[4.geo](/uploads/efab67187ecbdbdf3e2778337d07f4c3/4.geo)
[5.geo](/uploads/da00e5d41e388da59daf5cfaceaf4346/5.geo)
![fig1](/uploads/7dba9b371aea01bc939c465a172382ad/fig1.png)
![fig2](/uploads/0c80eaa6537008354c111a39989e701c/fig2.png)
![fig3](/uploads/6154a15610972948f94fcd47eeb6921f/fig3.png)
![fig4](/uploads/b0cbbbb18e7b01af92b1e99221cb6c19/fig4.png)
![fig5](/uploads/14b4884f8cf927ff78035feb59ea70fe/fig5.png)https://gitlab.onelab.info/gmsh/gmsh/-/issues/2778recursively get an entity's constituent entities dimTags2024-02-04T13:37:48ZJared Frazierrecursively get an entity's constituent entities dimTagsIs there a way to get the points associated with a curve of a particular tag; the points and curves of a surface of a particular tag; and/or the points, curves, and surfaces of volume of a particular tag? As far as I can tell, the `getEn...Is there a way to get the points associated with a curve of a particular tag; the points and curves of a surface of a particular tag; and/or the points, curves, and surfaces of volume of a particular tag? As far as I can tell, the `getEntities` function can at best return all `dimTags` of a particular dimension. I use a Julia API example below with comments on what I would like:
```julia
gmsh.initialize()
gmsh.model.add("dummy")
coords = (0, 0, 0)
dx = dy = 1
SURFACE_DIM = 2
rectangle_tag = gmsh.model.occ.addRectangle(coords..., dx, dy)
# Get the dimTags of points and curves of this rectangle tag
# (this function doesn't exist)
constituent_dim_tags = gmsh.model.getEntities(
; dim = SURFACE_DIM, tag = rectangle_tag)
# ((0, 1), (0, 2), (0, 3), (0,4), (1, 1), (1, 2), (1, 3), (1, 4))
display(constituent_dim_tags)
gmsh.finalize()
```