【问题标题】:gmsh, how to generate serendipity elementsgmsh,如何生成意外元素
【发布时间】:2021-04-16 22:12:46
【问题描述】:

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

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

有趣的是,gmsh 似乎知道这些元素类型,因为它们分别在文件格式 elm-type=10elm-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()

【问题讨论】:

    标签: python mesh gmsh


    【解决方案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) 
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-01
      • 2019-01-24
      • 2014-06-08
      • 1970-01-01
      • 2019-08-19
      • 2012-08-30
      • 2013-05-01
      • 1970-01-01
      相关资源
      最近更新 更多