lammps/tools/matlab/readdump_all.m

63 lines
2.0 KiB
Matlab

function [varargout] = readdump_all(varargin)
% Reads all timesteps from a LAMMPS dump file.
% Input is dump file name with path
% Output is in the form of a structure with following variables
% .timestep --> Vector containing all time steps
% .Natoms --> Vector containing number of atoms at each time step
% .x_bound --> [t,2] array with xlo,xhi at each time step
% .y_bound --> [t,2] array with ylo,yhi at each time step
% .z_bound --> [t,2] array with zlo,zhi at each time step
% .atom_data --> 3 dimensional array with data at each time step stored
% as atomdata(:,:,t)
% Example
% data = readdump_all('dump.LAMMPS');
%
% See also readdump_one, scandump
%
% Author : Arun K. Subramaniyan
% sarunkarthi@gmail.com
% http://web.ics.purdue.edu/~asubrama/pages/Research_Main.htm
% School of Aeronautics and Astronautics
% Purdue University, West Lafayette, IN - 47907, USA.
try
dump = fopen(varargin{1},'r');
catch
error('Dumpfile not found!');
end
i=1;
while feof(dump) == 0
id = fgetl(dump);
if (strcmpi(id,'ITEM: TIMESTEP'))
timestep(i) = str2num(fgetl(dump));
else
if (strcmpi(id,'ITEM: NUMBER OF ATOMS'))
Natoms(i) = str2num(fgetl(dump));
else
if (strcmpi(id,'ITEM: BOX BOUNDS'))
x_bound(i,:) = str2num(fgetl(dump));
y_bound(i,:) = str2num(fgetl(dump));
z_bound(i,:) = str2num(fgetl(dump));
else
if (strcmpi(id(1:11),'ITEM: ATOMS'))
for j = 1 : 1: Natoms
atom_data(j,:,i) = str2num(fgetl(dump));
end
i=i+1;
end
end
end
end
end
%----------Outputs-------------
%OUTPUTS IN SAME VARIABLE STRUCTURE
varargout{1}.timestep = timestep;
varargout{1}.Natoms = Natoms;
varargout{1}.x_bound = x_bound;
varargout{1}.y_bound = y_bound;
varargout{1}.z_bound = z_bound;
varargout{1}.atom_data = atom_data;
%------------------------------
fclose(dump);