用MATLAB创建一个矩阵,包含颗粒的ID,type,直径,密度,坐标等信息,并填充一个矩形的空间

LIGGGHTS可以read_data命令通过读取.txt文件中的颗粒信息。.txt的内容参考链接:liggghts通过.txt文件导入颗粒信息

下面的MATLAB代码可以根据需要生成一系列的颗粒信息,包括颗粒的ID,type,diameter,density,coordinate等。颗粒数量为8000,并且能够填充一个范围在(x_min,y_min,z_min)到(x_max,y_max,z_max)的矩形空间,每个方向上有20个颗粒,颗粒直径为0.008,颗粒密度为1000。

clc;
clear;
close all;

% Atoms的数量
particle_number = 8000;
% 创建一个8000*1的矩阵,作为Atoms ID
a=(1:particle_number)';
Atoms_ID = a;
% 创建一个8000*1的矩阵,作为Atoms type
b=ones(particle_number,1);
Atoms_type=b;
% 创建一个8000*1的矩阵,作为Atoms diameter
c=ones(particle_number,1);
particle_diameter=0.008;
Atoms_diameter=c*0.008;
% 创建一个8000*1的矩阵,作为Atoms diameter
d=ones(particle_number,1);
Atoms_density=d*1000;

% 创建一个8000*3的矩阵,作为Atoms coordinate
% 初始化一个8000*3的矩阵
% 定义每个方向上点的数量(三个方向上点的数量一致)
n = 20;
% 定义坐标范围(填充立方体的长度范围)
x_min = 0.1;
x_max = x_min+particle_diameter*(n-1);
y_min = 0.1;
y_max = y_min+particle_diameter*(n-1);
z_min = 0.1;
z_max = z_min+particle_diameter*(n-1);
% 初始化坐标矩阵
Atoms_coordinates = zeros(n^3, 3);
% 使用for循环填充坐标矩阵
index = 1;
for i = 1:n
    for j = 1:n
        for k =1:n
            x = linspace(x_min, x_max, n);
            y = linspace(y_min, y_max, n);
            z = linspace(z_min, z_max, n)
            Atoms_coordinates(index,:) = [x(i), y(j), z(k)];
            index = index + 1;
        end
    end
end
% 显示生成的坐标点
% disp(coordinates);

%创建一个大的矩阵M,记录Atoms的全部信息
M = [Atoms_ID Atoms_type Atoms_diameter Atoms_density Atoms_coordinates];

% 将矩阵M写入.xlsx文件
xlswrite('G:\cfdem_case\settlingTestMPI-Cate-222\MATLAB_file\particles.xlsx',M,'sheet1','A');

代码的最后将颗粒的信息写入到名为“particles.xlsx”的表格中,然后在创建一个.txt文件,把liggghts通过.txt文件导入颗粒信息中的表头复制到文件中,再把表格中的内容复制到后面即可。

posted @ 2024-01-15 14:28  希望先生  阅读(45)  评论(2编辑  收藏  举报