trixi-framework / trixi-framework/Trixi.jl

GMSH curved meshes support

Open
#1,847 8 comments 0 reactions 0 assignees View on GitHub
enhancement possible student project
Dominant language
Julia
Stars
731
Forks
167
Avg merge
2d 18h
Merged PRs (30d)
25

Description

Thanks to Daniel and everyone involved for bringing the wonderful GMSH mesh support to Trixi in https://github.com/trixi-framework/Trixi.jl/pull/1799!!

I am unable to get the current parser to handle a GMSH generated mesh with curved boundaries. Here is how I generate a curved mesh with GMSH (I only know how to do it with GUI at this moment). I tried this with `NACA6412.geo` available [here](https://trixi-framework.github.io/Trixi.jl/stable/tutorials/p4est_from_gmsh/) and another one [here](https://github.com/cpraveen/taxis/blob/master/examples/cylinder_turek/cylinder.geo)

1) Open the .geo file in GMSH
2) Click Modules -> Mesh -> 2D (Generates the straight sided mesh)
3) Click Modules -> Mesh -> Set order 2 (curves the mesh boundary to be order 2. Higher is also possible)
4) File -> Export -> mesh_NACA6412.inp, making sure to tick "Save all elements" and "Save groups of nodes" (Exporting with these options ticked is the step I cannot do via command line)

If I skip step 3, the parser can handle it fine and I am able to run the available elixir https://github.com/trixi-framework/Trixi.jl/blob/main/examples/p4est_2d_dgsem/elixir_euler_NACA6412airfoil_mach2.jl. However, if I try to run same the elixir when I did the above step 3 to curve the mesh, I get a segmentation fault in the line that reads the mesh, i.e., `mesh = P4estMesh{2}(mesh_file, polydeg = polydeg, boundary_symbols = boundary_symbols)`

It starts with
```shell
[p4est] No elements or nodes found in mesh file.
[p4est] Failed to read /home2/arpit/repositories/cloned/Trixi.jl/examples/p4est_2d_dgsem/NACA6412_curved.inp: pass 1
```

Full error message


P4est segmentation fault

```shell
[p4est] No elements or nodes found in mesh file.
[p4est] Failed to read /home2/arpit/repositories/cloned/Trixi.jl/examples/p4est_2d_dgsem/NACA6412_curved.inp: pass 1

[595759] signal (11.1): Segmentation fault
in expression starting at /home2/arpit/repositories/cloned/Trixi.jl/examples/p4est_2d_dgsem/elixir_euler_NACA6412airfoil_mach2.jl:78
unsafe_load at ./pointer.jl:119 [inlined]
unsafe_load at /home2/arpit/.julia/packages/P4est/0rTeV/src/pointerwrappers.jl:86 [inlined]
getindex at /home2/arpit/.julia/packages/P4est/0rTeV/src/pointerwrappers.jl:82 [inlined]
getindex at /home2/arpit/.julia/packages/P4est/0rTeV/src/pointerwrappers.jl:82 [inlined]
p4est_mesh_from_standard_abaqus at /home2/arpit/repositories/cloned/Trixi.jl/src/meshes/p4est_mesh.jl:460
#_#279 at /home2/arpit/repositories/cloned/Trixi.jl/src/meshes/p4est_mesh.jl:376
P4estMesh at /home2/arpit/repositories/cloned/Trixi.jl/src/meshes/p4est_mesh.jl:353
unknown function (ip: 0x7f420e7c66a0)
_jl_invoke at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:2894 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:3076
jl_apply at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
do_call at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/interpreter.c:126
eval_value at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/interpreter.c:223
eval_stmt_value at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/interpreter.c:174 [inlined]
eval_body at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/interpreter.c:617
jl_interpret_toplevel_thunk at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/interpreter.c:775
jl_toplevel_eval_flex at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/toplevel.c:934
jl_toplevel_eval_flex at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/toplevel.c:877
ijl_toplevel_eval_in at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/toplevel.c:985
eval at ./boot.jl:385 [inlined]
include_string at ./loading.jl:2070
_jl_invoke at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:2894 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:3076
_include at ./loading.jl:2130
include at ./client.jl:489
unknown function (ip: 0x7f420e7b5b55)
_jl_invoke at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:2894 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:3076
jl_apply at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
do_call at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/interpreter.c:126
eval_value at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/interpreter.c:223
eval_stmt_value at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/interpreter.c:174 [inlined]
eval_body at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/interpreter.c:617
jl_interpret_toplevel_thunk at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/interpreter.c:775
jl_toplevel_eval_flex at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/toplevel.c:934
jl_toplevel_eval_flex at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/toplevel.c:877
jl_toplevel_eval_flex at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/toplevel.c:877
jl_toplevel_eval_flex at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/toplevel.c:877
ijl_toplevel_eval_in at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/toplevel.c:985
eval at ./boot.jl:385 [inlined]
eval_user_input at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:150
repl_backend_loop at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:246
#start_repl_backend#46 at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:231
start_repl_backend at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:228
_jl_invoke at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:2894 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:3076
#run_repl#59 at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:389
run_repl at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:375
jfptr_run_repl_91689.1 at /home2/arpit/.local/julia-1.10.0/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:2894 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:3076
#1013 at ./client.jl:432
jfptr_YY.1013_82677.1 at /home2/arpit/.local/julia-1.10.0/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:2894 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:3076
jl_apply at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
jl_f__call_latest at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/builtins.c:812
#invokelatest#2 at ./essentials.jl:887 [inlined]
invokelatest at ./essentials.jl:884 [inlined]
run_main_repl at ./client.jl:416
exec_options at ./client.jl:333
_start at ./client.jl:552
jfptr__start_82703.1 at /home2/arpit/.local/julia-1.10.0/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:2894 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/gf.c:3076
jl_apply at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
true_main at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/jlapi.c:582
jl_repl_entrypoint at /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/src/jlapi.c:731
main at julia (unknown line)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x4010b8)
Allocations: 25176877 (Pool: 25169453; Big: 7424); GC: 90
Segmentation fault
```

