3 views (last 30 days)

Show older comments

I have a folder containing the following files:

Every file has the same format, but for a different time step:

First (headerline): N, time, xmin, ymin, zmin, xmax, ymax, zmax

N Lines: x, y, z, vx, vy, vz, rad, q1, q2, q3, omex, omey, omez, xi

where N is the number of particles.

(x,y,z) are the coordinates

(vx, vy, vz) are the velocities

rad is radius of particle

time is time step

I have split the format into 3 seperate cell arrays as follow:

expData with format x, y, z, rad, z +rad, vol

vol is the volume of the particle, which I calculated from radius

velData with format vx, vy, vz, mag

runData with N, time, xmin, ymin, zmin, xmax, ymax, zmax

%% Loading the data

rhoPart = 2500;

files = dir(fullfile(uigetdir,'*.data*'));

[~,Index] = natsort({files.name});

files = files(Index);

expData = cell(length(files),1);

k = 1;

for i = 1:length(files)

fid = fopen(fullfile(files(i).folder,files(i).name),'r');

%% Reading the data

% Read all the data from the file

dataRead = textscan(fid,'%f %f %f %f %f %f %f %f %f %f %f %f %f %f','HeaderLines',1);

frewind(fid);

% Write headerline N, time, xmin, ymin, zmin, xmax, ymax, zmax

runData{k} = strsplit(fgetl(fid), ' ');

% Write only the x, y, and z components of the particles, particle radius,

% z component+ particle radius and volume of the particle

expData{k} = [dataRead{1}(:,1) dataRead{2}(:,1) dataRead{3}(:,1) dataRead{7}(:,1) dataRead{3}(:,1)+dataRead{7}(:,1) rhoPart*(4/3)*pi*(dataRead{7}(:,1).^3)];

% Write only the vx,vy,vz of the particles and magnitude

velData{k} = [dataRead{4}(:,1) dataRead{5}(:,1) dataRead{6}(:,1) sqrt(dataRead{4}(:,1).^2 + dataRead{5}(:,1).^2 + dataRead{6}(:,1).^2)];

fclose(fid);

k = k + 1;

end

With the following code I calculated the total mass of particles for every time step:

for i = 1:length(files)

%Count the number of particles in the silo (silo outlet is located at z =

%0.3 m)

particlesInSilo{i} = find(expData{i,1}(:,3)>0.3);

% Multiply the number of particles with the volume of the particle

siloMass{i} = sum(expData{i,1}(cell2mat(particlesInSilo(i)),6));

end

Thus,

the total mass of siloV1.data.1787 is 3.6317 kg at time step 1.900577757 s

the total mass of siloV1.data.1820 is 3.4481 kg at time step 1.935675163 s

....

the total mass of siloV1.data.2714 is 0 kg at time step 2.886495821 s

With the following code I found when the total mass is 0 kg:

for i = 1:length(files)

siloMass_zero = find(siloMass{1,i}(:)<=0);

end

I want to find the corresponding time step when the total mass is 0 kg. How can I do that?

Note that the codes I presented in this post are only sections of my code.

Mario Malic
on 14 Sep 2020

Great work!

You can post an answer to your question and accept it yourself so other people can find it useful if they encounter problem similar to yours.

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!