Gmsh教程

13、在没有底层CAD模型的情况下重新擦除STL文件

import gmsh  # 导入Gmsh库,用于几何建模和网格划分  
import math  # 导入数学库,用于计算  
import os    # 导入操作系统库,用于处理文件路径  
import sys   # 导入系统库,用于处理命令行参数  gmsh.initialize()  # 初始化Gmsh环境  def createGeometryAndMesh():  # 清除之前的模型和数据  gmsh.clear()  # 获取当前脚本的目录,并合并上级目录中的't13_data.stl'文件路径  path = os.path.dirname(os.path.abspath(__file__))  gmsh.merge(os.path.join(path, os.pardir, 't13_data.stl'))  # 从Gmsh的ONELAB接口获取用户输入的角度参数  angle = gmsh.onelab.getNumber('Parameters/Angle for surface detection')[0]  # 获取是否创建可参数化曲面的用户输入  forceParametrizablePatches = gmsh.onelab.getNumber(  'Parameters/Create surfaces guaranteed to be parametrizable')[0]  # 设置包含边界和曲线角度的参数  includeBoundary = True  curveAngle = 180  # 对模型表面进行分类,准备创建几何体  gmsh.model.mesh.classifySurfaces(angle * math.pi / 180., includeBoundary,  forceParametrizablePatches,  curveAngle * math.pi / 180.)  # 创建几何体  gmsh.model.mesh.createGeometry()  # 获取所有曲面,并创建一个曲面环和体积  s = gmsh.model.getEntities(2)  l = gmsh.model.geo.addSurfaceLoop([e[1] for e in s])  gmsh.model.geo.addVolume([l])  # 同步几何模型  gmsh.model.geo.synchronize()  # 添加一个网格大小字段,根据用户选择应用不同的网格大小函数  f = gmsh.model.mesh.field.add("MathEval")  if gmsh.onelab.getNumber('Parameters/Apply funny mesh size field?')[0]:  gmsh.model.mesh.field.setString(f, "F", "2*Sin((x+y)/5) + 3")  else:  gmsh.model.mesh.field.setString(f, "F", "4")  gmsh.model.mesh.field.setAsBackgroundMesh(f)  # 生成三维网格  gmsh.model.mesh.generate(3)  # 将网格写入文件  gmsh.write('t13.msh')  # 设置用户可调的参数  
gmsh.onelab.set("""[  # 角度参数,用于表面检测  {  "type":"number",  "name":"Parameters/Angle for surface detection",  "values":[40],  "min":20,  "max":120,  "step":1  },  # 是否创建可参数化曲面的选项  {  "type":"number",  "name":"Parameters/Create surfaces guaranteed to be parametrizable",  "values":[0],  "choices":[0, 1]  },  # 是否应用有趣的网格大小字段的选项  {  "type":"number",  "name":"Parameters/Apply funny mesh size field?",  "values":[0],  "choices":[0, 1]  }  
]""")  # 调用函数创建几何模型和网格  
createGeometryAndMesh()  def checkForEvent():  # 检查是否有用户操作事件,如果有则重新创建几何模型和网格,并刷新图形界面  action = gmsh.onelab.getString("ONELAB/Action")  if len(action) and action[0] == "check":  gmsh.onelab.setString("ONELAB/Action", [""])  createGeometryAndMesh()  gmsh.graphics.draw()  return True  # 如果命令行参数中没有'-nopopup',则初始化图形界面,并循环检查用户事件  
if "-nopopup" not in sys.argv:  gmsh.fltk.initialize()  while gmsh.fltk.isAvailable() and checkForEvent():  gmsh.fltk.wait()  # 清理并结束Gmsh环境  
gmsh.finalize()

14、同源和共同源计算

