【发布时间】:2021-04-16 22:12:46
【问题描述】:
对于有限元模拟,我需要更高阶的网格。
为了提高效率,我想使用意外元素,即没有内部节点的元素。
gmsh 的setOrder() 函数很容易找到,它生成拉格朗日元素。
如何设置其他元素类型,或以某种方式移除内部节点? 在下面的二维正方形示例中,生成的二阶四边形每个有 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()
【问题讨论】: