Just extended the gmsh import function to support gmsh element types 14 and 19 according to gmsh documentation. Posting this testing script for future reference:
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")