import gmsh  # 导入gmsh库  
import sys  # 导入sys库,用于访问与Python解释器紧密相关的变量和函数  gmsh.initialize(sys.argv)  # 初始化gmsh,并传递命令行参数  gmsh.model.add("t14")  # 添加一个新的模型,并命名为"t14"  # 定义网格大小和几何高度  
m = 0.5  # 网格大小  
h = 2  # 几何体在z方向的高度  # 添加模型的点,并指定它们的坐标和网格大小  
gmsh.model.geo.addPoint(0, 0, 0, m, 1)  
# ...(此处省略了其他点的添加,类似上面的格式)  # 添加模型的线,连接之前定义的点  
gmsh.model.geo.addLine(1, 9, 1)  
# ...(此处省略了其他线的添加,类似上面的格式)  # 添加曲线环和平面表面  
gmsh.model.geo.addCurveLoop([...], 13)  
gmsh.model.geo.addCurveLoop([...], 14)  
gmsh.model.geo.addPlaneSurface([13, 14], 15)  # 对平面进行拉伸操作,创建一个三维体  
e = gmsh.model.geo.extrude([(2, 15)], 0, 0, h)  gmsh.model.geo.synchronize()  # 同步几何模型  # 添加物理组,用于后续的有限元分析  
domain_tag = e[1][1]  # 获取域的标签  
domain_physical_tag = 1001  # 定义域的物理标签  
gmsh.model.addPhysicalGroup(3, [domain_tag], domain_physical_tag, "Whole domain")  # ...(此处省略了其他物理组的添加,类似上面的格式)  # 添加同调请求,用于后续的网格划分和同调分析  
gmsh.model.mesh.addHomologyRequest("Homology", [...], [...], [...])  
# ...(此处省略了其他同调请求的添加,类似上面的格式)  # 生成网格  
gmsh.model.mesh.generate(3)  # 将模型写入文件  
gmsh.write("t14.msh")  # 如果命令行参数中没有'-nopopup',则运行Gmsh的FLTK图形界面  
if '-nopopup' not in sys.argv:  gmsh.fltk.run()  # 清理Gmsh资源  
gmsh.finalize()

15、嵌入式点、线和面

