使用面向对象语法将python包装到gmsh文件

py2gmsh的Python项目详细描述


py2gmsh公司

python包装器创建具有面向对象语法的gmsh文件。

包装器与.geo文件的实际gmsh语法最为接近,使用 增加了方便的工具、面向对象的语法以便于操作和 额外功能。

安装

当pip出现在python安装中时,只需:

pip install py2gmsh

用法

创建一个简单的地理文件

下面的示例演示如何使用语法创建简单的几何图形 接近.geo文件中使用的

frompy2gmshimport(Mesh,Entity,Field)# create Mesh class instancemy_mesh=Mesh()# create pointsp1=Entity.Point([0.,0.,0.])# add point to meshmy_mesh.addEntity(p1)#create more pointsp2=Entity.Point([1.,0.,0.])my_mesh.addEntity(p2)p3=Entity.Point([1.,1.,0.])my_mesh.addEntity(p3)# entities can also directly be added to a mesh:p4=Entity.Point([0.,1.,0.],mesh=my_mesh)# create curvesl1=Entity.Curve([p1,p2])l2=Entity.Curve([p2,p3])l3=Entity.Curve([p3,p4])l4=Entity.Curve([p4,p1])# entities can also be added in a batchmy_mesh.addEntities([l1,l2,l3,l4])# create curveloopll1=Entity.CurveLoop([l1,l2,l3,l4],mesh=my_mesh)# create surfaces1=Entity.PlaneSurface([ll1],mesh=my_mesh)# create fieldsf1=Field.MathEval(mesh=my_mesh)grading=1.1he=0.005f1.F='(abs(y-0.5)*({grading}-1)+{he})/{grading}'.format(grading=grading,he=he)# create minimum fieldfmin=Field.Min(mesh=my_mesh)fmin.FieldsList=[f1]# could add more fields in the list if necessary# set the background field as minimum fieldmy_mesh.setBackgroundField(fmin)# set max element sizemy_mesh.Options.Mesh.CharacteristicLengthMax=0.1# adding Coherence optionmy_mesh.Coherence=True# write the geofilemy_mesh.writeGeo('my_mesh.geo')

.geo文件my_mesh.geo可以在gmsh图形用户界面中直接打开,以便进行可视化和网格划分或者,运行gmsh以创建.msh文件会为my_mesh.msh提供以下结果:

>> gmsh my_mesh.geo -2 -o my_mesh.msh

(!)对于使用nodeslist、verticeslist、edgeslist、faceslist的字段, regionslist或fieldslist,列表必须是实体实例的列表,而不是 实体编号的,例如f2.NodesList = [p1, p2, p3]。使用IField的字段, fieldx,fieldy,fieldz还必须指向一个字段实例,而不是它的编号, 例如f2.IField = f1

使用物理组

物理组用于用组号和名称标记某些实体 (可选)

# creating physical groups and associating them with a mesh instanceg1=Entity.PhysicalGroup(nb=1,name='group1')g2=Entity.PhysicalGroup(nb=2,name='group2')my_mesh.addEntites([g1,g2])# adding existing entities to different physical groupsg1.addEntity(p1)g1.addEntity(p2)g1.addEntity(l1)g1.addEntity(l2)g2.addEntities([p3,p4,l3,l4])# write the geofile after changesmesh.writeGeo('my_mesh.geo')

修改常规网格选项

所有GMSH选项(常规、几何、网格)都可以使用与直接在地理文件中写入相同的语法编写。 可用选项的完整列表位于py2gmsh/options.py中

# mesh optionsmy_mesh.options.Mesh.Algorithm=...my_mesh.options.Mesh.Format=...# general optionsmy_mesh.options.General.Color=...my_mesh.options.Geometry.OffsetX=...# geometry optionsmy_mesh.options.Geometry.Tolerance=...# write the geofile after changesmesh.writeGeo('my_mesh.geo')

从网格实例访问实体

实体可以通过其索引从网格实例检索

my_mesh.points[4]# <-- returns Point instance number 4my_mesh.getPointsFromIndex(4)# <-- same as abovemy_mesh.getPointsFromIndex([1,2,3,4])# <-- returns list of Point instances# other functionsmy_mesh.getCurvesFromIndex(...)my_mesh.getSurfacesFromIndex(...)my_mesh.getSurfaceLoopsFromIndex(...)my_mesh.getVolumesFromIndex(...)my_mesh.getFieldsFromIndex(...)my_mesh.getGroupsFromIndex(...)

这可用于创建其他实体,例如:

ll1=Entity.CurveLoop(my_mesh.getCurvesFromIndex([1,2,3,4]))my_mesh.addEntity(ll1)

将几何体对象转换为网格实例

某些对象可以直接转换为py2gmsh.Mesh.Mesh实例例如,这已用于使用https://github.com/erdc/proteus域的语法转换几何图形。

frompy2gmshimportgeometry2gmshmy_mesh=geometry2mesh(my_geometry)

几何变量my_geometry必须是包含以下属性的对象(例如类):

entityshapeopttype
vertices(np, 3)noarray of point coordinates
vertexFlags(np)yesarray of point physical group numbers
segments(ns, 2)yesarray of curves
segmentFlags(ns)yesarray of segment physical group numbers
facets(nf, nsf, npf)yesarray of surfaces (loop of point numbers)
facetFlags(nf)yesarray of facets physical groups
volumes(nv, nsv, nfv)yesarray of volumes (list of facets)
regionFlags(nv)yesarray of volume physical group numbers
boundaryTagsdictyesdictionary of physical groups {'name': number}
holes_ind(nh)yeslist of holes index (facets in 2D / volumes in 3D)

np:点数; ns:段数; nf:面数; nsf:子面数; npf:每面点数; nv:卷数; nsv:子卷数; NFV:每个卷的面数; nh:孔数

opt:可选。可选参数可以为空(例如空列表),但必须存在于几何体对象中

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我可以使用Hibernate连接不同的数据库并从表中导入数据吗?没有预定义的对象类   java为什么getBoundsInLocal获取错误的坐标?   java在处理并发哈希映射时必须使用锁   java将过滤的JTable数据导出到文本文件   从命令行编译java不使用库   Java使用方法和构造函数绘制图形   java理解优先级队列中的排序方法   尝试解密文件时,java CipherInputStream为空   在Java中将字符串解析为长字符串   java我想在raspberry pi重新启动时在crontabe中执行arecord命令   弹性搜索弹性搜索Lucene公式的Java计算   java使用apachepoi和docx4j读取doc文件   swing显示JavaGUI是否需要特殊处理?   java使用字符串进行数学运算   java在SpringMVC中用JSP初始化菜单项选择表单数据的最佳方法   无多线程的java多客户端程序   swing如何在Java中对BuffereImage进行去饱和?   java在安卓中创建自定义地图