gmsh, как создавать элементы интуитивной прозорливости

Для моделирования методом конечных элементов мне нужны сетки более высокого порядка. Для эффективности я хочу использовать элементы интуитивной прозорливости, то есть элементы без внутренних узлов. В Функция gmsh найти несложно, она порождает лагранжевы элементы.

Как я могу установить другой тип элемента или как-то удалить внутренние узлы? В следующем примере квадрата в 2D сгенерированные четырехугольники второго порядка имеют 9 узлов каждый, я бы хотел иметь только 8 узлов на элемент.

Интересно, что gmsh, похоже, знает эти типы элементов, поскольку они упоминаются в документации формата файла. а также , соответственно.

      import numpy
import gmsh

gmsh.initialize()
gmsh.model.add("mini")

dim1=1
dim2=2

gmsh.model.geo.addPoint(0, 0, 0, 0.5, 1)
gmsh.model.geo.addPoint(1, 0, 0, 0.5, 2)
gmsh.model.geo.addPoint(1, 1, 0, 0.5, 3)
gmsh.model.geo.addPoint(0, 1, 0, 0.5, 4)

gmsh.model.geo.addLine(1, 2, 1)
gmsh.model.geo.addLine(2, 3, 2)
gmsh.model.geo.addLine(3, 4, 3)
gmsh.model.geo.addLine(4, 1, 4)

gmsh.model.geo.addCurveLoop([1, 2, 3, 4], 1)
gmsh.model.geo.addPlaneSurface([1], 1)
Square = gmsh.model.addPhysicalGroup(dim2, [1])
gmsh.model.setPhysicalName(dim2, Square, "Unit_Square")

gmsh.model.geo.mesh.setRecombine(dim2, 1)
gmsh.model.geo.synchronize()
gmsh.model.mesh.generate(dim2)
gmsh.model.mesh.setOrder(2)   # generates Laplacian elements, but I want Serendipity

gmsh.write("mesh_order2.msh")
gmsh.finalize()

1 ответ

Christophe Geuzaine ответил на мой вопрос, ключевое слово - "неполные элементы" https://gitlab.onelab.info/gmsh/gmsh/-/issues/1272, что для моего примера означает

      ...
gmsh.model.mesh.generate(dim2)
gmsh.option.setNumber('Mesh.SecondOrderIncomplete', 1)  # <-- that's it!
gmsh.model.mesh.setOrder(2) 
...
Другие вопросы по тегам