import gmsh  # 导入gmsh库  
import sys  # 导入sys库,用于访问与Python解释器紧密相关的变量和函数  gmsh.initialize()  # 初始化gmsh  lc = 1e-2  # 定义网格特征长度  
# 添加四个点,并指定它们的坐标和特征长度  
gmsh.model.geo.addPoint(0, 0, 0, lc, 1)  
gmsh.model.geo.addPoint(.1, 0, 0, lc, 2)  
gmsh.model.geo.addPoint(.1, .3, 0, lc, 3)  
gmsh.model.geo.addPoint(0, .3, 0, lc, 4)  
# 添加四条线,连接之前定义的点  
gmsh.model.geo.addLine(1, 2, 1)  
gmsh.model.geo.addLine(3, 2, 2)  
gmsh.model.geo.addLine(3, 4, 3)  
gmsh.model.geo.addLine(4, 1, 4)  
# 添加一个曲线环,用于定义表面  
gmsh.model.geo.addCurveLoop([4, 1, -2, 3], 1)  
# 添加一个平面表面  
gmsh.model.geo.addPlaneSurface([1], 1)  lc = lc * 4  # 更新网格特征长度  
# 设置特定线的网格大小  
gmsh.model.geo.mesh.setSize([(0, 1), (0, 2), (0, 3), (0, 4)], lc)  # 添加一个新的点  
gmsh.model.geo.addPoint(0.02, 0.02, 0., lc, 5)  gmsh.model.geo.synchronize()  # 同步几何模型  # 将点5嵌入到表面网格中  
gmsh.model.mesh.embed(0, [5], 2, 1)  # 添加更多的点和线  
gmsh.model.geo.addPoint(0.02, 0.12, 0., lc, 6)  
gmsh.model.geo.addPoint(0.04, 0.18, 0., lc, 7)  
gmsh.model.geo.addLine(6, 7, 5)  gmsh.model.geo.synchronize()  # 同步几何模型  
# 将线5嵌入到网格中  
gmsh.model.mesh.embed(1, [5], 2, 1)  # 对之前的平面进行拉伸操作,创建一个三维体  
gmsh.model.geo.extrude([(2, 1)], 0, 0, 0.1)  # 添加一个新的点,并获取其ID  
p = gmsh.model.geo.addPoint(0.07, 0.15, 0.025, lc)  gmsh.model.geo.synchronize()  # 同步几何模型  
# 将点p嵌入到网格中  
gmsh.model.mesh.embed(0, [p], 3, 1)  # 添加更多的点和线  
gmsh.model.geo.addPoint(0.025, 0.15, 0.025, lc, p + 1)  
l = gmsh.model.geo.addLine(7, p + 1)  gmsh.model.geo.synchronize()  # 同步几何模型  
# 将线l嵌入到网格中  
gmsh.model.mesh.embed(1, [l], 3, 1)  # 添加更多的点,用于定义一个新的平面  
gmsh.model.geo.addPoint(0.02, 0.12, 0.05, lc, p + 2)  
gmsh.model.geo.addPoint(0.04, 0.12, 0.05, lc, p + 3)  
gmsh.model.geo.addPoint(0.04, 0.18, 0.05, lc, p + 4)  
gmsh.model.geo.addPoint(0.02, 0.18, 0.05, lc, p + 5)  # 添加四条线,连接之前定义的点  
gmsh.model.geo.addLine(p + 2, p + 3, l + 1)  
gmsh.model.geo.addLine(p + 3, p + 4, l + 2)  
gmsh.model.geo.addLine(p + 4, p + 5, l + 3)  
gmsh.model.geo.addLine(p + 5, p + 2, l + 4)  # 添加一个曲线环  
ll = gmsh.model.geo.addCurveLoop([l + 1, l + 2, l + 3, l + 4])  
# 添加一个平面表面  
s = gmsh.model.geo.addPlaneSurface([ll])  gmsh.model.geo.synchronize()  # 同步几何模型  
# 将表面s嵌入到网格中  
gmsh.model.mesh.embed(2, [s], 3, 1)  # 生成网格  
gmsh.model.mesh.generate(3)  # 将模型写入文件  
gmsh.write("t15.msh")  # 如果命令行参数中没有'-nopopup',则运行Gmsh的FLTK图形界面  
if '-nopopup' not in sys.argv:  gmsh.fltk.run()  # 清理Gmsh资源  
gmsh.finalize()

16、构造性立体几何,OpenCASCADE几何内核

import gmsh  # 导入Gmsh库  
import math  # 导入数学库,虽然在这段代码中未使用  
import sys   # 导入系统库,用于处理命令行参数  gmsh.initialize()  # 初始化Gmsh环境  gmsh.model.add("t16")  # 创建一个名为"t16"的新模型  gmsh.logger.start()  # 启动日志记录  # 添加两个盒子,一个边长为1,一个边长为0.5  
gmsh.model.occ.addBox(0, 0, 0, 1, 1, 1, 1)  
gmsh.model.occ.addBox(0, 0, 0, 0.5, 0.5, 0.5, 2)  # 使用布尔操作"cut"从大盒子中减去小盒子  
gmsh.model.occ.cut([(3, 1)], [(3, 2)], 3)  # 在剩余的大盒子顶部添加5个小球  
x = 0  
y = 0.75  
z = 0  
r = 0.09  
holes = []  
for t in range(1, 6):  x += 0.166  z += 0.166  gmsh.model.occ.addSphere(x, y, z, r, 3 + t)  holes.append((3, 3 + t))  # 使用fragment操作从剩余的大盒子中减去所有小球  
ov, ovv = gmsh.model.occ.fragment([(3, 3)], holes)  # 打印fragment操作产生的体积和前后关系  
print("fragment produced volumes:")  
for e in ov:  print(e)  print("before/after fragment relations:")  
for e in zip([(3, 3)] + holes, ovv):  print("parent " + str(e[0]) + " -> child " + str(e[1]))  gmsh.model.occ.synchronize()  # 同步几何模型  # 为每个小球和剩余的体积添加物理组  
for i in range(1, 6):  gmsh.model.addPhysicalGroup(3, [3 + i], i)  gmsh.model.addPhysicalGroup(3, [ov[-1][1]], 10)  # 设置网格大小  
lcar1 = .1  
lcar2 = .0005  
lcar3 = .055  gmsh.model.mesh.setSize(gmsh.model.getEntities(0), lcar1)  # 设置整个模型的网格大小  gmsh.model.mesh.setSize(gmsh.model.getBoundary(holes, False, False, True),  lcar3)  # 设置小球边界的网格大小  eps = 1e-3  
ov = gmsh.model.getEntitiesInBoundingBox(0.5 - eps, 0.5 - eps, 0.5 - eps,  0.5 + eps, 0.5 + eps, 0.5 + eps, 0)  
gmsh.model.mesh.setSize(ov, lcar2)  # 设置特定区域的网格大小  gmsh.model.mesh.generate(3)  # 生成三维网格  gmsh.write("t16.msh")  # 将网格写入文件  log = gmsh.logger.get()  # 获取日志记录  
print("Logger has recorded " + str(len(log)) + " lines")  
gmsh.logger.stop()  # 停止日志记录  if '-nopopup' not in sys.argv:  gmsh.fltk.run()  # 如果命令行参数中没有'-nopopup',则运行图形界面  gmsh.finalize()  # 清理并结束Gmsh环境

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 7 安装MySQL 5.7.30

