当前位置: 首页 > news >正文

MATLAB程序初始化OpenFOAM颗粒位置

问题引入

在OpenFOAM的颗粒两相流求解器中,我们可以采用manualInjection的方式进行自定义颗粒的初始位置,这个命令十分方便,在CFDEM中也有类似的命令,不过CFDEM中的命令更加强大,我们不仅可以定义颗粒的初始位置,而且还可以定义颗粒的初始速度,唯一的缺点就是CFDEM学起来资料比较少。。。
anyway,这里我们介绍如何在OpenFOAM中实现这个操作。
其核心步骤是在cosntant文件夹下创建kinematicCloudPositions文件,其大致内容如下:
在这里插入图片描述
于是自定义粒子的位置的思路就非常简单,我们利用MATLAB创建上面的文件内容即可。

MATLAB编程

这里不对程序做解说,直接放在这里。

%% write by rqli 2023/8/10
%% MATLAB程序初始化OpenFOAM颗粒位置(颗粒位置为均匀分布)
clc;clear;format long%% 各个方向颗粒的数目
NumXofP = 5;NumYofP = 5;NumZofP = 1;
%% 计算域参数
Lx = 0.278;Ly = 0.278;%这里是二维计算域,因此只有高度和宽度
Lz = 0.278;
%% 生成初始颗粒位置,每个点处速度的标准形式为(0.0,0.0,0.0)
position = zeros(NumXofP,NumYofP);
x = linspace(Lx/(2*NumXofP),Lx-Lx/(2*NumXofP),NumXofP);
y = linspace(Ly/(2*NumYofP),Ly-Ly/(2*NumYofP),NumYofP);
[X,Y] = meshgrid(x,y);
if NumZofP == 1postion_x = reshape(X,NumXofP*NumYofP*NumZofP,1);postion_y = reshape(Y,NumXofP*NumYofP*NumZofP,1);postion_z = zeros(NumXofP*NumYofP*NumZofP,1);
elseif NumZofP >1z = linspace(Lz/(2*NumZofP),Lz-Lz/(2*NumZofP),NumZofP); X3d = [];Y3d = [];Z3d = [];for i = 1:length(z)X3d = [X3d;X];Y3d = [Y3d;Y];Z3d = [Z3d;z(i).*ones(NumXofP,NumYofP)];endpostion_x = reshape(X3d,NumXofP*NumYofP*NumZofP,1);postion_y = reshape(Y3d,NumXofP*NumYofP*NumZofP,1);postion_z = reshape(Z3d,NumXofP*NumYofP*NumZofP,1);disp('done')
end%% 将速度场转为txt文件
position_xyz = zeros(NumXofP*NumYofP*NumZofP,1);
position_xyz = num2str(position_xyz);
position_xyz = string(position_xyz);
for i = 1:NumXofP*NumYofP*NumZofPposition_xyz(i) = strcat("(",num2str(postion_x(i))," ",...num2str(postion_y(i))," ",num2str(postion_z(i)),")");
end 
position_file = 'position';
writematrix(position_xyz,position_file);

二维粒子初始位置如下(采用scatter函数):
在这里插入图片描述
三维粒子位置排布如下(采用scatter3函数):
在这里插入图片描述

最后生成的文件如下:
在这里插入图片描述
我们把上面的坐标粘贴到kinematicCloudPositions文件里即可。

三维散点图的绘制参考资料

http://www.lryc.cn/news/117424.html

相关文章:

  • 软件第三方CMA、CNAS测试的目的和意义,信息化建设验收测试依据是什么?
  • CNN成长路:从AlexNet到EfficientNet(02)
  • 【Kubernetes】yaml文件格式
  • Python web实战之Django的文件上传和处理详解
  • android res中values-swxxdp计算
  • c动态内存申请
  • C#8.0本质论第一章--C#概述
  • geoserver编辑样式 【开发工具QGis的初次使用】
  • 【网络基础知识铺垫】
  • 一个利用oracle异常处理的函数
  • langchain-ChatGLM源码阅读:参数设置
  • 什么是Java中的工厂模式?
  • 数据库--MySQL
  • 浏览器多管闲事之跨域
  • 那为什么 async 函数最终返回的是一个新的 Promise?
  • Java的泛型
  • pve和openwrt以及我的电脑中网络的关系和互通组网
  • TypeScript学习笔记
  • MATLAB实现两组数据的延时对齐效果
  • 基于Spring Boot的网络在线学习网站的设计与实现(Java+spring boot+MySQL)
  • Is a directory: ‘outs//.ipynb_checkpoints‘
  • PintOS lab2 User Programs 实验记录
  • 『CV学习笔记』docker和nvidia-docker离线安装
  • 使用JavaScript实现页面滑动切换效果
  • react中的formik如何使用
  • MYSQL储存过程
  • fastadmin、vue、react图标库适用于多种框架
  • 篇七:桥接模式:连接抽象和实现
  • STL容器适配器 -- stack和queue(使用+实现)(C++)
  • K8s operator从0到1实战