0

对于有限元模拟,我需要更高阶的网格。为了提高效率,我想使用偶然元素,即没有内部节点的元素。gmshsetOrder()功能很容易找到,它生成拉格朗日元素。

如何设置另一种元素类型,或以某种方式删除内部节点?在下面的二维正方形示例中,生成的二阶四边形每个都有 9 个节点,我希望每个元素只有 8 个节点。

有趣的是,gmsh似乎知道这些元素类型,因为它们分别在文件格式elm-type=10和的文档中有所提及elm-type=16

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()
4

1 回答 1

0

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) 
...
于 2021-04-09T18:11:16.297 回答