CentOS 7 安装MySQL卸载(离线安装) 安装配置MySQL之前先查询是否存在,如存在先卸载再安装 rpm -qa|grep -i mysql rpm -qa|grep -i mariadb rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64如下命令找到直接 rm -rf 删除(删除…

07. Hibernate 会话工厂(SessionFactory)

1. 前言 Hibernate 的核心价值观是:开发者们!做你们应该做的。脏的、累的、没技术含义的由本尊来做。 本节课和大家一起好好的聊聊 Hibernate 的核心组件之一:会话工厂(SessionFactory)。 通过本节课,你…

Redis数据结构--跳跃表 Skip List

跳跃表(Skip List)是一种高效的随机化数据结构,通过引入多层索引来实现快速的查找、插入和删除操作。它在Redis中被用来实现有序集合(Sorted Set),在处理大量数据时表现出了优越的性能和灵活性。本文将详细…

MySQL增量备份

增备1 做增量备份前,是需要进行一次完成备份的 1、做数据修改 创建一个add1.t1 t1 包含:id,name 加2条数据 id | name | ---------- | 1 | add1 | | 2 | add2 | ----------操作如下: MySQL root(none):(none)> show databases; -…

Linux openEuler_24.03部署MySQL_8.4.0 LTS安装实测验证安装以及测试连接全过程实操手册

Linux openEuler_24.03部署MySQL_8.4.0 LTS安装实测验证安装以及测试连接全过程实操手册 前言: 什么是 MySQL? MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于Oracle 公司。MySQL 是一种关系型数据库管理系统,关系型数据库将数据保存在不同的表中,…

深入探讨SQL Server端口设置:理论与实践

引言 在现代企业级应用中,SQL Server作为微软的旗舰数据库产品,广泛应用于各种关键业务系统中。设置SQL Server的端口是数据库管理中的一个重要环节,它不仅影响到数据库的安全性,还直接关系到网络通信的效率和稳定性。本文将从计…

C++ 入门基础:开启编程之旅

文章目录 引言一、C的第⼀个程序二、命名空间1、namespace2、namespace的定义 三、C输入 与 输出四、缺省参数五、函数重载六、引用1、引用的概念和定义2、引用的特性3、指针和引用的关系七、inline八、nullptr 引言 C 是一种高效、灵活且功能强大的编程语言,广泛应…

C1W4.Assignment.Naive Machine Translation and LSH

理论课:C1W4.Machine Translation and Document Search 文章目录 1. The word embeddings data for English and French words1.1The dataThe subset of dataLoad two dictionaries 1.2 Generate embedding and transform matricesExercise 1: Translating English…

数学建模-Topsis(优劣解距离法)

介绍 TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution) 可翻译为逼近理想解排序法,国内常简称为优劣解距离法 TOPSIS 法是一种常用的综合评价方法,其能充分利用原始数据的信息, 其结果能精…

