gmsh,如何生成偶然元素

问题描述

对于有限元模拟,我需要更高阶的网格。 为了效率起见,我想使用偶然性元素,即没有内部节点的元素。 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.5,1)
gmsh.model.geo.addPoint(1,2)
gmsh.model.geo.addPoint(1,1,3)
gmsh.model.geo.addPoint(0,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,4)

gmsh.model.geo.addCurveLoop([1,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()

解决方法

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) 
...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...