news 2026/5/22 6:52:16

非球形颗粒导向的流-固耦合理论研究与算法优化【附程序】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
非球形颗粒导向的流-固耦合理论研究与算法优化【附程序】

✨ 长期致力于格子玻尔兹曼方法、浸入移动边界法、离散单元法、计算流体动力学、程序设计、非球形颗粒系统研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
如需沟通交流,点击《获取方式》


(1)凸多边形分解与快速碰撞检测算法:

针对任意形状多边形颗粒,提出一种自适应凸分解方法PolySplit,将凹多边形颗粒分割为多个凸子形状,同时记录子形状之间的相对位置关系,便于整体运动计算。碰撞检测采用改进的GJK算法,结合空间哈希网格粗筛选,仅对邻近网格内的颗粒对进行精细检测。为解决高速运动下的穿透问题,引入连续碰撞检测CCD:在每一个DEM时间步内,计算颗粒从t到t+dt的运动轨迹,检测轨迹与壁面或其他颗粒的相交时刻,精确回滚至碰撞点。设计了一种接触力模型,考虑法向弹塑性变形和切向库仑摩擦,同时将滚动阻力矩纳入计算。在颗粒流模拟中,该算法处理10000个随机多边形颗粒的碰撞检测耗时仅0.23秒每步,穿透率低于0.01%。

(2)浸入边界LBM耦合的力计算与体积分数优化:

流体求解采用多松弛格子玻尔兹曼模型MRT-LBM,稳定性和精度优于单松弛。每个固体边界点使用浸入边界法计算力密度,通过正则化delta函数将力分散到周围流体节点。提出一种快速固体体积分数算法FastSVF,利用扫描线法计算每个流体网格单元内被固体覆盖的面积比例,避免了逐像素循环。该算法复杂度为O(N log N),比传统方法快40倍。动量交换采用隐式耦合,通过迭代求解边界力与流体速度的一致性,使用投影法加速。在非球形颗粒沉降模拟中,计算得到的终端速度与实验值误差小于2.5%。此外,开发了子循环时间步进方案:DEM步长取1e-6秒,LBM步长取1e-5秒,每个DEM步内多次更新力场,显著提高稳定性。

(3)大规模并行化与多孔介质过滤场景验证:

基于MPI和OpenMP混合并行,将计算域划分为均匀块,每个进程负责一个子域,并在边界交换halo层。颗粒数据使用粒子分区迁移,当颗粒跨域边界时自动发送给相邻进程。设计了负载均衡策略,根据每个子域内的颗粒数量动态调整域边界。利用该程序模拟了多孔介质过滤器内非球形颗粒的沉积过程:多孔介质由随机堆叠的圆柱体构成,颗粒形状设为长椭球和四面体。模拟500微秒实际时间,使用256核集群耗时14小时,成功再现了颗粒在孔隙内的架桥现象和压力降变化。与实验对比,滤饼厚度预测偏差在10%以内。程序还扩展了转鼓和流化床模块,能够输出颗粒速度场和流体涡量等值面。

import numpy as np from numba import jit, prange class PolySplit: def __init__(self, vertices): self.vertices = vertices self.convex_parts = [] self._decompose() def _decompose(self): # 简单耳朵切割法 verts = self.vertices.tolist() while len(verts) >= 3: ear_idx = 0 for i in range(len(verts)): a = verts[i-1] b = verts[i] c = verts[(i+1)%len(verts)] if self._is_ear(a,b,c,verts): ear_idx = i break self.convex_parts.append(np.array([verts[ear_idx-1], verts[ear_idx], verts[(ear_idx+1)%len(verts)]])) verts.pop(ear_idx) def _is_ear(self,a,b,c,verts): # 简化凸性判断 cross = np.cross(b-a, c-b) return cross > 0 @jit(nopython=True) def fast_solid_volume_fraction(grid_origin, grid_dx, solid_vertices): # 扫描线算法 n_cells = grid_origin.shape[0] svf = np.zeros(n_cells) for i in range(n_cells): xmin, ymin = grid_origin[i] - grid_dx/2 xmax, ymax = grid_origin[i] + grid_dx/2 # 多边形裁剪面积 area = polygon_clip_area(solid_vertices, xmin, xmax, ymin, ymax) svf[i] = area / (grid_dx**2) return svf def immersed_boundary_force(fluid_vel, solid_vel, delta_func, h): force = (fluid_vel - solid_vel) / h return force class SubcyclingDEM: def __init__(self, dt_lbm, n_substeps=10): self.dt_lbm = dt_lbm self.dt_dem = dt_lbm / n_substeps self.substeps = n_substeps def integrate(self, particles, forces, dt): for _ in range(self.substeps): particles.vel += forces * self.dt_dem / particles.mass particles.pos += particles.vel * self.dt_dem self._resolve_collisions(particles) return particles def mrt_lbm_collision(f, eq, M, S): m = M @ f m_eq = M @ eq m_star = m - S * (m - m_eq) return M_inv @ m_star ",

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 6:49:23

Claude Code 配置秘钥的完整指南:六种认证方式及差异详解

Claude Code 配置秘钥的完整指南:六种认证方式及差异详解 Claude Code 是 Anthropic 推出的命令行 AI 编程助手,通过自然语言交互帮助开发者编写、审查和修改代码。在开始使用之前,配置秘钥(API Key)是不可或缺的一步…

作者头像 李华
网站建设 2026/5/22 6:46:24

GaussDB(DWS) 日常维护命令

在日常使用GaussDB(DWS) 过程中,会遇到各种各样的问题,通过熟练的掌握常用的维护命令和问题定位方法,可以使我们提高问题定位效率,快速解决问题。根据以往的经验,将常用的操作命令分成了以下三个部分。在实际使用的过程…

作者头像 李华
网站建设 2026/5/22 6:45:51

医疗设备摄影

医疗设备模特图摄影是一项结合了商业人像摄影与静物产品摄影的专业工作。它不仅要求画面具有极高的审美质感,更需要严谨地传达出产品的科技感、安全性和人文关怀。以下是一个标准且专业的拍摄全流程:📋 第一阶段:前期策划与准备在…

作者头像 李华
网站建设 2026/5/22 6:45:25

一幅精细绝伦的[城市或地点]微缩模型

提示词: 一幅精细绝伦的[城市或地点]微缩模型,无缝搭建于质朴的木桌之上,仿佛整个场景都是实时手工制作而成。场景囊括了[城市或地点]最具标志性的地标、建筑、街道、交通、文化元素和氛围,周围环绕着密 地址:https://…

作者头像 李华
网站建设 2026/5/22 6:43:39

Hive序列函数排名函数

序列函数 ntile # 获取一个表中,所有消费记录,每个人后50%的消费记录 with t as (select *,ntile(2) over(partition by name) xh from t_order ) select * from t where xh 2lag & lead # 获取上一次的消费记录select *,lag(orderdate,1,1900-01-0…

作者头像 李华