# Import of second order pyramids from gmsh

**URL:** <https://getfem.discourse.group/t/import-of-second-order-pyramids-from-gmsh/64>\
**Category:** Development\
**Created:** [March 5, 2025, 12:38pm UTC](https://getfem.discourse.group/t/import-of-second-order-pyramids-from-gmsh/64 "2025-03-05T12:38:21Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Konstantinos.Poulios](https://avatars.discourse-cdn.com/v4/letter/k/ac91a4/32.png) [@Konstantinos.Poulios](https://getfem.discourse.group/u/Konstantinos.Poulios)\
**Post date:** [March 5, 2025, 12:38pm UTC](https://getfem.discourse.group/t/import-of-second-order-pyramids-from-gmsh/64/1 "2025-03-05T12:38:21Z")

</div>

Just extended the gmsh import function to support [gmsh element types 14 and 19](https://shipengcheng1230.github.io/GmshTools.jl/stable/element_types/) according to [gmsh documentation](https://gmsh.info/doc/texinfo/gmsh.html#Node-ordering). Posting this testing script for future reference:

```python
import gmsh
gmsh.initialize()
gmsh.model.add("single_pyramid")
vol = gmsh.model.addDiscreteEntity(3)
incomplete = False
if incomplete:
  # Define the nodes for pyramid13
  # 5
  # ,/|\
  # ,/ .'|\
  # ,/ | | \
  # ,/ .' | `.
  # ,8 | 13 \
  # ,/ .' w | \
  # ,/ 10 ^ | 12
  # 1--------7-.'--|-4 `.
  # `\ | | `\ \
  # `6 .' +--- 11 - \ -> v
  # `\ | `\ `\ \
  # `\.' `\ `\`
  # 2-------9--------3
  # `\
  # u
  gmsh.model.mesh.addNodes(3, vol, [1,2,3,4,5],
                                   [0, 0, 0,
                                    1, 0, 0,
                                    1, 1, 0,
                                    0, 1, 0,
                                    0.5, 0.5, 1])
  gmsh.model.mesh.addNodes(3, vol, [6,7,8,9,10,11,12,13],
                                   [0.5, 0., 0.,
                                    0., 0.5, 0.,
                                    0.25, 0.25, 0.5,
                                    1., 0.5, 0.,
                                    0.75, 0.25, 0.5,
                                    0.5, 1., 0.,
                                    0.75, 0.75, 0.5,
                                    0.25, 0.75, 0.5])
  gmsh.model.mesh.addElementsByType\
    (vol, 19, [1], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])
else:
  # Define the nodes for pyramid14
  # 5
  # ,/|\
  # ,/ .'|\
  # ,/ | | \
  # ,/ .' | `.
  # ,8 | 13 \
  # ,/ .' | \
  # ,/ 10 | 12
  #1--------7-.'----4 `.
  # `\ | `\ \
  # `6 .' 14 11 \
  # `\ | `\ \
  # `\.' `\`
  # 2--------9-------3
  # `\
  # u
  gmsh.model.mesh.addNodes(3, vol, [1,2,3,4,5],
                                   [0, 0, 2,
                                    1, 0, 2,
                                    1, 1, 2,
                                    0, 1, 2,
                                    0.5, 0.5, 3])
  gmsh.model.mesh.addNodes(3, vol, [6,7,8,9,10,11,12,13,14],
                                   [0.5, 0., 2.,
                                    0., 0.5, 2.,
                                    0.25, 0.25, 2.5,
                                    1., 0.5, 2.,
                                    0.75, 0.25, 2.5,
                                    0.5, 1., 2.,
                                    0.75, 0.75, 2.5,
                                    0.25, 0.75, 2.5,
                                    0.5, 0.5, 2.])
  gmsh.model.mesh.addElementsByType\
    (vol, 14, [1], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
gmsh.model.geo.synchronize()
gmsh.model.mesh.generate(3)
gmsh.option.setNumber("Mesh.MshFileVersion", 2.2)
gmsh.write("single_pyramid.msh")
gmsh.fltk.run()
gmsh.finalize()

import getfem as gf
m = gf.Mesh("import", "gmsh", "single_pyramid.msh")
m.export_to_vtu("single_pyramid.vtu")

```