张量分解(5)——Tucker分解

🍅 写在前面 👨‍🎓 博主介绍:大家好,这里是hyk写算法了吗,一枚致力于学习算法和人工智能领域的小菜鸟。 🔎个人主页:主页链接(欢迎各位大佬光临指导) ⭐️近…

如何防范场外个股期权的交易风险?

场外个股期权交易,作为金融衍生品市场的重要组成部分,为投资者提供了更为灵活和多样化的投资策略。然而,其高杠杆、高风险特性也使得投资者在追求高收益的同时,面临着较大的交易风险。为了有效防范这些风险,投资者需要…

基于STM32设计的智能门锁(微信小程序+手机APP等多种方式开锁)(188)

基于STM32设计的智能门锁(微信小程序+手机APP等多种方式开锁)(188) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】整体构架【3】ESP8266模块配置【4】上位机开发思路【5】供电方式1.3 项目开发背景【1】选题的意义【…

Kafka Producer发送消息流程之Sender发送线程和在途请求缓存区

文章目录 1. Sender发送数据1. 发送数据的详细过程:2. 关键参数配置 2. 在途请求缓存区 1. Sender发送数据 Sender线程负责将已经在RecordAccumulator中准备好的消息批次发送到Kafka集群。虽然消息在RecordAccumulator中是按照分区组织的,但Sender线程在…

【VScode】安装【ESP-IDF】插件及相关工具链

一、ESP-IDF简介 二、VScode安装ESP-IDF插件 三、安装ESP-IDF、ESP-IDF-Tools以及相关工具链 四、测试例程&编译烧录 一、ESP-IDF简介 二、VScode安装ESP-IDF插件 【VScode】安装配置、插件及远程SSH连接 【VSCode】自定义配置 打开VScode,在插件管理搜索esp…

react + pro-components + ts完成单文件上传和批量上传

上传部分使用的是antd中的Upload组件,具体如下: GradingFilingReportUpload方法是后端已经做好文件流,前端只需要调用接口即可 单文件上传 <Uploadkey{upload_${record.id}}showUploadList{false}accept".xlsx"maxCount{1}customRequest{({ file }) > {const …

linux list

list_add list_add_tail

网络安全(含面试题版)

一、网络概念 网络&#xff1a;一组相互连接的计算机&#xff0c;多台计算机组成&#xff0c;使用物理线路进行连接 作用&#xff1a; 数据交换 资源共享 二、网络分类 计算机网络覆盖的地理区域决定了它的类型。一般分为局域网(LAN)、城域网(MAN)、广域网(WAN)。 三、www万维网…

06MFC之对话框--重绘元文件

文章目录 实现示例展示需要绘制的窗口/位置控件位置更新下一次示例粗细滑动部分更新重绘元文件(窗口变化内容消失)方法一:使用元文件方法二:兼容设备方法三:使用自定义类存储绘图数据除画笔外功能处理画笔功能处理保存前面画的线及色彩实现示例展示 需要绘制的窗口/位置 …

2、电脑各部件品牌介绍 - 计算机硬件品牌系列文章

笔者是一个电脑IT达人&#xff0c;对于电脑硬件挺感兴趣&#xff0c;今天有必要讲讲关于电脑各部件的品牌问题。关于电脑硬件介绍&#xff0c;见博文版块&#xff1a;计算机硬件系列 。下面对电脑的各部件品牌等进行介绍&#xff0c;便于大家选购电脑的时候做参考。 1、 CPU&am…

springboot人事管理系统论文--lw源码调试讲解

2 相关技术 2.1 VUE介绍 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目…