Note that the `.geo` file does have enough information to curve the mesh, see images in spoilers below. Here is `gmsh` showing a straight sided mesh

Straight sided GMSH mesh

![image](https://github.com/trixi-framework/Trixi.jl/assets/7436733/bde7fec6-79ea-4e6a-ae40-a26fa186f891)

The curved airfoil already indicates that it is possible to curve the mesh. And, by setting a high order with `Set order 3`, I get

GMSH mesh of order 3

![image](https://github.com/trixi-framework/Trixi.jl/assets/7436733/3a71ae0f-bf7d-4d13-a414-666c5e985167)

`HOHQ` generated meshes also give curved boundaries already.

Here is a gist with `.inp` file generated with curved boundaries - https://[gist.githubusercontent.com/Arpit-Babbar/d9238c194b3e87574fdcbbd39fa59180/raw/6c985a65b58e5eda38630b6a8d3e54652293650a/NACA6412_curved.inp](https://gist.githubusercontent.com/Arpit-Babbar/d9238c194b3e87574fdcbbd39fa59180/raw/6c985a65b58e5eda38630b6a8d3e54652293650a/NACA6412_curved.inp)

Here is a gist with `.inp` file generated with straight sided boundaries - https://[gist.githubusercontent.com/Arpit-Babbar/f4271dc9c57724bf62681c725aa16cd6/raw/e83e50d4f67ee1853f189d6b7269e8fb1cde5ab0/NACA6412.inp](https://gist.githubusercontent.com/Arpit-Babbar/f4271dc9c57724bf62681c725aa16cd6/raw/e83e50d4f67ee1853f189d6b7269e8fb1cde5ab0/NACA6412.inp)

Contributor guide

Open the contributing guide

Research direction

Start with src/meshes/p4est_mesh.jl, especially p4est_mesh_from_standard_abaqus around line 460 and the P4estMesh constructor used by examples/p4est_2d_dgsem/elixir_euler_NACA6412airfoil_mach2.jl. Run that elixir with the curved NACA6412.inp gist and compare it with the straight-sided input. Done means curved GMSH meshes load without the reported missing-elements error or segmentation fault.

Written by the indexing model from the issue text.

Assessment

Tech stack
julia
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.